Remove storage textures from vertex tests
The template change in test/tint/builtins/gen/gen.wgsl.tmpl removes the
remaining usages of storage textures in vertex shaders in Tint end2end
tests, replacing them instead with a VertexOutput object to prevent DCE.
The template is the only manually modified file in this change, the rest
were created with:
./tools/run gen
./tools/run tests --generate-expected
Binding numbers and entry point ordering had to be slightly shuffled to
work around: crbug.com/42250109
Bug: 344846829
Change-Id: I6c2c80b78168a13c6c545e7a0dc924d64997ff0e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/193260
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Natalie Chouinard <chouinard@google.com>
diff --git a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl
index f13d44a..e22ab39 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r8unorm, read>;
// fn textureDimensions(texture: texture_storage_3d<r8unorm, read>) -> vec3<u32>
-fn textureDimensions_00229f() {
+fn textureDimensions_00229f() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_00229f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_00229f();
+ prevent_dce = textureDimensions_00229f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_00229f();
+ prevent_dce = textureDimensions_00229f();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_00229f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.dxc.hlsl
index 9819f9a..492cc11 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_00229f() {
+uint3 textureDimensions_00229f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_00229f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_00229f();
+ prevent_dce.Store3(0u, asuint(textureDimensions_00229f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_00229f();
+ prevent_dce.Store3(0u, asuint(textureDimensions_00229f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_00229f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.fxc.hlsl
index 9819f9a..492cc11 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_00229f() {
+uint3 textureDimensions_00229f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_00229f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_00229f();
+ prevent_dce.Store3(0u, asuint(textureDimensions_00229f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_00229f();
+ prevent_dce.Store3(0u, asuint(textureDimensions_00229f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_00229f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.msl
index 0266662..88ce825 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_00229f(texture3d<float, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_00229f(texture3d<float, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_00229f(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_00229f(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_00229f(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_00229f(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_00229f(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_00229f(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.spvasm
index eae0111..d865f9f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_00229f "textureDimensions_00229f"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_00229f = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_00229f = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_00229f
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_00229f
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_00229f
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_00229f
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_00229f
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_00229f
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.wgsl
index d49f90c..da76e54 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00229f.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r8unorm, read>;
-fn textureDimensions_00229f() {
+fn textureDimensions_00229f() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_00229f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_00229f();
+ prevent_dce = textureDimensions_00229f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_00229f();
+ prevent_dce = textureDimensions_00229f();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_00229f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl
index 09762ee..d96b636 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_multisampled_2d<i32>;
// fn textureDimensions(texture: texture_multisampled_2d<i32>) -> vec2<u32>
-fn textureDimensions_00348c() {
+fn textureDimensions_00348c() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_00348c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_00348c();
+ prevent_dce = textureDimensions_00348c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_00348c();
+ prevent_dce = textureDimensions_00348c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_00348c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.dxc.hlsl
index afffc74..15206a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DMS<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_00348c() {
+uint2 textureDimensions_00348c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_00348c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_00348c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_00348c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_00348c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_00348c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_00348c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.fxc.hlsl
index afffc74..15206a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DMS<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_00348c() {
+uint2 textureDimensions_00348c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_00348c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_00348c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_00348c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_00348c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_00348c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_00348c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.glsl
index 7a23e77..d3f95f7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp isampler2DMS arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_00348c() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_00348c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2DMS arg_0_1;
+uvec2 textureDimensions_00348c() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_00348c() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_00348c();
+ prevent_dce.inner = textureDimensions_00348c();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp isampler2DMS arg_0_1;
+uvec2 textureDimensions_00348c() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_00348c() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_00348c();
+ prevent_dce.inner = textureDimensions_00348c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isampler2DMS arg_0_1;
+uvec2 textureDimensions_00348c() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_00348c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.msl
index a1204f5..1a78c68 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_00348c(texture2d_ms<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_00348c(texture2d_ms<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_ms<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_00348c(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_ms<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_00348c(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_ms<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_00348c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_ms<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_00348c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_ms<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_ms<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_ms<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_00348c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_ms<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_00348c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.spvasm
index 6a14db2..515bfbe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_00348c "textureDimensions_00348c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 1 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_00348c = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_00348c = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_00348c
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_00348c
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_00348c
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_00348c
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_00348c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_00348c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.wgsl
index 7ec345a..6375abb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/00348c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_multisampled_2d<i32>;
-fn textureDimensions_00348c() {
+fn textureDimensions_00348c() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_00348c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_00348c();
+ prevent_dce = textureDimensions_00348c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_00348c();
+ prevent_dce = textureDimensions_00348c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_00348c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl
index cc5f408..4e4e26d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32uint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rg32uint, read_write>) -> u32
-fn textureDimensions_01e21e() {
+fn textureDimensions_01e21e() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_01e21e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_01e21e();
+ prevent_dce = textureDimensions_01e21e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_01e21e();
+ prevent_dce = textureDimensions_01e21e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_01e21e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.dxc.hlsl
index 7f22762..fdae3af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_01e21e() {
+uint textureDimensions_01e21e() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_01e21e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_01e21e();
+ prevent_dce.Store(0u, asuint(textureDimensions_01e21e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_01e21e();
+ prevent_dce.Store(0u, asuint(textureDimensions_01e21e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_01e21e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.fxc.hlsl
index 7f22762..fdae3af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_01e21e() {
+uint textureDimensions_01e21e() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_01e21e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_01e21e();
+ prevent_dce.Store(0u, asuint(textureDimensions_01e21e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_01e21e();
+ prevent_dce.Store(0u, asuint(textureDimensions_01e21e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_01e21e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.msl
index 5593c47..2166c55 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_01e21e(texture1d<uint, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_01e21e(texture1d<uint, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_01e21e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_01e21e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_01e21e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_01e21e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_01e21e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_01e21e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.spvasm
index 0261eb4..0cd6f97 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,71 +22,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_01e21e "textureDimensions_01e21e"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_01e21e = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_01e21e = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_01e21e
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_01e21e
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_01e21e
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_01e21e
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_01e21e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_01e21e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.wgsl
index 280bf97..edd5ec9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01e21e.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read_write>;
-fn textureDimensions_01e21e() {
+fn textureDimensions_01e21e() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_01e21e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_01e21e();
+ prevent_dce = textureDimensions_01e21e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_01e21e();
+ prevent_dce = textureDimensions_01e21e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_01e21e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl
index 36ae5f3..10bd349 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8uint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba8uint, read_write>) -> u32
-fn textureDimensions_01edb1() {
+fn textureDimensions_01edb1() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_01edb1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_01edb1();
+ prevent_dce = textureDimensions_01edb1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_01edb1();
+ prevent_dce = textureDimensions_01edb1();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_01edb1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.dxc.hlsl
index a28a5e3..4881e2c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_01edb1() {
+uint textureDimensions_01edb1() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_01edb1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_01edb1();
+ prevent_dce.Store(0u, asuint(textureDimensions_01edb1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_01edb1();
+ prevent_dce.Store(0u, asuint(textureDimensions_01edb1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_01edb1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.fxc.hlsl
index a28a5e3..4881e2c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_01edb1() {
+uint textureDimensions_01edb1() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_01edb1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_01edb1();
+ prevent_dce.Store(0u, asuint(textureDimensions_01edb1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_01edb1();
+ prevent_dce.Store(0u, asuint(textureDimensions_01edb1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_01edb1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.glsl
index e21cfc8..2662bf2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_01edb1() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_01edb1();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_01edb1() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_01edb1() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_01edb1();
+ prevent_dce.inner = textureDimensions_01edb1();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_01edb1() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_01edb1() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_01edb1();
+ prevent_dce.inner = textureDimensions_01edb1();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_01edb1() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_01edb1();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.msl
index 39b6cb9..6e2f615 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_01edb1(texture1d<uint, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_01edb1(texture1d<uint, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_01edb1(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_01edb1(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_01edb1(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_01edb1(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_01edb1(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_01edb1(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.spvasm
index e2c9a5f..d63ac24 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_01edb1 "textureDimensions_01edb1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_01edb1 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_01edb1 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_01edb1
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_01edb1
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_01edb1
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_01edb1
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_01edb1
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_01edb1
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.wgsl
index dc518a5..1e4c90c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/01edb1.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read_write>;
-fn textureDimensions_01edb1() {
+fn textureDimensions_01edb1() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_01edb1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_01edb1();
+ prevent_dce = textureDimensions_01edb1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_01edb1();
+ prevent_dce = textureDimensions_01edb1();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_01edb1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl
index 0135d2e..62ad640 100644
--- a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_1d<i32>;
// fn textureDimensions(texture: texture_1d<i32>, level: u32) -> u32
-fn textureDimensions_022903() {
+fn textureDimensions_022903() -> u32{
var arg_1 = 1u;
var res: u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_022903();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_022903();
+ prevent_dce = textureDimensions_022903();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_022903();
+ prevent_dce = textureDimensions_022903();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_022903();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.dxc.hlsl
index 03d1821..eddcc38 100644
--- a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_022903() {
+uint textureDimensions_022903() {
uint arg_1 = 1u;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_022903();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_022903();
+ prevent_dce.Store(0u, asuint(textureDimensions_022903()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_022903();
+ prevent_dce.Store(0u, asuint(textureDimensions_022903()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_022903();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.fxc.hlsl
index 03d1821..eddcc38 100644
--- a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_022903() {
+uint textureDimensions_022903() {
uint arg_1 = 1u;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_022903();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_022903();
+ prevent_dce.Store(0u, asuint(textureDimensions_022903()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_022903();
+ prevent_dce.Store(0u, asuint(textureDimensions_022903()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_022903();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.glsl
index 0c00216..7bc7e10 100644
--- a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_022903() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_022903();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2D arg_0_1;
+uint textureDimensions_022903() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_022903() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_022903();
+ prevent_dce.inner = textureDimensions_022903();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isampler2D arg_0_1;
+uint textureDimensions_022903() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_022903() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_022903();
+ prevent_dce.inner = textureDimensions_022903();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp isampler2D arg_0_1;
+uint textureDimensions_022903() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_022903();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.msl
index bcb14cd..435949f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_022903(texture1d<int, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_022903(texture1d<int, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_022903(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_022903(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_022903(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_022903(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_022903(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_022903(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.spvasm
index bae6a93..b436979 100644
--- a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,76 +22,102 @@
OpName %textureDimensions_022903 "textureDimensions_022903"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_022903 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_uint Function %24
+%textureDimensions_022903 = OpFunction %uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %9
+ %res = OpVariable %_ptr_Function_uint Function %9
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %uint %26 %27
- OpStore %res %25
- %31 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %32 = OpLoad %uint %res
- OpStore %31 %32
+ %27 = OpLoad %15 %arg_0
+ %28 = OpLoad %uint %arg_1
+ %26 = OpImageQuerySizeLod %uint %27 %28
+ OpStore %res %26
+ %30 = OpLoad %uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_022903
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_022903
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %uint %textureDimensions_022903
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %52 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %53 = OpFunctionCall %uint %textureDimensions_022903
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_022903
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_022903
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.wgsl
index 6e4a7b7..33c47bf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/022903.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_1d<i32>;
-fn textureDimensions_022903() {
+fn textureDimensions_022903() -> u32 {
var arg_1 = 1u;
var res : u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_022903();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_022903();
+ prevent_dce = textureDimensions_022903();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_022903();
+ prevent_dce = textureDimensions_022903();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_022903();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl
index 32f1c63..38b928d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16uint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba16uint, read_write>) -> vec3<u32>
-fn textureDimensions_0276ec() {
+fn textureDimensions_0276ec() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0276ec();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0276ec();
+ prevent_dce = textureDimensions_0276ec();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0276ec();
+ prevent_dce = textureDimensions_0276ec();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0276ec();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.dxc.hlsl
index b6e46d1..c0c408a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0276ec() {
+uint3 textureDimensions_0276ec() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0276ec();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0276ec();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0276ec()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0276ec();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0276ec()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0276ec();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.fxc.hlsl
index b6e46d1..c0c408a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0276ec() {
+uint3 textureDimensions_0276ec() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0276ec();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0276ec();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0276ec()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0276ec();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0276ec()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0276ec();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.glsl
index 669e6d9..a98be2c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16ui) uniform highp writeonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_0276ec() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_0276ec();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_0276ec() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_0276ec() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_0276ec();
+ prevent_dce.inner = textureDimensions_0276ec();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_0276ec() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_0276ec() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_0276ec();
+ prevent_dce.inner = textureDimensions_0276ec();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_0276ec() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_0276ec();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.msl
index f68db04..8821e88 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0276ec(texture3d<uint, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_0276ec(texture3d<uint, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_0276ec(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_0276ec(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_0276ec(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0276ec(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0276ec(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0276ec(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.spvasm
index 1a0ad29..5edc249 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_0276ec "textureDimensions_0276ec"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_0276ec = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_0276ec = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_0276ec
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_0276ec
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_0276ec
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_0276ec
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_0276ec
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_0276ec
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.wgsl
index 635fb14..54a716f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0276ec.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read_write>;
-fn textureDimensions_0276ec() {
+fn textureDimensions_0276ec() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0276ec();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0276ec();
+ prevent_dce = textureDimensions_0276ec();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0276ec();
+ prevent_dce = textureDimensions_0276ec();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0276ec();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl
index d1c5f01..b216927 100644
--- a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32float, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32float, read_write>) -> vec2<u32>
-fn textureDimensions_029589() {
+fn textureDimensions_029589() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_029589();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_029589();
+ prevent_dce = textureDimensions_029589();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_029589();
+ prevent_dce = textureDimensions_029589();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_029589();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.dxc.hlsl
index 49e14a0..56af906 100644
--- a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_029589() {
+uint2 textureDimensions_029589() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_029589();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_029589();
+ prevent_dce.Store2(0u, asuint(textureDimensions_029589()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_029589();
+ prevent_dce.Store2(0u, asuint(textureDimensions_029589()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_029589();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.fxc.hlsl
index 49e14a0..56af906 100644
--- a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_029589() {
+uint2 textureDimensions_029589() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_029589();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_029589();
+ prevent_dce.Store2(0u, asuint(textureDimensions_029589()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_029589();
+ prevent_dce.Store2(0u, asuint(textureDimensions_029589()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_029589();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.msl
index 3acfc54..fcfd0be 100644
--- a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_029589(texture2d_array<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_029589(texture2d_array<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_029589(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_029589(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_029589(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_029589(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_029589(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_029589(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.spvasm
index dd47a0a..abdc244 100644
--- a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,74 +21,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_029589 "textureDimensions_029589"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_029589 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_029589 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_029589
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_029589
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_029589
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_029589
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_029589
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_029589
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.wgsl
index 15ae9ca..8eb21b8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/029589.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read_write>;
-fn textureDimensions_029589() {
+fn textureDimensions_029589() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_029589();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_029589();
+ prevent_dce = textureDimensions_029589();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_029589();
+ prevent_dce = textureDimensions_029589();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_029589();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl
index 0d621b6..0ac27d6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16sint, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba16sint, read>) -> u32
-fn textureDimensions_0329b0() {
+fn textureDimensions_0329b0() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0329b0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_0329b0();
+ prevent_dce = textureDimensions_0329b0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0329b0();
+ prevent_dce = textureDimensions_0329b0();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0329b0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.dxc.hlsl
index 5fc2c73..f18e490 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0329b0() {
+uint textureDimensions_0329b0() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0329b0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0329b0();
+ prevent_dce.Store(0u, asuint(textureDimensions_0329b0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0329b0();
+ prevent_dce.Store(0u, asuint(textureDimensions_0329b0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0329b0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.fxc.hlsl
index 5fc2c73..f18e490 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0329b0() {
+uint textureDimensions_0329b0() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0329b0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0329b0();
+ prevent_dce.Store(0u, asuint(textureDimensions_0329b0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0329b0();
+ prevent_dce.Store(0u, asuint(textureDimensions_0329b0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0329b0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.glsl
index 0e9c2a5..62f1a63 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp readonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_0329b0() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_0329b0();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_0329b0() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_0329b0() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_0329b0();
+ prevent_dce.inner = textureDimensions_0329b0();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_0329b0() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_0329b0() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_0329b0();
+ prevent_dce.inner = textureDimensions_0329b0();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_0329b0() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_0329b0();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.msl
index 4238c80..1584c2b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0329b0(texture1d<int, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_0329b0(texture1d<int, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_0329b0(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_0329b0(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_0329b0(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0329b0(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0329b0(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0329b0(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.spvasm
index 01197e2..354158c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_0329b0 "textureDimensions_0329b0"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_0329b0 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_0329b0 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_0329b0
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_0329b0
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_0329b0
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_0329b0
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_0329b0
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_0329b0
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.wgsl
index cf3fa12..c0df005 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0329b0.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read>;
-fn textureDimensions_0329b0() {
+fn textureDimensions_0329b0() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0329b0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_0329b0();
+ prevent_dce = textureDimensions_0329b0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0329b0();
+ prevent_dce = textureDimensions_0329b0();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0329b0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl
index a4a9a45..72f716d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16float, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba16float, read_write>) -> u32
-fn textureDimensions_033195() {
+fn textureDimensions_033195() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_033195();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_033195();
+ prevent_dce = textureDimensions_033195();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_033195();
+ prevent_dce = textureDimensions_033195();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_033195();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.dxc.hlsl
index 8a61ef4..6112cb2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_033195() {
+uint textureDimensions_033195() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_033195();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_033195();
+ prevent_dce.Store(0u, asuint(textureDimensions_033195()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_033195();
+ prevent_dce.Store(0u, asuint(textureDimensions_033195()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_033195();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.fxc.hlsl
index 8a61ef4..6112cb2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_033195() {
+uint textureDimensions_033195() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_033195();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_033195();
+ prevent_dce.Store(0u, asuint(textureDimensions_033195()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_033195();
+ prevent_dce.Store(0u, asuint(textureDimensions_033195()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_033195();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.glsl
index b0c09b7..2169da3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_033195() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_033195();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_033195() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_033195() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_033195();
+ prevent_dce.inner = textureDimensions_033195();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_033195() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_033195() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_033195();
+ prevent_dce.inner = textureDimensions_033195();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_033195() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_033195();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.msl
index b64f227..7058000 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_033195(texture1d<float, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_033195(texture1d<float, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_033195(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_033195(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_033195(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_033195(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_033195(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_033195(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.spvasm
index 0443bb6..cc2dd95 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_033195 "textureDimensions_033195"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_033195 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_033195 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_033195
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_033195
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_033195
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_033195
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_033195
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_033195
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.wgsl
index 5542882..4a5a263 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033195.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read_write>;
-fn textureDimensions_033195() {
+fn textureDimensions_033195() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_033195();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_033195();
+ prevent_dce = textureDimensions_033195();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_033195();
+ prevent_dce = textureDimensions_033195();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_033195();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl
index 659cbc5..b2a0efd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8unorm, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba8unorm, read>) -> u32
-fn textureDimensions_033ea7() {
+fn textureDimensions_033ea7() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_033ea7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_033ea7();
+ prevent_dce = textureDimensions_033ea7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_033ea7();
+ prevent_dce = textureDimensions_033ea7();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_033ea7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.dxc.hlsl
index 05be229..41bc76b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_033ea7() {
+uint textureDimensions_033ea7() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_033ea7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_033ea7();
+ prevent_dce.Store(0u, asuint(textureDimensions_033ea7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_033ea7();
+ prevent_dce.Store(0u, asuint(textureDimensions_033ea7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_033ea7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.fxc.hlsl
index 05be229..41bc76b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_033ea7() {
+uint textureDimensions_033ea7() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_033ea7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_033ea7();
+ prevent_dce.Store(0u, asuint(textureDimensions_033ea7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_033ea7();
+ prevent_dce.Store(0u, asuint(textureDimensions_033ea7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_033ea7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.glsl
index a3d7300..281f13fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_033ea7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_033ea7();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp readonly image2D arg_0;
+uint textureDimensions_033ea7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_033ea7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_033ea7();
+ prevent_dce.inner = textureDimensions_033ea7();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp readonly image2D arg_0;
+uint textureDimensions_033ea7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_033ea7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_033ea7();
+ prevent_dce.inner = textureDimensions_033ea7();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8) uniform highp readonly image2D arg_0;
+uint textureDimensions_033ea7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_033ea7();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.msl
index b38ca7a..792d02d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_033ea7(texture1d<float, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_033ea7(texture1d<float, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_033ea7(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_033ea7(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_033ea7(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_033ea7(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_033ea7(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_033ea7(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.spvasm
index 2c45041..8ad547c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_033ea7 "textureDimensions_033ea7"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_033ea7 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_033ea7 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_033ea7
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_033ea7
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_033ea7
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_033ea7
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_033ea7
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_033ea7
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.wgsl
index 302de0f..6f9b649 100644
--- a/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/033ea7.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read>;
-fn textureDimensions_033ea7() {
+fn textureDimensions_033ea7() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_033ea7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_033ea7();
+ prevent_dce = textureDimensions_033ea7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_033ea7();
+ prevent_dce = textureDimensions_033ea7();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_033ea7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl
index 28441b4..830c590 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8sint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba8sint, read_write>) -> u32
-fn textureDimensions_038847() {
+fn textureDimensions_038847() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_038847();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_038847();
+ prevent_dce = textureDimensions_038847();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_038847();
+ prevent_dce = textureDimensions_038847();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_038847();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.dxc.hlsl
index f8f12b5..bcd9624 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_038847() {
+uint textureDimensions_038847() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_038847();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_038847();
+ prevent_dce.Store(0u, asuint(textureDimensions_038847()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_038847();
+ prevent_dce.Store(0u, asuint(textureDimensions_038847()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_038847();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.fxc.hlsl
index f8f12b5..bcd9624 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_038847() {
+uint textureDimensions_038847() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_038847();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_038847();
+ prevent_dce.Store(0u, asuint(textureDimensions_038847()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_038847();
+ prevent_dce.Store(0u, asuint(textureDimensions_038847()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_038847();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.glsl
index c004d6f..df78138 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_038847() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_038847();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_038847() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_038847() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_038847();
+ prevent_dce.inner = textureDimensions_038847();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_038847() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_038847() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_038847();
+ prevent_dce.inner = textureDimensions_038847();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_038847() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_038847();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.msl
index 7cb0219..5c4c0a7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_038847(texture1d<int, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_038847(texture1d<int, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_038847(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_038847(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_038847(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_038847(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_038847(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_038847(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.spvasm
index 3919de4..5cfb77b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_038847 "textureDimensions_038847"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_038847 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_038847 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_038847
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_038847
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_038847
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_038847
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_038847
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_038847
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.wgsl
index 0909e14..f26a5dc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/038847.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read_write>;
-fn textureDimensions_038847() {
+fn textureDimensions_038847() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_038847();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_038847();
+ prevent_dce = textureDimensions_038847();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_038847();
+ prevent_dce = textureDimensions_038847();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_038847();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl
index 00e4e6b..464f22a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8snorm, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba8snorm, read_write>) -> vec2<u32>
-fn textureDimensions_03f81e() {
+fn textureDimensions_03f81e() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_03f81e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_03f81e();
+ prevent_dce = textureDimensions_03f81e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_03f81e();
+ prevent_dce = textureDimensions_03f81e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_03f81e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.dxc.hlsl
index f93ef04..57eca16 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_03f81e() {
+uint2 textureDimensions_03f81e() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_03f81e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_03f81e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_03f81e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_03f81e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_03f81e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_03f81e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.fxc.hlsl
index f93ef04..57eca16 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_03f81e() {
+uint2 textureDimensions_03f81e() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_03f81e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_03f81e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_03f81e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_03f81e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_03f81e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_03f81e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.glsl
index fdbd2b5..a0b9769 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_03f81e() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_03f81e();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_03f81e() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_03f81e() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_03f81e();
+ prevent_dce.inner = textureDimensions_03f81e();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_03f81e() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_03f81e() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_03f81e();
+ prevent_dce.inner = textureDimensions_03f81e();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_03f81e() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_03f81e();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.msl
index 2a22d32..873686f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_03f81e(texture2d<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_03f81e(texture2d<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_03f81e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_03f81e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_03f81e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_03f81e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_03f81e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_03f81e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.spvasm
index 32307c1..4d494e2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_03f81e "textureDimensions_03f81e"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_03f81e = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_03f81e = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_03f81e
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_03f81e
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_03f81e
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_03f81e
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_03f81e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_03f81e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.wgsl
index 67bc805..cc0a946 100644
--- a/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/03f81e.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read_write>;
-fn textureDimensions_03f81e() {
+fn textureDimensions_03f81e() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_03f81e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_03f81e();
+ prevent_dce = textureDimensions_03f81e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_03f81e();
+ prevent_dce = textureDimensions_03f81e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_03f81e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl
index a229885..2432731 100644
--- a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16float, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba16float, read>) -> vec2<u32>
-fn textureDimensions_07f1ba() {
+fn textureDimensions_07f1ba() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_07f1ba();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_07f1ba();
+ prevent_dce = textureDimensions_07f1ba();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_07f1ba();
+ prevent_dce = textureDimensions_07f1ba();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_07f1ba();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.dxc.hlsl
index dfd2e4d..b6aa069 100644
--- a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_07f1ba() {
+uint2 textureDimensions_07f1ba() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_07f1ba();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_07f1ba();
+ prevent_dce.Store2(0u, asuint(textureDimensions_07f1ba()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_07f1ba();
+ prevent_dce.Store2(0u, asuint(textureDimensions_07f1ba()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_07f1ba();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.fxc.hlsl
index dfd2e4d..b6aa069 100644
--- a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_07f1ba() {
+uint2 textureDimensions_07f1ba() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_07f1ba();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_07f1ba();
+ prevent_dce.Store2(0u, asuint(textureDimensions_07f1ba()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_07f1ba();
+ prevent_dce.Store2(0u, asuint(textureDimensions_07f1ba()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_07f1ba();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.glsl
index 882e555..aa719e8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_07f1ba() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_07f1ba();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_07f1ba() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_07f1ba() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_07f1ba();
+ prevent_dce.inner = textureDimensions_07f1ba();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_07f1ba() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_07f1ba() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_07f1ba();
+ prevent_dce.inner = textureDimensions_07f1ba();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_07f1ba() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_07f1ba();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.msl
index 58f33c0..acac22d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_07f1ba(texture2d<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_07f1ba(texture2d<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_07f1ba(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_07f1ba(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_07f1ba(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_07f1ba(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_07f1ba(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_07f1ba(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.spvasm
index 552a06e..2d41a9a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_07f1ba "textureDimensions_07f1ba"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_07f1ba = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_07f1ba = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_07f1ba
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_07f1ba
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_07f1ba
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_07f1ba
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_07f1ba
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_07f1ba
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.wgsl
index ed1556f..5a6396f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/07f1ba.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read>;
-fn textureDimensions_07f1ba() {
+fn textureDimensions_07f1ba() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_07f1ba();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_07f1ba();
+ prevent_dce = textureDimensions_07f1ba();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_07f1ba();
+ prevent_dce = textureDimensions_07f1ba();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_07f1ba();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl
index eee5edf..f71c2d7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8unorm, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba8unorm, read>) -> vec2<u32>
-fn textureDimensions_088918() {
+fn textureDimensions_088918() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_088918();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_088918();
+ prevent_dce = textureDimensions_088918();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_088918();
+ prevent_dce = textureDimensions_088918();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_088918();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.dxc.hlsl
index 3e4a80b..652b912 100644
--- a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_088918() {
+uint2 textureDimensions_088918() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_088918();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_088918();
+ prevent_dce.Store2(0u, asuint(textureDimensions_088918()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_088918();
+ prevent_dce.Store2(0u, asuint(textureDimensions_088918()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_088918();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.fxc.hlsl
index 3e4a80b..652b912 100644
--- a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_088918() {
+uint2 textureDimensions_088918() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_088918();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_088918();
+ prevent_dce.Store2(0u, asuint(textureDimensions_088918()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_088918();
+ prevent_dce.Store2(0u, asuint(textureDimensions_088918()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_088918();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.glsl
index 20836f0..3668eb6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_088918() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_088918();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_088918() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_088918() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_088918();
+ prevent_dce.inner = textureDimensions_088918();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_088918() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_088918() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_088918();
+ prevent_dce.inner = textureDimensions_088918();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_088918() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_088918();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.msl
index 67459cc..ce5e302 100644
--- a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_088918(texture2d<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_088918(texture2d<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_088918(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_088918(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_088918(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_088918(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_088918(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_088918(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.spvasm
index 5a9bda4..81ccf40 100644
--- a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_088918 "textureDimensions_088918"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_088918 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_088918 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_088918
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_088918
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_088918
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_088918
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_088918
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_088918
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.wgsl
index 06a622a..d998ab3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/088918.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read>;
-fn textureDimensions_088918() {
+fn textureDimensions_088918() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_088918();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_088918();
+ prevent_dce = textureDimensions_088918();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_088918();
+ prevent_dce = textureDimensions_088918();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_088918();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl
index 6955cb9..95d3f41 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_3d<f32>;
// fn textureDimensions(texture: texture_3d<f32>, level: u32) -> vec3<u32>
-fn textureDimensions_0890c6() {
+fn textureDimensions_0890c6() -> vec3<u32>{
var arg_1 = 1u;
var res: vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0890c6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0890c6();
+ prevent_dce = textureDimensions_0890c6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0890c6();
+ prevent_dce = textureDimensions_0890c6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0890c6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.dxc.hlsl
index 93cdf69..28a1e209 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0890c6() {
+uint3 textureDimensions_0890c6() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0890c6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0890c6();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0890c6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0890c6();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0890c6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0890c6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.fxc.hlsl
index 93cdf69..28a1e209 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0890c6() {
+uint3 textureDimensions_0890c6() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0890c6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0890c6();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0890c6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0890c6();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0890c6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0890c6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.glsl
index add8ded..4870995 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.glsl
@@ -1,48 +1,26 @@
#version 310 es
-
-uniform highp sampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_0890c6() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_0890c6();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_0890c6() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_0890c6() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_0890c6();
+ prevent_dce.inner = textureDimensions_0890c6();
}
void main() {
@@ -52,19 +30,24 @@
#version 310 es
uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_0890c6() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_0890c6() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_0890c6();
+ prevent_dce.inner = textureDimensions_0890c6();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -72,3 +55,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_0890c6() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_0890c6();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.msl
index f655a1a..8d1db9a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0890c6(texture3d<float, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_0890c6(texture3d<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint3 res = uint3(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1), tint_symbol_1.get_depth(arg_1));
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_0890c6(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_0890c6(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_0890c6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0890c6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0890c6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0890c6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.spvasm
index 9aee0f6..f948546 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,78 +21,104 @@
OpName %textureDimensions_0890c6 "textureDimensions_0890c6"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %30 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_0890c6 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v3uint Function %30
+%textureDimensions_0890c6 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v3uint Function %10
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %v3uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %34 = OpLoad %v3uint %res
- OpStore %33 %34
+ %28 = OpLoad %16 %arg_0
+ %29 = OpLoad %uint %arg_1
+ %27 = OpImageQuerySizeLod %v3uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %v3uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_0890c6
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_0890c6
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %v3uint %textureDimensions_0890c6
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %54 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %55 = OpFunctionCall %v3uint %textureDimensions_0890c6
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v3uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_0890c6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_0890c6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.wgsl
index 52814c2..a6c9939 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0890c6.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_3d<f32>;
-fn textureDimensions_0890c6() {
+fn textureDimensions_0890c6() -> vec3<u32> {
var arg_1 = 1u;
var res : vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0890c6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0890c6();
+ prevent_dce = textureDimensions_0890c6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0890c6();
+ prevent_dce = textureDimensions_0890c6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0890c6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl
index a690e71..2066fe0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32sint, read>;
// fn textureDimensions(texture: texture_storage_2d<rg32sint, read>) -> vec2<u32>
-fn textureDimensions_08e371() {
+fn textureDimensions_08e371() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_08e371();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_08e371();
+ prevent_dce = textureDimensions_08e371();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_08e371();
+ prevent_dce = textureDimensions_08e371();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_08e371();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.dxc.hlsl
index 8c9d1923..703f0d6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_08e371() {
+uint2 textureDimensions_08e371() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_08e371();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_08e371();
+ prevent_dce.Store2(0u, asuint(textureDimensions_08e371()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_08e371();
+ prevent_dce.Store2(0u, asuint(textureDimensions_08e371()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_08e371();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.fxc.hlsl
index 8c9d1923..703f0d6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_08e371() {
+uint2 textureDimensions_08e371() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_08e371();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_08e371();
+ prevent_dce.Store2(0u, asuint(textureDimensions_08e371()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_08e371();
+ prevent_dce.Store2(0u, asuint(textureDimensions_08e371()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_08e371();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.msl
index 1dbf58e..34a9b97 100644
--- a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_08e371(texture2d<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_08e371(texture2d<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_08e371(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_08e371(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_08e371(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_08e371(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_08e371(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_08e371(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.spvasm
index ccae3a4..52ff49f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,74 +21,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_08e371 "textureDimensions_08e371"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_08e371 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_08e371 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_08e371
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_08e371
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_08e371
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_08e371
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_08e371
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_08e371
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.wgsl
index 402fc85..82497f4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/08e371.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read>;
-fn textureDimensions_08e371() {
+fn textureDimensions_08e371() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_08e371();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_08e371();
+ prevent_dce = textureDimensions_08e371();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_08e371();
+ prevent_dce = textureDimensions_08e371();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_08e371();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl
index 4a7b581..78e5185 100644
--- a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32uint, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba32uint, write>) -> u32
-fn textureDimensions_09140b() {
+fn textureDimensions_09140b() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_09140b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_09140b();
+ prevent_dce = textureDimensions_09140b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_09140b();
+ prevent_dce = textureDimensions_09140b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_09140b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.dxc.hlsl
index 614aad2..6fdea37 100644
--- a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_09140b() {
+uint textureDimensions_09140b() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_09140b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_09140b();
+ prevent_dce.Store(0u, asuint(textureDimensions_09140b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_09140b();
+ prevent_dce.Store(0u, asuint(textureDimensions_09140b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_09140b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.fxc.hlsl
index 614aad2..6fdea37 100644
--- a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_09140b() {
+uint textureDimensions_09140b() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_09140b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_09140b();
+ prevent_dce.Store(0u, asuint(textureDimensions_09140b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_09140b();
+ prevent_dce.Store(0u, asuint(textureDimensions_09140b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_09140b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.glsl
index d8670d9..8e15e69 100644
--- a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_09140b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_09140b();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_09140b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_09140b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_09140b();
+ prevent_dce.inner = textureDimensions_09140b();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_09140b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_09140b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_09140b();
+ prevent_dce.inner = textureDimensions_09140b();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_09140b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_09140b();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.msl
index 5811c2f..b5a1c78 100644
--- a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_09140b(texture1d<uint, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_09140b(texture1d<uint, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_09140b(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_09140b(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_09140b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_09140b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_09140b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_09140b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.spvasm
index 1db4e59..79b4996 100644
--- a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_09140b "textureDimensions_09140b"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_09140b = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_09140b = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_09140b
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_09140b
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_09140b
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_09140b
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_09140b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_09140b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.wgsl
index 19513a6..42f4919 100644
--- a/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/09140b.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, write>;
-fn textureDimensions_09140b() {
+fn textureDimensions_09140b() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_09140b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_09140b();
+ prevent_dce = textureDimensions_09140b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_09140b();
+ prevent_dce = textureDimensions_09140b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_09140b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl
index c04ab51..0b2ded0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba16uint, read_write>) -> vec2<u32>
-fn textureDimensions_0973c9() {
+fn textureDimensions_0973c9() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0973c9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0973c9();
+ prevent_dce = textureDimensions_0973c9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0973c9();
+ prevent_dce = textureDimensions_0973c9();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0973c9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.dxc.hlsl
index 5d0b6e5..83d668e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0973c9() {
+uint2 textureDimensions_0973c9() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0973c9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0973c9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0973c9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0973c9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0973c9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0973c9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.fxc.hlsl
index 5d0b6e5..83d668e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0973c9() {
+uint2 textureDimensions_0973c9() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0973c9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0973c9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0973c9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0973c9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0973c9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0973c9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.glsl
index 2b1d226..8f45b27 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_0973c9() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_0973c9();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_0973c9() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_0973c9() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_0973c9();
+ prevent_dce.inner = textureDimensions_0973c9();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_0973c9() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_0973c9() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_0973c9();
+ prevent_dce.inner = textureDimensions_0973c9();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_0973c9() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_0973c9();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.msl
index 3907589..420e0be 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0973c9(texture2d<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_0973c9(texture2d<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_0973c9(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_0973c9(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_0973c9(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0973c9(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0973c9(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0973c9(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.spvasm
index 7417b2d..a363b39 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_0973c9 "textureDimensions_0973c9"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_0973c9 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_0973c9 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_0973c9
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_0973c9
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_0973c9
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_0973c9
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_0973c9
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_0973c9
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.wgsl
index 4a3ee65..4c30e2a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0973c9.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read_write>;
-fn textureDimensions_0973c9() {
+fn textureDimensions_0973c9() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0973c9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0973c9();
+ prevent_dce = textureDimensions_0973c9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0973c9();
+ prevent_dce = textureDimensions_0973c9();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0973c9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl
index 4109db3..e032f58 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32float, write>;
// fn textureDimensions(texture: texture_storage_2d<r32float, write>) -> vec2<u32>
-fn textureDimensions_0baa0d() {
+fn textureDimensions_0baa0d() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0baa0d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0baa0d();
+ prevent_dce = textureDimensions_0baa0d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0baa0d();
+ prevent_dce = textureDimensions_0baa0d();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0baa0d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.dxc.hlsl
index 41e827d..a8b3209 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0baa0d() {
+uint2 textureDimensions_0baa0d() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0baa0d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0baa0d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0baa0d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0baa0d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0baa0d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0baa0d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.fxc.hlsl
index 41e827d..a8b3209 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0baa0d() {
+uint2 textureDimensions_0baa0d() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0baa0d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0baa0d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0baa0d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0baa0d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0baa0d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0baa0d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.glsl
index 7b201ae..089b7ff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_0baa0d() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_0baa0d();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_0baa0d() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_0baa0d() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_0baa0d();
+ prevent_dce.inner = textureDimensions_0baa0d();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_0baa0d() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_0baa0d() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_0baa0d();
+ prevent_dce.inner = textureDimensions_0baa0d();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_0baa0d() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_0baa0d();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.msl
index 165cb68..31ace63 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0baa0d(texture2d<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_0baa0d(texture2d<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_0baa0d(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_0baa0d(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_0baa0d(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0baa0d(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0baa0d(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0baa0d(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.spvasm
index 2dee716..4598beb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_0baa0d "textureDimensions_0baa0d"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_0baa0d = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_0baa0d = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_0baa0d
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_0baa0d
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_0baa0d
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_0baa0d
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_0baa0d
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_0baa0d
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.wgsl
index 35d4e6e..fd39459 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0baa0d.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, write>;
-fn textureDimensions_0baa0d() {
+fn textureDimensions_0baa0d() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0baa0d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0baa0d();
+ prevent_dce = textureDimensions_0baa0d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0baa0d();
+ prevent_dce = textureDimensions_0baa0d();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0baa0d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl
index 74930be..ce541f3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16float, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba16float, write>) -> u32
-fn textureDimensions_0c0b0c() {
+fn textureDimensions_0c0b0c() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0c0b0c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_0c0b0c();
+ prevent_dce = textureDimensions_0c0b0c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0c0b0c();
+ prevent_dce = textureDimensions_0c0b0c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0c0b0c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.dxc.hlsl
index a3a30ed..e050ec6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0c0b0c() {
+uint textureDimensions_0c0b0c() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0c0b0c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0c0b0c();
+ prevent_dce.Store(0u, asuint(textureDimensions_0c0b0c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0c0b0c();
+ prevent_dce.Store(0u, asuint(textureDimensions_0c0b0c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0c0b0c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.fxc.hlsl
index a3a30ed..e050ec6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0c0b0c() {
+uint textureDimensions_0c0b0c() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0c0b0c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0c0b0c();
+ prevent_dce.Store(0u, asuint(textureDimensions_0c0b0c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0c0b0c();
+ prevent_dce.Store(0u, asuint(textureDimensions_0c0b0c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0c0b0c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.glsl
index 0fbe840..cb90f2a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_0c0b0c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_0c0b0c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_0c0b0c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_0c0b0c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_0c0b0c();
+ prevent_dce.inner = textureDimensions_0c0b0c();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_0c0b0c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_0c0b0c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_0c0b0c();
+ prevent_dce.inner = textureDimensions_0c0b0c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_0c0b0c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_0c0b0c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.msl
index 51203b8..ee2a558 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0c0b0c(texture1d<float, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_0c0b0c(texture1d<float, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_0c0b0c(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_0c0b0c(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_0c0b0c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0c0b0c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0c0b0c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0c0b0c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.spvasm
index 2a0cc16..30f4862 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_0c0b0c "textureDimensions_0c0b0c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_0c0b0c = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_0c0b0c = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_0c0b0c
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_0c0b0c
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_0c0b0c
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_0c0b0c
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_0c0b0c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_0c0b0c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.wgsl
index 2849ca8..2d464fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0c0b0c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, write>;
-fn textureDimensions_0c0b0c() {
+fn textureDimensions_0c0b0c() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0c0b0c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_0c0b0c();
+ prevent_dce = textureDimensions_0c0b0c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0c0b0c();
+ prevent_dce = textureDimensions_0c0b0c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0c0b0c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl
index 5d3f90a..d8a37bf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32uint, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba32uint, read>) -> vec2<u32>
-fn textureDimensions_0d4a7c() {
+fn textureDimensions_0d4a7c() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0d4a7c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0d4a7c();
+ prevent_dce = textureDimensions_0d4a7c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0d4a7c();
+ prevent_dce = textureDimensions_0d4a7c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0d4a7c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.dxc.hlsl
index 0c4b1e1..2731228 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0d4a7c() {
+uint2 textureDimensions_0d4a7c() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0d4a7c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0d4a7c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0d4a7c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0d4a7c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0d4a7c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0d4a7c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.fxc.hlsl
index 0c4b1e1..2731228 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0d4a7c() {
+uint2 textureDimensions_0d4a7c() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0d4a7c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0d4a7c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0d4a7c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0d4a7c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0d4a7c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0d4a7c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.glsl
index 28badc4..d835f56 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp readonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_0d4a7c() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_0d4a7c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_0d4a7c() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_0d4a7c() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_0d4a7c();
+ prevent_dce.inner = textureDimensions_0d4a7c();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_0d4a7c() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_0d4a7c() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_0d4a7c();
+ prevent_dce.inner = textureDimensions_0d4a7c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_0d4a7c() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_0d4a7c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.msl
index c19f060..424a739 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0d4a7c(texture2d<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_0d4a7c(texture2d<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_0d4a7c(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_0d4a7c(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_0d4a7c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0d4a7c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0d4a7c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0d4a7c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.spvasm
index 58f200c..d92dcbe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_0d4a7c "textureDimensions_0d4a7c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_0d4a7c = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_0d4a7c = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_0d4a7c
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_0d4a7c
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_0d4a7c
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_0d4a7c
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_0d4a7c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_0d4a7c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.wgsl
index a6ca5b0..3356f21 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0d4a7c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read>;
-fn textureDimensions_0d4a7c() {
+fn textureDimensions_0d4a7c() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0d4a7c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0d4a7c();
+ prevent_dce = textureDimensions_0d4a7c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0d4a7c();
+ prevent_dce = textureDimensions_0d4a7c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0d4a7c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl
index 42ffc99..84f1f0a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba8unorm, read_write>) -> vec3<u32>
-fn textureDimensions_0de70c() {
+fn textureDimensions_0de70c() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0de70c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0de70c();
+ prevent_dce = textureDimensions_0de70c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0de70c();
+ prevent_dce = textureDimensions_0de70c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0de70c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.dxc.hlsl
index b4ab1a7..4f17617 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0de70c() {
+uint3 textureDimensions_0de70c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0de70c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0de70c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0de70c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0de70c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0de70c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0de70c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.fxc.hlsl
index b4ab1a7..4f17617 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0de70c() {
+uint3 textureDimensions_0de70c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0de70c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0de70c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0de70c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0de70c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_0de70c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0de70c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.glsl
index d572036..400252c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_0de70c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_0de70c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_0de70c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_0de70c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_0de70c();
+ prevent_dce.inner = textureDimensions_0de70c();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_0de70c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_0de70c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_0de70c();
+ prevent_dce.inner = textureDimensions_0de70c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_0de70c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_0de70c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.msl
index 146536e..cf42ff93 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0de70c(texture3d<float, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_0de70c(texture3d<float, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_0de70c(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_0de70c(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_0de70c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0de70c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0de70c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0de70c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.spvasm
index b3f7811..bf0f402 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_0de70c "textureDimensions_0de70c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_0de70c = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_0de70c = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_0de70c
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_0de70c
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_0de70c
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_0de70c
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_0de70c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_0de70c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.wgsl
index 2192c30..38177ff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0de70c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read_write>;
-fn textureDimensions_0de70c() {
+fn textureDimensions_0de70c() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0de70c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0de70c();
+ prevent_dce = textureDimensions_0de70c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0de70c();
+ prevent_dce = textureDimensions_0de70c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0de70c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl
index 97b8acb..ba65bb8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_depth_cube_array;
// fn textureDimensions(texture: texture_depth_cube_array, level: i32) -> vec2<u32>
-fn textureDimensions_0ff9a4() {
+fn textureDimensions_0ff9a4() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0ff9a4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0ff9a4();
+ prevent_dce = textureDimensions_0ff9a4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0ff9a4();
+ prevent_dce = textureDimensions_0ff9a4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0ff9a4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.dxc.hlsl
index c285a4b..5b339c1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0ff9a4() {
+uint2 textureDimensions_0ff9a4() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0ff9a4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0ff9a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0ff9a4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0ff9a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0ff9a4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0ff9a4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.fxc.hlsl
index c285a4b..5b339c1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_0ff9a4() {
+uint2 textureDimensions_0ff9a4() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_0ff9a4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_0ff9a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0ff9a4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_0ff9a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_0ff9a4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_0ff9a4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.msl
index 5f57612..bf8f831 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_0ff9a4(depthcube_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_0ff9a4(depthcube_array<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depthcube_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_0ff9a4(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depthcube_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_0ff9a4(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depthcube_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_0ff9a4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depthcube_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_0ff9a4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depthcube_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depthcube_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depthcube_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_0ff9a4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depthcube_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_0ff9a4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.spvasm
index 535ebcd..93e1620 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 67
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,81 +22,108 @@
OpName %textureDimensions_0ff9a4 "textureDimensions_0ff9a4"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_0ff9a4 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_0ff9a4 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %int %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %int %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_0ff9a4
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_0ff9a4
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_0ff9a4
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %58 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %59 = OpFunctionCall %v2uint %textureDimensions_0ff9a4
+ OpStore %58 %59
+ %60 = OpLoad %VertexOutput %out
+ OpReturnValue %60
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %62 = OpLabel
+ %63 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %64 = OpCompositeExtract %v4float %63 0
+ OpStore %pos_1 %64
+ %65 = OpCompositeExtract %v2uint %63 1
+ OpStore %prevent_dce_1 %65
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_0ff9a4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_0ff9a4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.wgsl
index b2098ae..7c4485e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/0ff9a4.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
-fn textureDimensions_0ff9a4() {
+fn textureDimensions_0ff9a4() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_0ff9a4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_0ff9a4();
+ prevent_dce = textureDimensions_0ff9a4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_0ff9a4();
+ prevent_dce = textureDimensions_0ff9a4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_0ff9a4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl
index 08a8932..8c6f1dab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32float, read>;
// fn textureDimensions(texture: texture_storage_2d_array<r32float, read>) -> vec2<u32>
-fn textureDimensions_135176() {
+fn textureDimensions_135176() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_135176();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_135176();
+ prevent_dce = textureDimensions_135176();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_135176();
+ prevent_dce = textureDimensions_135176();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_135176();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.dxc.hlsl
index 8151f67..52ab676 100644
--- a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_135176() {
+uint2 textureDimensions_135176() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_135176();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_135176();
+ prevent_dce.Store2(0u, asuint(textureDimensions_135176()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_135176();
+ prevent_dce.Store2(0u, asuint(textureDimensions_135176()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_135176();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.fxc.hlsl
index 8151f67..52ab676 100644
--- a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_135176() {
+uint2 textureDimensions_135176() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_135176();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_135176();
+ prevent_dce.Store2(0u, asuint(textureDimensions_135176()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_135176();
+ prevent_dce.Store2(0u, asuint(textureDimensions_135176()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_135176();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.glsl
index da300a7..9a0c5dc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp readonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_135176() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_135176();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_135176() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_135176() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_135176();
+ prevent_dce.inner = textureDimensions_135176();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_135176() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_135176() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_135176();
+ prevent_dce.inner = textureDimensions_135176();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_135176() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_135176();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.msl
index e138e38..39a23de 100644
--- a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_135176(texture2d_array<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_135176(texture2d_array<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_135176(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_135176(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_135176(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_135176(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_135176(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_135176(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.spvasm
index 6502d22..76ae818 100644
--- a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_135176 "textureDimensions_135176"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_135176 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_135176 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_135176
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_135176
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_135176
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_135176
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_135176
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_135176
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.wgsl
index ef6e8bc..32edd3d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/135176.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read>;
-fn textureDimensions_135176() {
+fn textureDimensions_135176() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_135176();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_135176();
+ prevent_dce = textureDimensions_135176();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_135176();
+ prevent_dce = textureDimensions_135176();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_135176();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl
index 354ad1c..e86ca22 100644
--- a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d<f32>;
// fn textureDimensions(texture: texture_2d<f32>, level: u32) -> vec2<u32>
-fn textureDimensions_13f8db() {
+fn textureDimensions_13f8db() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_13f8db();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_13f8db();
+ prevent_dce = textureDimensions_13f8db();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_13f8db();
+ prevent_dce = textureDimensions_13f8db();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_13f8db();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.dxc.hlsl
index 1f589e0..a096bce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_13f8db() {
+uint2 textureDimensions_13f8db() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_13f8db();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_13f8db();
+ prevent_dce.Store2(0u, asuint(textureDimensions_13f8db()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_13f8db();
+ prevent_dce.Store2(0u, asuint(textureDimensions_13f8db()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_13f8db();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.fxc.hlsl
index 1f589e0..a096bce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_13f8db() {
+uint2 textureDimensions_13f8db() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_13f8db();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_13f8db();
+ prevent_dce.Store2(0u, asuint(textureDimensions_13f8db()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_13f8db();
+ prevent_dce.Store2(0u, asuint(textureDimensions_13f8db()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_13f8db();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.glsl
index d440cf9..7f99b4e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_13f8db() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_13f8db();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_13f8db() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_13f8db() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_13f8db();
+ prevent_dce.inner = textureDimensions_13f8db();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_13f8db() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_13f8db() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_13f8db();
+ prevent_dce.inner = textureDimensions_13f8db();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_13f8db() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_13f8db();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.msl
index 730c597..75cd057 100644
--- a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_13f8db(texture2d<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_13f8db(texture2d<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_13f8db(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_13f8db(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_13f8db(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_13f8db(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_13f8db(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_13f8db(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.spvasm
index f0d0db8..2418480 100644
--- a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,78 +21,104 @@
OpName %textureDimensions_13f8db "textureDimensions_13f8db"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %30 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_13f8db = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %30
+%textureDimensions_13f8db = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %v2uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %34 = OpLoad %v2uint %res
- OpStore %33 %34
+ %28 = OpLoad %16 %arg_0
+ %29 = OpLoad %uint %arg_1
+ %27 = OpImageQuerySizeLod %v2uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %v2uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_13f8db
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_13f8db
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %v2uint %textureDimensions_13f8db
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_13f8db
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_13f8db
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_13f8db
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.wgsl
index 44663ef..72a34f5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/13f8db.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d<f32>;
-fn textureDimensions_13f8db() {
+fn textureDimensions_13f8db() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_13f8db();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_13f8db();
+ prevent_dce = textureDimensions_13f8db();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_13f8db();
+ prevent_dce = textureDimensions_13f8db();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_13f8db();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl
index 0fb6c64..e6c5842 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16sint, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba16sint, write>) -> vec2<u32>
-fn textureDimensions_1417dd() {
+fn textureDimensions_1417dd() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1417dd();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1417dd();
+ prevent_dce = textureDimensions_1417dd();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1417dd();
+ prevent_dce = textureDimensions_1417dd();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1417dd();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.dxc.hlsl
index a5152f2..ab8eb1b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1417dd() {
+uint2 textureDimensions_1417dd() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1417dd();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1417dd();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1417dd()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1417dd();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1417dd()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1417dd();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.fxc.hlsl
index a5152f2..ab8eb1b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1417dd() {
+uint2 textureDimensions_1417dd() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1417dd();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1417dd();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1417dd()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1417dd();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1417dd()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1417dd();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.glsl
index 3d7782d..8add6b7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_1417dd() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_1417dd();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_1417dd() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_1417dd() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_1417dd();
+ prevent_dce.inner = textureDimensions_1417dd();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_1417dd() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_1417dd() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_1417dd();
+ prevent_dce.inner = textureDimensions_1417dd();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_1417dd() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_1417dd();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.msl
index 8300973..2ab5da6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_1417dd(texture2d<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_1417dd(texture2d<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_1417dd(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_1417dd(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_1417dd(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_1417dd(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_1417dd(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_1417dd(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.spvasm
index f7a2035..43924f6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_1417dd "textureDimensions_1417dd"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_1417dd = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_1417dd = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_1417dd
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_1417dd
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_1417dd
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_1417dd
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_1417dd
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_1417dd
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.wgsl
index d4cc637..d928894 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1417dd.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, write>;
-fn textureDimensions_1417dd() {
+fn textureDimensions_1417dd() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1417dd();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1417dd();
+ prevent_dce = textureDimensions_1417dd();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1417dd();
+ prevent_dce = textureDimensions_1417dd();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1417dd();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl
index 0a3b3ed..05f0cda 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32sint, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba32sint, write>) -> vec3<u32>
-fn textureDimensions_15aa17() {
+fn textureDimensions_15aa17() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_15aa17();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_15aa17();
+ prevent_dce = textureDimensions_15aa17();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_15aa17();
+ prevent_dce = textureDimensions_15aa17();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_15aa17();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.dxc.hlsl
index 75f401b..12b2b97 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_15aa17() {
+uint3 textureDimensions_15aa17() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_15aa17();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_15aa17();
+ prevent_dce.Store3(0u, asuint(textureDimensions_15aa17()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_15aa17();
+ prevent_dce.Store3(0u, asuint(textureDimensions_15aa17()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_15aa17();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.fxc.hlsl
index 75f401b..12b2b97 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_15aa17() {
+uint3 textureDimensions_15aa17() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_15aa17();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_15aa17();
+ prevent_dce.Store3(0u, asuint(textureDimensions_15aa17()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_15aa17();
+ prevent_dce.Store3(0u, asuint(textureDimensions_15aa17()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_15aa17();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.glsl
index 53f090b..e656722 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32i) uniform highp writeonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_15aa17() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_15aa17();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_15aa17() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_15aa17() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_15aa17();
+ prevent_dce.inner = textureDimensions_15aa17();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_15aa17() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_15aa17() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_15aa17();
+ prevent_dce.inner = textureDimensions_15aa17();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_15aa17() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_15aa17();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.msl
index 48288f6..2216002 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_15aa17(texture3d<int, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_15aa17(texture3d<int, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_15aa17(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_15aa17(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_15aa17(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_15aa17(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_15aa17(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_15aa17(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.spvasm
index 94c7bd8..619a299 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_15aa17 "textureDimensions_15aa17"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_15aa17 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_15aa17 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_15aa17
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_15aa17
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_15aa17
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_15aa17
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_15aa17
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_15aa17
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.wgsl
index 151d25a..e521c6e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15aa17.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, write>;
-fn textureDimensions_15aa17() {
+fn textureDimensions_15aa17() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_15aa17();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_15aa17();
+ prevent_dce = textureDimensions_15aa17();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_15aa17();
+ prevent_dce = textureDimensions_15aa17();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_15aa17();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl
index 0b14d87..6376428 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d<u32>;
// fn textureDimensions(texture: texture_2d<u32>, level: i32) -> vec2<u32>
-fn textureDimensions_15b577() {
+fn textureDimensions_15b577() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_15b577();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_15b577();
+ prevent_dce = textureDimensions_15b577();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_15b577();
+ prevent_dce = textureDimensions_15b577();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_15b577();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.dxc.hlsl
index 1c0e6ea..1996367 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_15b577() {
+uint2 textureDimensions_15b577() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_15b577();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_15b577();
+ prevent_dce.Store2(0u, asuint(textureDimensions_15b577()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_15b577();
+ prevent_dce.Store2(0u, asuint(textureDimensions_15b577()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_15b577();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.fxc.hlsl
index 1c0e6ea..1996367 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_15b577() {
+uint2 textureDimensions_15b577() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_15b577();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_15b577();
+ prevent_dce.Store2(0u, asuint(textureDimensions_15b577()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_15b577();
+ prevent_dce.Store2(0u, asuint(textureDimensions_15b577()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_15b577();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.glsl
index e36acb9..84766f4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_15b577() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_15b577();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_15b577() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_15b577() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_15b577();
+ prevent_dce.inner = textureDimensions_15b577();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_15b577() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_15b577() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_15b577();
+ prevent_dce.inner = textureDimensions_15b577();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_15b577() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_15b577();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.msl
index 4fbfe78..f4952ca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_15b577(texture2d<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_15b577(texture2d<uint, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_15b577(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_15b577(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_15b577(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_15b577(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_15b577(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_15b577(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.spvasm
index dfcfd7d..cd85257 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_15b577 "textureDimensions_15b577"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_15b577 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_15b577 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_15b577
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_15b577
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_15b577
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_15b577
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_15b577
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_15b577
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.wgsl
index c0263e4..3e30c07 100644
--- a/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/15b577.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d<u32>;
-fn textureDimensions_15b577() {
+fn textureDimensions_15b577() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_15b577();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_15b577();
+ prevent_dce = textureDimensions_15b577();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_15b577();
+ prevent_dce = textureDimensions_15b577();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_15b577();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl
index 5ca7020..38aa6d5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_2d<r8unorm, read_write>) -> vec2<u32>
-fn textureDimensions_18160d() {
+fn textureDimensions_18160d() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_18160d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_18160d();
+ prevent_dce = textureDimensions_18160d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_18160d();
+ prevent_dce = textureDimensions_18160d();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_18160d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.dxc.hlsl
index 8d7086b..0a9df44 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_18160d() {
+uint2 textureDimensions_18160d() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_18160d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_18160d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_18160d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_18160d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_18160d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_18160d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.fxc.hlsl
index 8d7086b..0a9df44 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_18160d() {
+uint2 textureDimensions_18160d() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_18160d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_18160d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_18160d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_18160d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_18160d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_18160d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.msl
index 642939b..71df7a4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_18160d(texture2d<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_18160d(texture2d<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_18160d(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_18160d(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_18160d(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_18160d(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_18160d(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_18160d(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.spvasm
index 4039245..536ebfd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_18160d "textureDimensions_18160d"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_18160d = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_18160d = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_18160d
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_18160d
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_18160d
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_18160d
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_18160d
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_18160d
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.wgsl
index fe96e98..7596745 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/18160d.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r8unorm, read_write>;
-fn textureDimensions_18160d() {
+fn textureDimensions_18160d() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_18160d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_18160d();
+ prevent_dce = textureDimensions_18160d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_18160d();
+ prevent_dce = textureDimensions_18160d();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_18160d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl
index 7f97102..813f3c9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r8unorm, write>;
// fn textureDimensions(texture: texture_storage_2d<r8unorm, write>) -> vec2<u32>
-fn textureDimensions_18f19f() {
+fn textureDimensions_18f19f() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_18f19f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_18f19f();
+ prevent_dce = textureDimensions_18f19f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_18f19f();
+ prevent_dce = textureDimensions_18f19f();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_18f19f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.dxc.hlsl
index 52a6582..e7f8023 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_18f19f() {
+uint2 textureDimensions_18f19f() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_18f19f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_18f19f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_18f19f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_18f19f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_18f19f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_18f19f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.fxc.hlsl
index 52a6582..e7f8023 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_18f19f() {
+uint2 textureDimensions_18f19f() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_18f19f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_18f19f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_18f19f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_18f19f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_18f19f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_18f19f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.msl
index f3d2074..d0eee6b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_18f19f(texture2d<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_18f19f(texture2d<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_18f19f(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_18f19f(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_18f19f(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_18f19f(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_18f19f(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_18f19f(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.spvasm
index a58c448..a127b9b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_18f19f "textureDimensions_18f19f"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_18f19f = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_18f19f = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_18f19f
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_18f19f
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_18f19f
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_18f19f
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_18f19f
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_18f19f
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.wgsl
index 7762b88..2b185cc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/18f19f.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r8unorm, write>;
-fn textureDimensions_18f19f() {
+fn textureDimensions_18f19f() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_18f19f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_18f19f();
+ prevent_dce = textureDimensions_18f19f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_18f19f();
+ prevent_dce = textureDimensions_18f19f();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_18f19f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl
index f3631f9..013e658 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_3d<i32>;
// fn textureDimensions(texture: texture_3d<i32>) -> vec3<u32>
-fn textureDimensions_1a2be7() {
+fn textureDimensions_1a2be7() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1a2be7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1a2be7();
+ prevent_dce = textureDimensions_1a2be7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1a2be7();
+ prevent_dce = textureDimensions_1a2be7();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1a2be7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.dxc.hlsl
index f62c699..6f36e09 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1a2be7() {
+uint3 textureDimensions_1a2be7() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1a2be7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1a2be7();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1a2be7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1a2be7();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1a2be7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1a2be7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.fxc.hlsl
index f62c699..6f36e09 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1a2be7() {
+uint3 textureDimensions_1a2be7() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1a2be7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1a2be7();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1a2be7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1a2be7();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1a2be7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1a2be7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.glsl
index c1761c6..61107b4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_1a2be7() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_1a2be7();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_1a2be7() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_1a2be7() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_1a2be7();
+ prevent_dce.inner = textureDimensions_1a2be7();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_1a2be7() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_1a2be7() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_1a2be7();
+ prevent_dce.inner = textureDimensions_1a2be7();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_1a2be7() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_1a2be7();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.msl
index 15b42d5..8f83ba2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_1a2be7(texture3d<int, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_1a2be7(texture3d<int, access::sample> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_1a2be7(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_1a2be7(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_1a2be7(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_1a2be7(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_1a2be7(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_1a2be7(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.spvasm
index a973947..8cdeb42 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_1a2be7 "textureDimensions_1a2be7"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%int_0 = OpConstant %int 0
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %27 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_1a2be7 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %27
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v3uint %23 %int_0
- OpStore %res %22
- %30 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %31 = OpLoad %v3uint %res
- OpStore %30 %31
+%textureDimensions_1a2be7 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v3uint %25 %int_0
+ OpStore %res %24
+ %29 = OpLoad %v3uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v3uint %textureDimensions_1a2be7
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_1a2be7
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v3uint %textureDimensions_1a2be7
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %53 = OpFunctionCall %v3uint %textureDimensions_1a2be7
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v3uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_1a2be7
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_1a2be7
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.wgsl
index 0121d1e..67664ad 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1a2be7.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_3d<i32>;
-fn textureDimensions_1a2be7() {
+fn textureDimensions_1a2be7() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1a2be7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1a2be7();
+ prevent_dce = textureDimensions_1a2be7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1a2be7();
+ prevent_dce = textureDimensions_1a2be7();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1a2be7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl
index b924d66..354d822 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16sint, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba16sint, read>) -> vec3<u32>
-fn textureDimensions_1b720f() {
+fn textureDimensions_1b720f() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1b720f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1b720f();
+ prevent_dce = textureDimensions_1b720f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1b720f();
+ prevent_dce = textureDimensions_1b720f();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1b720f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.dxc.hlsl
index fc46a8e..917df17 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1b720f() {
+uint3 textureDimensions_1b720f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1b720f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1b720f();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1b720f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1b720f();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1b720f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1b720f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.fxc.hlsl
index fc46a8e..917df17 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1b720f() {
+uint3 textureDimensions_1b720f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1b720f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1b720f();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1b720f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1b720f();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1b720f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1b720f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.glsl
index 21433d4..440ac56 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16i) uniform highp readonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_1b720f() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_1b720f();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_1b720f() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_1b720f() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_1b720f();
+ prevent_dce.inner = textureDimensions_1b720f();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_1b720f() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_1b720f() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_1b720f();
+ prevent_dce.inner = textureDimensions_1b720f();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_1b720f() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_1b720f();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.msl
index 21ce3ca..430ad64 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_1b720f(texture3d<int, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_1b720f(texture3d<int, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_1b720f(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_1b720f(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_1b720f(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_1b720f(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_1b720f(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_1b720f(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.spvasm
index dd73469..042a20f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_1b720f "textureDimensions_1b720f"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_1b720f = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_1b720f = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_1b720f
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_1b720f
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_1b720f
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_1b720f
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_1b720f
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_1b720f
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.wgsl
index ad08efa..fbf9dca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1b720f.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read>;
-fn textureDimensions_1b720f() {
+fn textureDimensions_1b720f() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1b720f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1b720f();
+ prevent_dce = textureDimensions_1b720f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1b720f();
+ prevent_dce = textureDimensions_1b720f();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1b720f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl
index a523185..4fe882c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_3d<f32>;
// fn textureDimensions(texture: texture_3d<f32>, level: i32) -> vec3<u32>
-fn textureDimensions_1bc428() {
+fn textureDimensions_1bc428() -> vec3<u32>{
var arg_1 = 1i;
var res: vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1bc428();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1bc428();
+ prevent_dce = textureDimensions_1bc428();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1bc428();
+ prevent_dce = textureDimensions_1bc428();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1bc428();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.dxc.hlsl
index faaf292..ea2f71c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1bc428() {
+uint3 textureDimensions_1bc428() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1bc428();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1bc428();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1bc428()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1bc428();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1bc428()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1bc428();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.fxc.hlsl
index faaf292..ea2f71c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1bc428() {
+uint3 textureDimensions_1bc428() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1bc428();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1bc428();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1bc428()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1bc428();
+ prevent_dce.Store3(0u, asuint(textureDimensions_1bc428()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1bc428();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.glsl
index 9e4c72f..9cdd54b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.glsl
@@ -1,48 +1,26 @@
#version 310 es
-
-uniform highp sampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_1bc428() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_1bc428();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_1bc428() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_1bc428() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_1bc428();
+ prevent_dce.inner = textureDimensions_1bc428();
}
void main() {
@@ -52,19 +30,24 @@
#version 310 es
uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_1bc428() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_1bc428() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_1bc428();
+ prevent_dce.inner = textureDimensions_1bc428();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -72,3 +55,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_1bc428() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_1bc428();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.msl
index 3fd33c1..01a275e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_1bc428(texture3d<float, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_1bc428(texture3d<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint3 res = uint3(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1), tint_symbol_1.get_depth(arg_1));
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_1bc428(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_1bc428(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_1bc428(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_1bc428(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_1bc428(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_1bc428(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.spvasm
index a0866ed..1a140bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_1bc428 "textureDimensions_1bc428"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %31 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_1bc428 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v3uint Function %31
+%textureDimensions_1bc428 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v3uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v3uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %35 = OpLoad %v3uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v3uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v3uint %textureDimensions_1bc428
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_1bc428
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v3uint %textureDimensions_1bc428
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %57 = OpFunctionCall %v3uint %textureDimensions_1bc428
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v3uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_1bc428
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_1bc428
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.wgsl
index ed27abb..fb71abe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bc428.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_3d<f32>;
-fn textureDimensions_1bc428() {
+fn textureDimensions_1bc428() -> vec3<u32> {
var arg_1 = 1i;
var res : vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1bc428();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1bc428();
+ prevent_dce = textureDimensions_1bc428();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1bc428();
+ prevent_dce = textureDimensions_1bc428();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1bc428();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl
index 428b25a..317cce5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d<f32>;
// fn textureDimensions(texture: texture_2d<f32>, level: i32) -> vec2<u32>
-fn textureDimensions_1bd78c() {
+fn textureDimensions_1bd78c() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1bd78c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1bd78c();
+ prevent_dce = textureDimensions_1bd78c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1bd78c();
+ prevent_dce = textureDimensions_1bd78c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1bd78c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.dxc.hlsl
index c01ef34..2a7c536 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1bd78c() {
+uint2 textureDimensions_1bd78c() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1bd78c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1bd78c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1bd78c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1bd78c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1bd78c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1bd78c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.fxc.hlsl
index c01ef34..2a7c536 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1bd78c() {
+uint2 textureDimensions_1bd78c() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1bd78c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1bd78c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1bd78c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1bd78c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1bd78c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1bd78c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.glsl
index eb9b22e..2f41856 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_1bd78c() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_1bd78c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_1bd78c() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_1bd78c() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_1bd78c();
+ prevent_dce.inner = textureDimensions_1bd78c();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_1bd78c() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_1bd78c() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_1bd78c();
+ prevent_dce.inner = textureDimensions_1bd78c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_1bd78c() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_1bd78c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.msl
index fac9be9..523d6e0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_1bd78c(texture2d<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_1bd78c(texture2d<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_1bd78c(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_1bd78c(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_1bd78c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_1bd78c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_1bd78c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_1bd78c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.spvasm
index 51953b5..28e1c92 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_1bd78c "textureDimensions_1bd78c"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_1bd78c = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_1bd78c = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_1bd78c
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_1bd78c
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_1bd78c
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_1bd78c
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_1bd78c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_1bd78c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.wgsl
index 4379939..53dcd1c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1bd78c.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d<f32>;
-fn textureDimensions_1bd78c() {
+fn textureDimensions_1bd78c() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1bd78c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1bd78c();
+ prevent_dce = textureDimensions_1bd78c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1bd78c();
+ prevent_dce = textureDimensions_1bd78c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1bd78c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl
index e2af4d8..e20c58e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32float, read_write>;
// fn textureDimensions(texture: texture_storage_2d<r32float, read_write>) -> vec2<u32>
-fn textureDimensions_1e4024() {
+fn textureDimensions_1e4024() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1e4024();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1e4024();
+ prevent_dce = textureDimensions_1e4024();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1e4024();
+ prevent_dce = textureDimensions_1e4024();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1e4024();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.dxc.hlsl
index 73a5527..6a0932b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1e4024() {
+uint2 textureDimensions_1e4024() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1e4024();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1e4024();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1e4024()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1e4024();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1e4024()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1e4024();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.fxc.hlsl
index 73a5527..6a0932b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_1e4024() {
+uint2 textureDimensions_1e4024() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_1e4024();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_1e4024();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1e4024()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_1e4024();
+ prevent_dce.Store2(0u, asuint(textureDimensions_1e4024()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_1e4024();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.glsl
index 75eb648..1b2ba21 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_1e4024() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_1e4024();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp image2D arg_0;
+uvec2 textureDimensions_1e4024() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_1e4024() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_1e4024();
+ prevent_dce.inner = textureDimensions_1e4024();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp image2D arg_0;
+uvec2 textureDimensions_1e4024() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_1e4024() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_1e4024();
+ prevent_dce.inner = textureDimensions_1e4024();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32f) uniform highp image2D arg_0;
+uvec2 textureDimensions_1e4024() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_1e4024();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.msl
index c40b743..9728d43 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_1e4024(texture2d<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_1e4024(texture2d<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_1e4024(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_1e4024(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_1e4024(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_1e4024(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_1e4024(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_1e4024(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.spvasm
index 04c7a12..575e50b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_1e4024 "textureDimensions_1e4024"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_1e4024 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_1e4024 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_1e4024
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_1e4024
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_1e4024
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_1e4024
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_1e4024
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_1e4024
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.wgsl
index 04db7eb..adbbeb7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/1e4024.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read_write>;
-fn textureDimensions_1e4024() {
+fn textureDimensions_1e4024() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_1e4024();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_1e4024();
+ prevent_dce = textureDimensions_1e4024();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_1e4024();
+ prevent_dce = textureDimensions_1e4024();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_1e4024();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl
index 117fa41..441701f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16sint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba16sint, read_write>) -> vec3<u32>
-fn textureDimensions_20eaad() {
+fn textureDimensions_20eaad() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_20eaad();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_20eaad();
+ prevent_dce = textureDimensions_20eaad();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_20eaad();
+ prevent_dce = textureDimensions_20eaad();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_20eaad();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.dxc.hlsl
index dccd0c8..fa5d0b5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_20eaad() {
+uint3 textureDimensions_20eaad() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_20eaad();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_20eaad();
+ prevent_dce.Store3(0u, asuint(textureDimensions_20eaad()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_20eaad();
+ prevent_dce.Store3(0u, asuint(textureDimensions_20eaad()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_20eaad();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.fxc.hlsl
index dccd0c8..fa5d0b5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_20eaad() {
+uint3 textureDimensions_20eaad() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_20eaad();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_20eaad();
+ prevent_dce.Store3(0u, asuint(textureDimensions_20eaad()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_20eaad();
+ prevent_dce.Store3(0u, asuint(textureDimensions_20eaad()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_20eaad();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.glsl
index 3fd6ab3..ca1be41 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16i) uniform highp writeonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_20eaad() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_20eaad();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_20eaad() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_20eaad() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_20eaad();
+ prevent_dce.inner = textureDimensions_20eaad();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_20eaad() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_20eaad() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_20eaad();
+ prevent_dce.inner = textureDimensions_20eaad();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_20eaad() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_20eaad();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.msl
index e030a03..23adb36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_20eaad(texture3d<int, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_20eaad(texture3d<int, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_20eaad(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_20eaad(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_20eaad(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_20eaad(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_20eaad(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_20eaad(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.spvasm
index c9e3ee7..e4c859d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_20eaad "textureDimensions_20eaad"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_20eaad = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_20eaad = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_20eaad
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_20eaad
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_20eaad
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_20eaad
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_20eaad
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_20eaad
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.wgsl
index c10d720..93ba5d4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20eaad.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, read_write>;
-fn textureDimensions_20eaad() {
+fn textureDimensions_20eaad() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_20eaad();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_20eaad();
+ prevent_dce = textureDimensions_20eaad();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_20eaad();
+ prevent_dce = textureDimensions_20eaad();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_20eaad();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl
index 423c07b..3c53f56 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32float, read_write>;
// fn textureDimensions(texture: texture_storage_1d<r32float, read_write>) -> u32
-fn textureDimensions_20ecef() {
+fn textureDimensions_20ecef() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_20ecef();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_20ecef();
+ prevent_dce = textureDimensions_20ecef();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_20ecef();
+ prevent_dce = textureDimensions_20ecef();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_20ecef();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.dxc.hlsl
index 723ad29..31ab61ff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_20ecef() {
+uint textureDimensions_20ecef() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_20ecef();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_20ecef();
+ prevent_dce.Store(0u, asuint(textureDimensions_20ecef()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_20ecef();
+ prevent_dce.Store(0u, asuint(textureDimensions_20ecef()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_20ecef();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.fxc.hlsl
index 723ad29..31ab61ff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_20ecef() {
+uint textureDimensions_20ecef() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_20ecef();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_20ecef();
+ prevent_dce.Store(0u, asuint(textureDimensions_20ecef()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_20ecef();
+ prevent_dce.Store(0u, asuint(textureDimensions_20ecef()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_20ecef();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.glsl
index 331a3db..defb923 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_20ecef() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_20ecef();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp image2D arg_0;
+uint textureDimensions_20ecef() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_20ecef() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_20ecef();
+ prevent_dce.inner = textureDimensions_20ecef();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp image2D arg_0;
+uint textureDimensions_20ecef() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_20ecef() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_20ecef();
+ prevent_dce.inner = textureDimensions_20ecef();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32f) uniform highp image2D arg_0;
+uint textureDimensions_20ecef() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_20ecef();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.msl
index d332752..1b39faf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_20ecef(texture1d<float, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_20ecef(texture1d<float, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_20ecef(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_20ecef(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_20ecef(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_20ecef(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_20ecef(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_20ecef(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.spvasm
index 3be0e2d..aa54204f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_20ecef "textureDimensions_20ecef"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_20ecef = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_20ecef = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_20ecef
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_20ecef
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_20ecef
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_20ecef
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_20ecef
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_20ecef
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.wgsl
index 10234b6..0ec695a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/20ecef.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read_write>;
-fn textureDimensions_20ecef() {
+fn textureDimensions_20ecef() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_20ecef();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_20ecef();
+ prevent_dce = textureDimensions_20ecef();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_20ecef();
+ prevent_dce = textureDimensions_20ecef();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_20ecef();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl
index 23f0233..79664f4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32float, read>;
// fn textureDimensions(texture: texture_storage_1d<r32float, read>) -> u32
-fn textureDimensions_212362() {
+fn textureDimensions_212362() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_212362();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_212362();
+ prevent_dce = textureDimensions_212362();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_212362();
+ prevent_dce = textureDimensions_212362();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_212362();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.dxc.hlsl
index 3e996b8..cdb9781 100644
--- a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_212362() {
+uint textureDimensions_212362() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_212362();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_212362();
+ prevent_dce.Store(0u, asuint(textureDimensions_212362()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_212362();
+ prevent_dce.Store(0u, asuint(textureDimensions_212362()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_212362();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.fxc.hlsl
index 3e996b8..cdb9781 100644
--- a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_212362() {
+uint textureDimensions_212362() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_212362();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_212362();
+ prevent_dce.Store(0u, asuint(textureDimensions_212362()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_212362();
+ prevent_dce.Store(0u, asuint(textureDimensions_212362()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_212362();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.glsl
index e6e6cb7..22e4949 100644
--- a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_212362() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_212362();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp readonly image2D arg_0;
+uint textureDimensions_212362() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_212362() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_212362();
+ prevent_dce.inner = textureDimensions_212362();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp readonly image2D arg_0;
+uint textureDimensions_212362() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_212362() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_212362();
+ prevent_dce.inner = textureDimensions_212362();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32f) uniform highp readonly image2D arg_0;
+uint textureDimensions_212362() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_212362();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.msl
index 90fe7bd..3b8b46f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_212362(texture1d<float, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_212362(texture1d<float, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_212362(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_212362(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_212362(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_212362(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_212362(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_212362(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.spvasm
index 8e7f0ac..e3cf4ec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_212362 "textureDimensions_212362"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_212362 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_212362 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_212362
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_212362
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_212362
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_212362
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_212362
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_212362
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.wgsl
index a7e4b9f..a2490f0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/212362.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, read>;
-fn textureDimensions_212362() {
+fn textureDimensions_212362() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_212362();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_212362();
+ prevent_dce = textureDimensions_212362();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_212362();
+ prevent_dce = textureDimensions_212362();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_212362();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl
index f268d2f..037079a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8unorm, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba8unorm, write>) -> vec2<u32>
-fn textureDimensions_224113() {
+fn textureDimensions_224113() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_224113();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_224113();
+ prevent_dce = textureDimensions_224113();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_224113();
+ prevent_dce = textureDimensions_224113();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_224113();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.dxc.hlsl
index db35a75..a05aa54 100644
--- a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_224113() {
+uint2 textureDimensions_224113() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_224113();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_224113();
+ prevent_dce.Store2(0u, asuint(textureDimensions_224113()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_224113();
+ prevent_dce.Store2(0u, asuint(textureDimensions_224113()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_224113();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.fxc.hlsl
index db35a75..a05aa54 100644
--- a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_224113() {
+uint2 textureDimensions_224113() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_224113();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_224113();
+ prevent_dce.Store2(0u, asuint(textureDimensions_224113()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_224113();
+ prevent_dce.Store2(0u, asuint(textureDimensions_224113()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_224113();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.glsl
index 75882f0..9c589a0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_224113() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_224113();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_224113() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_224113() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_224113();
+ prevent_dce.inner = textureDimensions_224113();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_224113() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_224113() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_224113();
+ prevent_dce.inner = textureDimensions_224113();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_224113() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_224113();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.msl
index 494fc83..a04f564 100644
--- a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_224113(texture2d<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_224113(texture2d<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_224113(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_224113(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_224113(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_224113(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_224113(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_224113(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.spvasm
index abe175b..1a50806 100644
--- a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_224113 "textureDimensions_224113"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_224113 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_224113 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_224113
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_224113
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_224113
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_224113
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_224113
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_224113
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.wgsl
index a9ae5c4..9cb616d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/224113.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, write>;
-fn textureDimensions_224113() {
+fn textureDimensions_224113() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_224113();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_224113();
+ prevent_dce = textureDimensions_224113();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_224113();
+ prevent_dce = textureDimensions_224113();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_224113();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl
index e416f9a..e5786a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube_array<u32>;
// fn textureDimensions(texture: texture_cube_array<u32>, level: i32) -> vec2<u32>
-fn textureDimensions_22b5b6() {
+fn textureDimensions_22b5b6() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_22b5b6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_22b5b6();
+ prevent_dce = textureDimensions_22b5b6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_22b5b6();
+ prevent_dce = textureDimensions_22b5b6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_22b5b6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.dxc.hlsl
index 2de571c..cc0491f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_22b5b6() {
+uint2 textureDimensions_22b5b6() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_22b5b6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_22b5b6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_22b5b6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_22b5b6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_22b5b6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_22b5b6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.fxc.hlsl
index 2de571c..cc0491f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_22b5b6() {
+uint2 textureDimensions_22b5b6() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_22b5b6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_22b5b6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_22b5b6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_22b5b6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_22b5b6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_22b5b6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.msl
index af33532..9850018 100644
--- a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_22b5b6(texturecube_array<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_22b5b6(texturecube_array<uint, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_22b5b6(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_22b5b6(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_22b5b6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_22b5b6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_22b5b6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_22b5b6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.spvasm
index 964f061..6fa21ef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 67
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,81 +22,108 @@
OpName %textureDimensions_22b5b6 "textureDimensions_22b5b6"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_22b5b6 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_22b5b6 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %int %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %int %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_22b5b6
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_22b5b6
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_22b5b6
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %58 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %59 = OpFunctionCall %v2uint %textureDimensions_22b5b6
+ OpStore %58 %59
+ %60 = OpLoad %VertexOutput %out
+ OpReturnValue %60
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %62 = OpLabel
+ %63 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %64 = OpCompositeExtract %v4float %63 0
+ OpStore %pos_1 %64
+ %65 = OpCompositeExtract %v2uint %63 1
+ OpStore %prevent_dce_1 %65
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_22b5b6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_22b5b6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.wgsl
index 30b9dd5..a9af9ca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/22b5b6.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<u32>;
-fn textureDimensions_22b5b6() {
+fn textureDimensions_22b5b6() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_22b5b6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_22b5b6();
+ prevent_dce = textureDimensions_22b5b6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_22b5b6();
+ prevent_dce = textureDimensions_22b5b6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_22b5b6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl
index 883c94d..969474c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_2d<f32>;
// fn textureDimensions(texture: texture_2d<f32>) -> vec2<u32>
-fn textureDimensions_24db07() {
+fn textureDimensions_24db07() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_24db07();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_24db07();
+ prevent_dce = textureDimensions_24db07();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_24db07();
+ prevent_dce = textureDimensions_24db07();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_24db07();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.dxc.hlsl
index e9e7021..78831a5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_24db07() {
+uint2 textureDimensions_24db07() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_24db07();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_24db07();
+ prevent_dce.Store2(0u, asuint(textureDimensions_24db07()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_24db07();
+ prevent_dce.Store2(0u, asuint(textureDimensions_24db07()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_24db07();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.fxc.hlsl
index e9e7021..78831a5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_24db07() {
+uint2 textureDimensions_24db07() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_24db07();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_24db07();
+ prevent_dce.Store2(0u, asuint(textureDimensions_24db07()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_24db07();
+ prevent_dce.Store2(0u, asuint(textureDimensions_24db07()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_24db07();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.glsl
index 312491f..ded9ae2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_24db07() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_24db07();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_24db07() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_24db07() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_24db07();
+ prevent_dce.inner = textureDimensions_24db07();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_24db07() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_24db07() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_24db07();
+ prevent_dce.inner = textureDimensions_24db07();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_24db07() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_24db07();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.msl
index 7e2ded5..271c08f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_24db07(texture2d<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_24db07(texture2d<float, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_24db07(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_24db07(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_24db07(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_24db07(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_24db07(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_24db07(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.spvasm
index 163ff10..718bfa1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_24db07 "textureDimensions_24db07"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_24db07 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %v2uint %22 %int_0
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_24db07 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySizeLod %v2uint %24 %int_0
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_24db07
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_24db07
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_24db07
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_24db07
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_24db07
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_24db07
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.wgsl
index 9e72532..8407ee7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/24db07.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_2d<f32>;
-fn textureDimensions_24db07() {
+fn textureDimensions_24db07() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_24db07();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_24db07();
+ prevent_dce = textureDimensions_24db07();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_24db07();
+ prevent_dce = textureDimensions_24db07();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_24db07();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl
index 41f985a..7cb5fca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r8unorm, write>;
// fn textureDimensions(texture: texture_storage_2d_array<r8unorm, write>) -> vec2<u32>
-fn textureDimensions_25d284() {
+fn textureDimensions_25d284() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_25d284();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_25d284();
+ prevent_dce = textureDimensions_25d284();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_25d284();
+ prevent_dce = textureDimensions_25d284();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_25d284();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.dxc.hlsl
index 2df33a6..954b7a3d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_25d284() {
+uint2 textureDimensions_25d284() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_25d284();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_25d284();
+ prevent_dce.Store2(0u, asuint(textureDimensions_25d284()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_25d284();
+ prevent_dce.Store2(0u, asuint(textureDimensions_25d284()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_25d284();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.fxc.hlsl
index 2df33a6..954b7a3d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_25d284() {
+uint2 textureDimensions_25d284() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_25d284();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_25d284();
+ prevent_dce.Store2(0u, asuint(textureDimensions_25d284()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_25d284();
+ prevent_dce.Store2(0u, asuint(textureDimensions_25d284()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_25d284();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.msl
index 0cc7abc..bf55f6b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_25d284(texture2d_array<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_25d284(texture2d_array<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_25d284(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_25d284(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_25d284(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_25d284(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_25d284(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_25d284(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.spvasm
index d7124af..7a73f44 100644
--- a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,75 +21,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_25d284 "textureDimensions_25d284"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_25d284 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_25d284 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_25d284
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_25d284
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_25d284
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_25d284
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_25d284
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_25d284
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.wgsl
index 1c8be5f..d2a1b6d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/25d284.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r8unorm, write>;
-fn textureDimensions_25d284() {
+fn textureDimensions_25d284() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_25d284();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_25d284();
+ prevent_dce = textureDimensions_25d284();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_25d284();
+ prevent_dce = textureDimensions_25d284();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_25d284();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl
index efa2f61..157bccb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32uint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32uint, write>) -> vec2<u32>
-fn textureDimensions_2674d8() {
+fn textureDimensions_2674d8() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2674d8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2674d8();
+ prevent_dce = textureDimensions_2674d8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2674d8();
+ prevent_dce = textureDimensions_2674d8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2674d8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.dxc.hlsl
index db1134f..9daf4d5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2674d8() {
+uint2 textureDimensions_2674d8() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2674d8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2674d8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2674d8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2674d8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2674d8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2674d8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.fxc.hlsl
index db1134f..9daf4d5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2674d8() {
+uint2 textureDimensions_2674d8() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2674d8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2674d8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2674d8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2674d8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2674d8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2674d8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.msl
index 18ce3d7..b36fe51 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_2674d8(texture2d_array<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_2674d8(texture2d_array<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_2674d8(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_2674d8(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_2674d8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_2674d8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_2674d8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_2674d8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.spvasm
index 1cb5bed..b87d206 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,75 +21,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_2674d8 "textureDimensions_2674d8"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_2674d8 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_2674d8 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_2674d8
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_2674d8
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_2674d8
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_2674d8
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_2674d8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_2674d8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.wgsl
index 01373b9..05f137c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2674d8.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, write>;
-fn textureDimensions_2674d8() {
+fn textureDimensions_2674d8() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2674d8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2674d8();
+ prevent_dce = textureDimensions_2674d8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2674d8();
+ prevent_dce = textureDimensions_2674d8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2674d8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl
index 8be3edf..6112dea 100644
--- a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32uint, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba32uint, read>) -> vec3<u32>
-fn textureDimensions_268ddb() {
+fn textureDimensions_268ddb() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_268ddb();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_268ddb();
+ prevent_dce = textureDimensions_268ddb();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_268ddb();
+ prevent_dce = textureDimensions_268ddb();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_268ddb();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.dxc.hlsl
index 91d953b..fa006c0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_268ddb() {
+uint3 textureDimensions_268ddb() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_268ddb();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_268ddb();
+ prevent_dce.Store3(0u, asuint(textureDimensions_268ddb()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_268ddb();
+ prevent_dce.Store3(0u, asuint(textureDimensions_268ddb()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_268ddb();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.fxc.hlsl
index 91d953b..fa006c0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_268ddb() {
+uint3 textureDimensions_268ddb() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_268ddb();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_268ddb();
+ prevent_dce.Store3(0u, asuint(textureDimensions_268ddb()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_268ddb();
+ prevent_dce.Store3(0u, asuint(textureDimensions_268ddb()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_268ddb();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.glsl
index 5aa0605..47f3658 100644
--- a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32ui) uniform highp readonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_268ddb() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_268ddb();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_268ddb() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_268ddb() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_268ddb();
+ prevent_dce.inner = textureDimensions_268ddb();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_268ddb() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_268ddb() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_268ddb();
+ prevent_dce.inner = textureDimensions_268ddb();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_268ddb() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_268ddb();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.msl
index a392720..d99b9f9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_268ddb(texture3d<uint, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_268ddb(texture3d<uint, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_268ddb(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_268ddb(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_268ddb(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_268ddb(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_268ddb(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_268ddb(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.spvasm
index f2c58b6..1d902ee 100644
--- a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_268ddb "textureDimensions_268ddb"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_268ddb = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_268ddb = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_268ddb
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_268ddb
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_268ddb
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_268ddb
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_268ddb
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_268ddb
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.wgsl
index cf6d5a5..17b6461 100644
--- a/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/268ddb.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read>;
-fn textureDimensions_268ddb() {
+fn textureDimensions_268ddb() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_268ddb();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_268ddb();
+ prevent_dce = textureDimensions_268ddb();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_268ddb();
+ prevent_dce = textureDimensions_268ddb();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_268ddb();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl
index e04f178..a1a0981 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_1d<f32>;
// fn textureDimensions(texture: texture_1d<f32>) -> u32
-fn textureDimensions_26d6bf() {
+fn textureDimensions_26d6bf() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_26d6bf();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_26d6bf();
+ prevent_dce = textureDimensions_26d6bf();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_26d6bf();
+ prevent_dce = textureDimensions_26d6bf();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_26d6bf();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.dxc.hlsl
index 015dcfb..d48a53a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_26d6bf() {
+uint textureDimensions_26d6bf() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_26d6bf();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_26d6bf();
+ prevent_dce.Store(0u, asuint(textureDimensions_26d6bf()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_26d6bf();
+ prevent_dce.Store(0u, asuint(textureDimensions_26d6bf()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_26d6bf();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.fxc.hlsl
index 015dcfb..d48a53a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_26d6bf() {
+uint textureDimensions_26d6bf() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_26d6bf();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_26d6bf();
+ prevent_dce.Store(0u, asuint(textureDimensions_26d6bf()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_26d6bf();
+ prevent_dce.Store(0u, asuint(textureDimensions_26d6bf()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_26d6bf();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.glsl
index e66a583..91b8c22 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_26d6bf() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_26d6bf();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uint textureDimensions_26d6bf() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_26d6bf() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_26d6bf();
+ prevent_dce.inner = textureDimensions_26d6bf();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uint textureDimensions_26d6bf() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_26d6bf() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_26d6bf();
+ prevent_dce.inner = textureDimensions_26d6bf();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uint textureDimensions_26d6bf() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_26d6bf();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.msl
index e77f8e6..459dc64 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_26d6bf(texture1d<float, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_26d6bf(texture1d<float, access::sample> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_26d6bf(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_26d6bf(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_26d6bf(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_26d6bf(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_26d6bf(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_26d6bf(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.spvasm
index a6909e8..012cb47 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_26d6bf "textureDimensions_26d6bf"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_uint = OpTypePointer Function %uint
- %26 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_26d6bf = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %26
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySizeLod %uint %21 %int_0
- OpStore %res %20
- %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %30 = OpLoad %uint %res
- OpStore %29 %30
+%textureDimensions_26d6bf = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySizeLod %uint %23 %int_0
+ OpStore %res %22
+ %28 = OpLoad %uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %uint %textureDimensions_26d6bf
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_26d6bf
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %uint %textureDimensions_26d6bf
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %52 = OpFunctionCall %uint %textureDimensions_26d6bf
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_26d6bf
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_26d6bf
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.wgsl
index 7711feb..4ae7859 100644
--- a/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/26d6bf.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_1d<f32>;
-fn textureDimensions_26d6bf() {
+fn textureDimensions_26d6bf() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_26d6bf();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_26d6bf();
+ prevent_dce = textureDimensions_26d6bf();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_26d6bf();
+ prevent_dce = textureDimensions_26d6bf();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_26d6bf();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl
index 9ef2e86..996e688 100644
--- a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_3d<r8unorm, read_write>) -> vec3<u32>
-fn textureDimensions_282978() {
+fn textureDimensions_282978() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_282978();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_282978();
+ prevent_dce = textureDimensions_282978();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_282978();
+ prevent_dce = textureDimensions_282978();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_282978();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.dxc.hlsl
index f664a39..84e64eb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_282978() {
+uint3 textureDimensions_282978() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_282978();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_282978();
+ prevent_dce.Store3(0u, asuint(textureDimensions_282978()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_282978();
+ prevent_dce.Store3(0u, asuint(textureDimensions_282978()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_282978();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.fxc.hlsl
index f664a39..84e64eb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_282978() {
+uint3 textureDimensions_282978() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_282978();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_282978();
+ prevent_dce.Store3(0u, asuint(textureDimensions_282978()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_282978();
+ prevent_dce.Store3(0u, asuint(textureDimensions_282978()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_282978();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.msl
index 3a2f5b8..a615175 100644
--- a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_282978(texture3d<float, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_282978(texture3d<float, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_282978(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_282978(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_282978(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_282978(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_282978(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_282978(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.spvasm
index 58c52c3..a8f745d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_282978 "textureDimensions_282978"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_282978 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_282978 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_282978
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_282978
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_282978
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_282978
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_282978
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_282978
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.wgsl
index 54b0c61..50f400e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/282978.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r8unorm, read_write>;
-fn textureDimensions_282978() {
+fn textureDimensions_282978() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_282978();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_282978();
+ prevent_dce = textureDimensions_282978();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_282978();
+ prevent_dce = textureDimensions_282978();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_282978();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl
index 637908a..3202895 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32float, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba32float, read_write>) -> u32
-fn textureDimensions_283b58() {
+fn textureDimensions_283b58() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_283b58();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_283b58();
+ prevent_dce = textureDimensions_283b58();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_283b58();
+ prevent_dce = textureDimensions_283b58();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_283b58();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.dxc.hlsl
index e2fd40d..ce27940 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_283b58() {
+uint textureDimensions_283b58() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_283b58();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_283b58();
+ prevent_dce.Store(0u, asuint(textureDimensions_283b58()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_283b58();
+ prevent_dce.Store(0u, asuint(textureDimensions_283b58()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_283b58();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.fxc.hlsl
index e2fd40d..ce27940 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_283b58() {
+uint textureDimensions_283b58() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_283b58();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_283b58();
+ prevent_dce.Store(0u, asuint(textureDimensions_283b58()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_283b58();
+ prevent_dce.Store(0u, asuint(textureDimensions_283b58()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_283b58();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.glsl
index 9cd264e..4f7eb25 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_283b58() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_283b58();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_283b58() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_283b58() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_283b58();
+ prevent_dce.inner = textureDimensions_283b58();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_283b58() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_283b58() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_283b58();
+ prevent_dce.inner = textureDimensions_283b58();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_283b58() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_283b58();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.msl
index c33d80c..6fb6c82 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_283b58(texture1d<float, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_283b58(texture1d<float, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_283b58(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_283b58(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_283b58(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_283b58(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_283b58(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_283b58(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.spvasm
index f5a793b..15cfe30 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_283b58 "textureDimensions_283b58"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_283b58 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_283b58 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_283b58
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_283b58
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_283b58
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_283b58
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_283b58
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_283b58
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.wgsl
index bbb3a12..f06a83a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/283b58.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read_write>;
-fn textureDimensions_283b58() {
+fn textureDimensions_283b58() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_283b58();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_283b58();
+ prevent_dce = textureDimensions_283b58();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_283b58();
+ prevent_dce = textureDimensions_283b58();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_283b58();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl
index 4714f67..3fcd9ed 100644
--- a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32float, read>;
// fn textureDimensions(texture: texture_storage_1d<rg32float, read>) -> u32
-fn textureDimensions_284c27() {
+fn textureDimensions_284c27() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_284c27();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_284c27();
+ prevent_dce = textureDimensions_284c27();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_284c27();
+ prevent_dce = textureDimensions_284c27();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_284c27();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.dxc.hlsl
index 0ba48f3..31e71b3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_284c27() {
+uint textureDimensions_284c27() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_284c27();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_284c27();
+ prevent_dce.Store(0u, asuint(textureDimensions_284c27()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_284c27();
+ prevent_dce.Store(0u, asuint(textureDimensions_284c27()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_284c27();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.fxc.hlsl
index 0ba48f3..31e71b3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_284c27() {
+uint textureDimensions_284c27() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_284c27();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_284c27();
+ prevent_dce.Store(0u, asuint(textureDimensions_284c27()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_284c27();
+ prevent_dce.Store(0u, asuint(textureDimensions_284c27()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_284c27();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.msl
index 8b419a4..d837500 100644
--- a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_284c27(texture1d<float, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_284c27(texture1d<float, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_284c27(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_284c27(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_284c27(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_284c27(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_284c27(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_284c27(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.spvasm
index 256e8a4..57622f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,72 +22,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_284c27 "textureDimensions_284c27"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_284c27 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_284c27 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_284c27
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_284c27
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_284c27
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_284c27
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_284c27
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_284c27
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.wgsl
index 9ff4796..d4b5edb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/284c27.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read>;
-fn textureDimensions_284c27() {
+fn textureDimensions_284c27() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_284c27();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_284c27();
+ prevent_dce = textureDimensions_284c27();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_284c27();
+ prevent_dce = textureDimensions_284c27();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_284c27();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl
index a49f1d0..29dc5d0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16sint, read_write>) -> vec2<u32>
-fn textureDimensions_2a58b7() {
+fn textureDimensions_2a58b7() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2a58b7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2a58b7();
+ prevent_dce = textureDimensions_2a58b7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2a58b7();
+ prevent_dce = textureDimensions_2a58b7();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2a58b7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.dxc.hlsl
index 3ac97d2..b49bb21 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2a58b7() {
+uint2 textureDimensions_2a58b7() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2a58b7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2a58b7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2a58b7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2a58b7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2a58b7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2a58b7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.fxc.hlsl
index 3ac97d2..b49bb21 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2a58b7() {
+uint2 textureDimensions_2a58b7() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2a58b7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2a58b7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2a58b7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2a58b7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2a58b7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2a58b7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.glsl
index 477d0a0..0f86d67 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp writeonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_2a58b7() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_2a58b7();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_2a58b7() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_2a58b7() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_2a58b7();
+ prevent_dce.inner = textureDimensions_2a58b7();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_2a58b7() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_2a58b7() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_2a58b7();
+ prevent_dce.inner = textureDimensions_2a58b7();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_2a58b7() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_2a58b7();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.msl
index 462c29e..3f4f520 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_2a58b7(texture2d_array<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_2a58b7(texture2d_array<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_2a58b7(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_2a58b7(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_2a58b7(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_2a58b7(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_2a58b7(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_2a58b7(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.spvasm
index 540d811..60d7087 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_2a58b7 "textureDimensions_2a58b7"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_2a58b7 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_2a58b7 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_2a58b7
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_2a58b7
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_2a58b7
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_2a58b7
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_2a58b7
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_2a58b7
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.wgsl
index 977747b..2fd5e75 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2a58b7.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read_write>;
-fn textureDimensions_2a58b7() {
+fn textureDimensions_2a58b7() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2a58b7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2a58b7();
+ prevent_dce = textureDimensions_2a58b7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2a58b7();
+ prevent_dce = textureDimensions_2a58b7();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2a58b7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl
index 898e488b..d88bea3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<bgra8unorm, read>;
// fn textureDimensions(texture: texture_storage_1d<bgra8unorm, read>) -> u32
-fn textureDimensions_2bafdf() {
+fn textureDimensions_2bafdf() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2bafdf();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_2bafdf();
+ prevent_dce = textureDimensions_2bafdf();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2bafdf();
+ prevent_dce = textureDimensions_2bafdf();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2bafdf();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.dxc.hlsl
index 9bcdd38..eda2b73 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2bafdf() {
+uint textureDimensions_2bafdf() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2bafdf();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2bafdf();
+ prevent_dce.Store(0u, asuint(textureDimensions_2bafdf()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2bafdf();
+ prevent_dce.Store(0u, asuint(textureDimensions_2bafdf()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2bafdf();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.fxc.hlsl
index 9bcdd38..eda2b73 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2bafdf() {
+uint textureDimensions_2bafdf() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2bafdf();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2bafdf();
+ prevent_dce.Store(0u, asuint(textureDimensions_2bafdf()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2bafdf();
+ prevent_dce.Store(0u, asuint(textureDimensions_2bafdf()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2bafdf();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.glsl
index 3a797b2..de5fe89 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_2bafdf() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_2bafdf();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp readonly image2D arg_0;
+uint textureDimensions_2bafdf() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_2bafdf() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_2bafdf();
+ prevent_dce.inner = textureDimensions_2bafdf();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp readonly image2D arg_0;
+uint textureDimensions_2bafdf() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_2bafdf() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_2bafdf();
+ prevent_dce.inner = textureDimensions_2bafdf();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8) uniform highp readonly image2D arg_0;
+uint textureDimensions_2bafdf() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_2bafdf();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.msl
index 077ce35..057c229 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_2bafdf(texture1d<float, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_2bafdf(texture1d<float, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_2bafdf(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_2bafdf(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_2bafdf(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_2bafdf(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_2bafdf(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_2bafdf(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.spvasm
index 2ca0471..11028ca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_2bafdf "textureDimensions_2bafdf"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_2bafdf = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_2bafdf = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_2bafdf
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_2bafdf
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_2bafdf
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_2bafdf
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_2bafdf
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_2bafdf
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.wgsl
index 859e1bb..4054603 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2bafdf.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read>;
-fn textureDimensions_2bafdf() {
+fn textureDimensions_2bafdf() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2bafdf();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_2bafdf();
+ prevent_dce = textureDimensions_2bafdf();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2bafdf();
+ prevent_dce = textureDimensions_2bafdf();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2bafdf();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl
index ba66b1c..67d6a5e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8uint, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba8uint, read>) -> u32
-fn textureDimensions_2dc5c5() {
+fn textureDimensions_2dc5c5() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2dc5c5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_2dc5c5();
+ prevent_dce = textureDimensions_2dc5c5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2dc5c5();
+ prevent_dce = textureDimensions_2dc5c5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2dc5c5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.dxc.hlsl
index 8850d148..18f3768 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2dc5c5() {
+uint textureDimensions_2dc5c5() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2dc5c5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2dc5c5();
+ prevent_dce.Store(0u, asuint(textureDimensions_2dc5c5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2dc5c5();
+ prevent_dce.Store(0u, asuint(textureDimensions_2dc5c5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2dc5c5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.fxc.hlsl
index 8850d148..18f3768 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2dc5c5() {
+uint textureDimensions_2dc5c5() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2dc5c5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2dc5c5();
+ prevent_dce.Store(0u, asuint(textureDimensions_2dc5c5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2dc5c5();
+ prevent_dce.Store(0u, asuint(textureDimensions_2dc5c5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2dc5c5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.glsl
index c15d342..5ddc117 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp readonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_2dc5c5() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_2dc5c5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_2dc5c5() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_2dc5c5() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_2dc5c5();
+ prevent_dce.inner = textureDimensions_2dc5c5();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_2dc5c5() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_2dc5c5() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_2dc5c5();
+ prevent_dce.inner = textureDimensions_2dc5c5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_2dc5c5() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_2dc5c5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.msl
index cc64179..fc8a566 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_2dc5c5(texture1d<uint, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_2dc5c5(texture1d<uint, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_2dc5c5(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_2dc5c5(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_2dc5c5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_2dc5c5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_2dc5c5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_2dc5c5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.spvasm
index e741b4a..a49cca6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_2dc5c5 "textureDimensions_2dc5c5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_2dc5c5 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_2dc5c5 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_2dc5c5
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_2dc5c5
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_2dc5c5
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_2dc5c5
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_2dc5c5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_2dc5c5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.wgsl
index 55916da..d652a63 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2dc5c5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, read>;
-fn textureDimensions_2dc5c5() {
+fn textureDimensions_2dc5c5() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2dc5c5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_2dc5c5();
+ prevent_dce = textureDimensions_2dc5c5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2dc5c5();
+ prevent_dce = textureDimensions_2dc5c5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2dc5c5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl
index 9d97276..d8c444f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d<i32>;
// fn textureDimensions(texture: texture_2d<i32>, level: i32) -> vec2<u32>
-fn textureDimensions_2e443d() {
+fn textureDimensions_2e443d() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2e443d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2e443d();
+ prevent_dce = textureDimensions_2e443d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2e443d();
+ prevent_dce = textureDimensions_2e443d();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2e443d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.dxc.hlsl
index 579ff62..2efa093 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2e443d() {
+uint2 textureDimensions_2e443d() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2e443d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2e443d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2e443d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2e443d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2e443d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2e443d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.fxc.hlsl
index 579ff62..2efa093 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2e443d() {
+uint2 textureDimensions_2e443d() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2e443d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2e443d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2e443d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2e443d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2e443d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2e443d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.glsl
index 606ade4..a564de9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_2e443d() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_2e443d();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_2e443d() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_2e443d() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_2e443d();
+ prevent_dce.inner = textureDimensions_2e443d();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_2e443d() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_2e443d() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_2e443d();
+ prevent_dce.inner = textureDimensions_2e443d();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_2e443d() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_2e443d();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.msl
index 9c5e562..1403e69 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_2e443d(texture2d<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_2e443d(texture2d<int, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_2e443d(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_2e443d(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_2e443d(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_2e443d(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_2e443d(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_2e443d(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.spvasm
index c0566e5..0a8a51b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_2e443d "textureDimensions_2e443d"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_2e443d = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_2e443d = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_2e443d
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_2e443d
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_2e443d
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_2e443d
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_2e443d
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_2e443d
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.wgsl
index a714fb7..e200a68 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2e443d.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d<i32>;
-fn textureDimensions_2e443d() {
+fn textureDimensions_2e443d() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2e443d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2e443d();
+ prevent_dce = textureDimensions_2e443d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2e443d();
+ prevent_dce = textureDimensions_2e443d();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2e443d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl
index 6c934e5..94273d4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
// fn textureDimensions(texture: texture_2d_array<f32>, level: i32) -> vec2<u32>
-fn textureDimensions_2fd2a4() {
+fn textureDimensions_2fd2a4() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2fd2a4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2fd2a4();
+ prevent_dce = textureDimensions_2fd2a4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2fd2a4();
+ prevent_dce = textureDimensions_2fd2a4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2fd2a4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.dxc.hlsl
index 4752e5f..4c9fdc4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2fd2a4() {
+uint2 textureDimensions_2fd2a4() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2fd2a4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2fd2a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2fd2a4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2fd2a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2fd2a4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2fd2a4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.fxc.hlsl
index 4752e5f..4c9fdc4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2fd2a4() {
+uint2 textureDimensions_2fd2a4() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2fd2a4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2fd2a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2fd2a4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2fd2a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_2fd2a4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2fd2a4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.glsl
index 0867453..8751208 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_2fd2a4() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_2fd2a4();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_2fd2a4() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_2fd2a4() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_2fd2a4();
+ prevent_dce.inner = textureDimensions_2fd2a4();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_2fd2a4() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_2fd2a4() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_2fd2a4();
+ prevent_dce.inner = textureDimensions_2fd2a4();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_2fd2a4() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_2fd2a4();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.msl
index 7b39587..82ada0d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_2fd2a4(texture2d_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_2fd2a4(texture2d_array<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_2fd2a4(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_2fd2a4(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_2fd2a4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_2fd2a4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_2fd2a4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_2fd2a4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.spvasm
index 1357b3d..64dbe5e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 67
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,81 +21,108 @@
OpName %textureDimensions_2fd2a4 "textureDimensions_2fd2a4"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_2fd2a4 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_2fd2a4 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %int %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %int %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_2fd2a4
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_2fd2a4
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_2fd2a4
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %58 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %59 = OpFunctionCall %v2uint %textureDimensions_2fd2a4
+ OpStore %58 %59
+ %60 = OpLoad %VertexOutput %out
+ OpReturnValue %60
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %62 = OpLabel
+ %63 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %64 = OpCompositeExtract %v4float %63 0
+ OpStore %pos_1 %64
+ %65 = OpCompositeExtract %v2uint %63 1
+ OpStore %prevent_dce_1 %65
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_2fd2a4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_2fd2a4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.wgsl
index dcb3f65..6f9adbe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2fd2a4.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
-fn textureDimensions_2fd2a4() {
+fn textureDimensions_2fd2a4() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2fd2a4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2fd2a4();
+ prevent_dce = textureDimensions_2fd2a4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2fd2a4();
+ prevent_dce = textureDimensions_2fd2a4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2fd2a4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl
index 2a7d139..0335ceb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32float, read>;
// fn textureDimensions(texture: texture_storage_3d<r32float, read>) -> vec3<u32>
-fn textureDimensions_2ff32a() {
+fn textureDimensions_2ff32a() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2ff32a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2ff32a();
+ prevent_dce = textureDimensions_2ff32a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2ff32a();
+ prevent_dce = textureDimensions_2ff32a();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2ff32a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.dxc.hlsl
index ace401e..7db40a9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2ff32a() {
+uint3 textureDimensions_2ff32a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2ff32a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2ff32a();
+ prevent_dce.Store3(0u, asuint(textureDimensions_2ff32a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2ff32a();
+ prevent_dce.Store3(0u, asuint(textureDimensions_2ff32a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2ff32a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.fxc.hlsl
index ace401e..7db40a9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_2ff32a() {
+uint3 textureDimensions_2ff32a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_2ff32a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_2ff32a();
+ prevent_dce.Store3(0u, asuint(textureDimensions_2ff32a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_2ff32a();
+ prevent_dce.Store3(0u, asuint(textureDimensions_2ff32a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_2ff32a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.glsl
index cc9f945..48728a3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32f) uniform highp readonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_2ff32a() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_2ff32a();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_2ff32a() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_2ff32a() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_2ff32a();
+ prevent_dce.inner = textureDimensions_2ff32a();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_2ff32a() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_2ff32a() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_2ff32a();
+ prevent_dce.inner = textureDimensions_2ff32a();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_2ff32a() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_2ff32a();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.msl
index d99da69..23ae933 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_2ff32a(texture3d<float, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_2ff32a(texture3d<float, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_2ff32a(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_2ff32a(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_2ff32a(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_2ff32a(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_2ff32a(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_2ff32a(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.spvasm
index b4c1596..79dab7e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_2ff32a "textureDimensions_2ff32a"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_2ff32a = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_2ff32a = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_2ff32a
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_2ff32a
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_2ff32a
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_2ff32a
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_2ff32a
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_2ff32a
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.wgsl
index fb2778e..61a3c82 100644
--- a/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/2ff32a.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read>;
-fn textureDimensions_2ff32a() {
+fn textureDimensions_2ff32a() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_2ff32a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_2ff32a();
+ prevent_dce = textureDimensions_2ff32a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_2ff32a();
+ prevent_dce = textureDimensions_2ff32a();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_2ff32a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl
index 6c445fb..6b12772 100644
--- a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32uint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<r32uint, read>) -> vec2<u32>
-fn textureDimensions_305dd5() {
+fn textureDimensions_305dd5() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_305dd5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_305dd5();
+ prevent_dce = textureDimensions_305dd5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_305dd5();
+ prevent_dce = textureDimensions_305dd5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_305dd5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.dxc.hlsl
index 7301ab9..b1d14e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_305dd5() {
+uint2 textureDimensions_305dd5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_305dd5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_305dd5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_305dd5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_305dd5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_305dd5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_305dd5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.fxc.hlsl
index 7301ab9..b1d14e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_305dd5() {
+uint2 textureDimensions_305dd5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_305dd5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_305dd5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_305dd5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_305dd5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_305dd5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_305dd5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.glsl
index d56a8b3..0b3afa1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp readonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_305dd5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_305dd5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_305dd5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_305dd5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_305dd5();
+ prevent_dce.inner = textureDimensions_305dd5();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_305dd5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_305dd5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_305dd5();
+ prevent_dce.inner = textureDimensions_305dd5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_305dd5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_305dd5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.msl
index 067fca1..10aaad7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_305dd5(texture2d_array<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_305dd5(texture2d_array<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_305dd5(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_305dd5(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_305dd5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_305dd5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_305dd5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_305dd5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.spvasm
index e95ac29..3d36098 100644
--- a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_305dd5 "textureDimensions_305dd5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_305dd5 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_305dd5 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_305dd5
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_305dd5
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_305dd5
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_305dd5
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_305dd5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_305dd5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.wgsl
index 2a9aebf..b9c6491 100644
--- a/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/305dd5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read>;
-fn textureDimensions_305dd5() {
+fn textureDimensions_305dd5() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_305dd5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_305dd5();
+ prevent_dce = textureDimensions_305dd5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_305dd5();
+ prevent_dce = textureDimensions_305dd5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_305dd5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl
index 78f5bcb..c24bb4b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32uint, write>;
// fn textureDimensions(texture: texture_storage_3d<r32uint, write>) -> vec3<u32>
-fn textureDimensions_31799c() {
+fn textureDimensions_31799c() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_31799c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_31799c();
+ prevent_dce = textureDimensions_31799c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_31799c();
+ prevent_dce = textureDimensions_31799c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_31799c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.dxc.hlsl
index a1563cd..da27bd4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_31799c() {
+uint3 textureDimensions_31799c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_31799c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_31799c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_31799c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_31799c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_31799c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_31799c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.fxc.hlsl
index a1563cd..da27bd4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_31799c() {
+uint3 textureDimensions_31799c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_31799c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_31799c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_31799c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_31799c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_31799c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_31799c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.glsl
index 4329040..ef359b4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32ui) uniform highp writeonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_31799c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_31799c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_31799c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_31799c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_31799c();
+ prevent_dce.inner = textureDimensions_31799c();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_31799c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_31799c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_31799c();
+ prevent_dce.inner = textureDimensions_31799c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_31799c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_31799c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.msl
index 25b88c9..b80c1b3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_31799c(texture3d<uint, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_31799c(texture3d<uint, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_31799c(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_31799c(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_31799c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_31799c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_31799c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_31799c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.spvasm
index 186b288..b89985f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_31799c "textureDimensions_31799c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_31799c = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_31799c = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_31799c
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_31799c
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_31799c
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_31799c
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_31799c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_31799c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.wgsl
index 5c8505b..6708be9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31799c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, write>;
-fn textureDimensions_31799c() {
+fn textureDimensions_31799c() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_31799c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_31799c();
+ prevent_dce = textureDimensions_31799c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_31799c();
+ prevent_dce = textureDimensions_31799c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_31799c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl
index 77ccb65..ea9cf9e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32uint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<r32uint, read_write>) -> vec3<u32>
-fn textureDimensions_31d00d() {
+fn textureDimensions_31d00d() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_31d00d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_31d00d();
+ prevent_dce = textureDimensions_31d00d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_31d00d();
+ prevent_dce = textureDimensions_31d00d();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_31d00d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.dxc.hlsl
index a9fef03..e2ad60e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_31d00d() {
+uint3 textureDimensions_31d00d() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_31d00d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_31d00d();
+ prevent_dce.Store3(0u, asuint(textureDimensions_31d00d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_31d00d();
+ prevent_dce.Store3(0u, asuint(textureDimensions_31d00d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_31d00d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.fxc.hlsl
index a9fef03..e2ad60e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_31d00d() {
+uint3 textureDimensions_31d00d() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_31d00d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_31d00d();
+ prevent_dce.Store3(0u, asuint(textureDimensions_31d00d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_31d00d();
+ prevent_dce.Store3(0u, asuint(textureDimensions_31d00d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_31d00d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.glsl
index 47fddb2..3e1dc1b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32ui) uniform highp uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_31d00d() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_31d00d();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp uimage3D arg_0;
+uvec3 textureDimensions_31d00d() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_31d00d() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_31d00d();
+ prevent_dce.inner = textureDimensions_31d00d();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32ui) uniform highp uimage3D arg_0;
+uvec3 textureDimensions_31d00d() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_31d00d() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_31d00d();
+ prevent_dce.inner = textureDimensions_31d00d();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32ui) uniform highp uimage3D arg_0;
+uvec3 textureDimensions_31d00d() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_31d00d();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.msl
index 2e0334f..9d16248 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_31d00d(texture3d<uint, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_31d00d(texture3d<uint, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_31d00d(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_31d00d(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_31d00d(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_31d00d(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_31d00d(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_31d00d(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.spvasm
index fd5158c..2b228f3a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_31d00d "textureDimensions_31d00d"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_31d00d = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_31d00d = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_31d00d
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_31d00d
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_31d00d
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_31d00d
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_31d00d
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_31d00d
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.wgsl
index 7d3163a..726f817 100644
--- a/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/31d00d.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read_write>;
-fn textureDimensions_31d00d() {
+fn textureDimensions_31d00d() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_31d00d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_31d00d();
+ prevent_dce = textureDimensions_31d00d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_31d00d();
+ prevent_dce = textureDimensions_31d00d();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_31d00d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl
index da4df51..bd7c063 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba32sint, read_write>) -> vec2<u32>
-fn textureDimensions_325338() {
+fn textureDimensions_325338() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_325338();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_325338();
+ prevent_dce = textureDimensions_325338();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_325338();
+ prevent_dce = textureDimensions_325338();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_325338();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.dxc.hlsl
index da48caa..0392443 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_325338() {
+uint2 textureDimensions_325338() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_325338();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_325338();
+ prevent_dce.Store2(0u, asuint(textureDimensions_325338()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_325338();
+ prevent_dce.Store2(0u, asuint(textureDimensions_325338()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_325338();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.fxc.hlsl
index da48caa..0392443 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_325338() {
+uint2 textureDimensions_325338() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_325338();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_325338();
+ prevent_dce.Store2(0u, asuint(textureDimensions_325338()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_325338();
+ prevent_dce.Store2(0u, asuint(textureDimensions_325338()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_325338();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.glsl
index a0cc4e9..4fcb64d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_325338() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_325338();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_325338() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_325338() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_325338();
+ prevent_dce.inner = textureDimensions_325338();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_325338() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_325338() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_325338();
+ prevent_dce.inner = textureDimensions_325338();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_325338() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_325338();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.msl
index f8f07de..cf4d900 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_325338(texture2d<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_325338(texture2d<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_325338(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_325338(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_325338(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_325338(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_325338(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_325338(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.spvasm
index 530de1d..4051084 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_325338 "textureDimensions_325338"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_325338 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_325338 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_325338
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_325338
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_325338
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_325338
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_325338
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_325338
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.wgsl
index fe9bfc0..55aa260 100644
--- a/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/325338.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read_write>;
-fn textureDimensions_325338() {
+fn textureDimensions_325338() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_325338();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_325338();
+ prevent_dce = textureDimensions_325338();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_325338();
+ prevent_dce = textureDimensions_325338();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_325338();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl
index a42f424..bfec234 100644
--- a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube_array<u32>;
// fn textureDimensions(texture: texture_cube_array<u32>, level: u32) -> vec2<u32>
-fn textureDimensions_346fee() {
+fn textureDimensions_346fee() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_346fee();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_346fee();
+ prevent_dce = textureDimensions_346fee();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_346fee();
+ prevent_dce = textureDimensions_346fee();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_346fee();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.dxc.hlsl
index 974e53c..df79320 100644
--- a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_346fee() {
+uint2 textureDimensions_346fee() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_346fee();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_346fee();
+ prevent_dce.Store2(0u, asuint(textureDimensions_346fee()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_346fee();
+ prevent_dce.Store2(0u, asuint(textureDimensions_346fee()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_346fee();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.fxc.hlsl
index 974e53c..df79320 100644
--- a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_346fee() {
+uint2 textureDimensions_346fee() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_346fee();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_346fee();
+ prevent_dce.Store2(0u, asuint(textureDimensions_346fee()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_346fee();
+ prevent_dce.Store2(0u, asuint(textureDimensions_346fee()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_346fee();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.msl
index c46c34b..57fc86d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_346fee(texturecube_array<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_346fee(texturecube_array<uint, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_346fee(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_346fee(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_346fee(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_346fee(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_346fee(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_346fee(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.spvasm
index 0afbf3a..456fafe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 51
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,80 +22,106 @@
OpName %textureDimensions_346fee "textureDimensions_346fee"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %32 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %35 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %37 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %47 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %53 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_346fee = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %32
+%textureDimensions_346fee = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %28 = OpLoad %11 %arg_0
- %29 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v3uint %28 %29
- %25 = OpVectorShuffle %v2uint %26 %26 0 1
- OpStore %res %25
- %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %36 = OpLoad %v2uint %res
- OpStore %35 %36
+ %30 = OpLoad %16 %arg_0
+ %31 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %30 %31
+ %27 = OpVectorShuffle %v2uint %28 %28 0 1
+ OpStore %res %27
+ %34 = OpLoad %v2uint %res
+ OpReturnValue %34
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %35
+ %38 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_346fee
+ OpStore %41 %42
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %37
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_346fee
- OpReturnValue %5
+%compute_main = OpFunction %void None %35
+ %44 = OpLabel
+ %45 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %46 = OpFunctionCall %v2uint %textureDimensions_346fee
+ OpStore %45 %46
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %43
+%vertex_main_inner = OpFunction %VertexOutput None %47
+ %50 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %53
+ %55 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %55 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_346fee
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %35
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_346fee
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %49 = OpLabel
- %50 = OpFunctionCall %void %textureDimensions_346fee
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.wgsl
index f02e3e0..1308d19 100644
--- a/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/346fee.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<u32>;
-fn textureDimensions_346fee() {
+fn textureDimensions_346fee() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_346fee();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_346fee();
+ prevent_dce = textureDimensions_346fee();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_346fee();
+ prevent_dce = textureDimensions_346fee();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_346fee();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl
index 96967fe..399f816 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16uint, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba16uint, write>) -> vec3<u32>
-fn textureDimensions_35a7e5() {
+fn textureDimensions_35a7e5() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_35a7e5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_35a7e5();
+ prevent_dce = textureDimensions_35a7e5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_35a7e5();
+ prevent_dce = textureDimensions_35a7e5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_35a7e5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.dxc.hlsl
index f4b88b7..0f3f83d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_35a7e5() {
+uint3 textureDimensions_35a7e5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_35a7e5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_35a7e5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_35a7e5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_35a7e5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_35a7e5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_35a7e5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.fxc.hlsl
index f4b88b7..0f3f83d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_35a7e5() {
+uint3 textureDimensions_35a7e5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_35a7e5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_35a7e5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_35a7e5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_35a7e5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_35a7e5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_35a7e5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.glsl
index cc2cdb8..e33c0cf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16ui) uniform highp writeonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_35a7e5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_35a7e5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_35a7e5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_35a7e5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_35a7e5();
+ prevent_dce.inner = textureDimensions_35a7e5();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_35a7e5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_35a7e5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_35a7e5();
+ prevent_dce.inner = textureDimensions_35a7e5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_35a7e5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_35a7e5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.msl
index 5b89c7d..085eab1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_35a7e5(texture3d<uint, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_35a7e5(texture3d<uint, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_35a7e5(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_35a7e5(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_35a7e5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_35a7e5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_35a7e5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_35a7e5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.spvasm
index 6eebebf..ef047c0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_35a7e5 "textureDimensions_35a7e5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_35a7e5 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_35a7e5 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_35a7e5
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_35a7e5
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_35a7e5
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_35a7e5
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_35a7e5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_35a7e5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.wgsl
index c0733f8..52ce426 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35a7e5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, write>;
-fn textureDimensions_35a7e5() {
+fn textureDimensions_35a7e5() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_35a7e5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_35a7e5();
+ prevent_dce = textureDimensions_35a7e5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_35a7e5();
+ prevent_dce = textureDimensions_35a7e5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_35a7e5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl
index a8ebf2f..16bbf34 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32uint, write>;
// fn textureDimensions(texture: texture_storage_3d<rg32uint, write>) -> vec3<u32>
-fn textureDimensions_35ee69() {
+fn textureDimensions_35ee69() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_35ee69();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_35ee69();
+ prevent_dce = textureDimensions_35ee69();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_35ee69();
+ prevent_dce = textureDimensions_35ee69();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_35ee69();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.dxc.hlsl
index 27b4273..cf0695f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_35ee69() {
+uint3 textureDimensions_35ee69() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_35ee69();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_35ee69();
+ prevent_dce.Store3(0u, asuint(textureDimensions_35ee69()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_35ee69();
+ prevent_dce.Store3(0u, asuint(textureDimensions_35ee69()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_35ee69();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.fxc.hlsl
index 27b4273..cf0695f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_35ee69() {
+uint3 textureDimensions_35ee69() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_35ee69();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_35ee69();
+ prevent_dce.Store3(0u, asuint(textureDimensions_35ee69()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_35ee69();
+ prevent_dce.Store3(0u, asuint(textureDimensions_35ee69()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_35ee69();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.msl
index 14b224f..2837c04 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_35ee69(texture3d<uint, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_35ee69(texture3d<uint, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_35ee69(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_35ee69(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_35ee69(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_35ee69(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_35ee69(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_35ee69(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.spvasm
index 8fbfc75..7204bd8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_35ee69 "textureDimensions_35ee69"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_35ee69 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_35ee69 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_35ee69
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_35ee69
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_35ee69
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_35ee69
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_35ee69
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_35ee69
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.wgsl
index 1734c8e..f038514 100644
--- a/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/35ee69.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, write>;
-fn textureDimensions_35ee69() {
+fn textureDimensions_35ee69() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_35ee69();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_35ee69();
+ prevent_dce = textureDimensions_35ee69();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_35ee69();
+ prevent_dce = textureDimensions_35ee69();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_35ee69();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl
index 1d3dbf6..6f75d6e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32uint, read_write>) -> vec2<u32>
-fn textureDimensions_36eeb7() {
+fn textureDimensions_36eeb7() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_36eeb7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_36eeb7();
+ prevent_dce = textureDimensions_36eeb7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_36eeb7();
+ prevent_dce = textureDimensions_36eeb7();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_36eeb7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.dxc.hlsl
index 209bd61..57cb792 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_36eeb7() {
+uint2 textureDimensions_36eeb7() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_36eeb7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_36eeb7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_36eeb7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_36eeb7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_36eeb7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_36eeb7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.fxc.hlsl
index 209bd61..57cb792 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_36eeb7() {
+uint2 textureDimensions_36eeb7() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_36eeb7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_36eeb7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_36eeb7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_36eeb7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_36eeb7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_36eeb7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.glsl
index b0d3857..45dcb14 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_36eeb7() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_36eeb7();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_36eeb7() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_36eeb7() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_36eeb7();
+ prevent_dce.inner = textureDimensions_36eeb7();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_36eeb7() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_36eeb7() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_36eeb7();
+ prevent_dce.inner = textureDimensions_36eeb7();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_36eeb7() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_36eeb7();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.msl
index 97dfc67..e5192c4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_36eeb7(texture2d_array<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_36eeb7(texture2d_array<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_36eeb7(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_36eeb7(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_36eeb7(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_36eeb7(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_36eeb7(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_36eeb7(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.spvasm
index 0291cac..c10b04c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_36eeb7 "textureDimensions_36eeb7"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_36eeb7 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_36eeb7 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_36eeb7
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_36eeb7
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_36eeb7
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_36eeb7
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_36eeb7
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_36eeb7
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.wgsl
index cd50939..20f6a21 100644
--- a/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/36eeb7.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read_write>;
-fn textureDimensions_36eeb7() {
+fn textureDimensions_36eeb7() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_36eeb7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_36eeb7();
+ prevent_dce = textureDimensions_36eeb7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_36eeb7();
+ prevent_dce = textureDimensions_36eeb7();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_36eeb7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl
index ad5f7fa..2a315f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8sint, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba8sint, write>) -> vec2<u32>
-fn textureDimensions_378a65() {
+fn textureDimensions_378a65() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_378a65();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_378a65();
+ prevent_dce = textureDimensions_378a65();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_378a65();
+ prevent_dce = textureDimensions_378a65();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_378a65();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.dxc.hlsl
index 30ae103..9c1c332 100644
--- a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_378a65() {
+uint2 textureDimensions_378a65() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_378a65();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_378a65();
+ prevent_dce.Store2(0u, asuint(textureDimensions_378a65()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_378a65();
+ prevent_dce.Store2(0u, asuint(textureDimensions_378a65()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_378a65();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.fxc.hlsl
index 30ae103..9c1c332 100644
--- a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_378a65() {
+uint2 textureDimensions_378a65() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_378a65();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_378a65();
+ prevent_dce.Store2(0u, asuint(textureDimensions_378a65()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_378a65();
+ prevent_dce.Store2(0u, asuint(textureDimensions_378a65()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_378a65();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.glsl
index 43559d21..c527cc5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_378a65() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_378a65();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_378a65() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_378a65() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_378a65();
+ prevent_dce.inner = textureDimensions_378a65();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_378a65() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_378a65() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_378a65();
+ prevent_dce.inner = textureDimensions_378a65();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_378a65() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_378a65();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.msl
index 850ec83..c07c3223 100644
--- a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_378a65(texture2d<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_378a65(texture2d<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_378a65(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_378a65(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_378a65(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_378a65(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_378a65(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_378a65(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.spvasm
index f302b75..4787baa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_378a65 "textureDimensions_378a65"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_378a65 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_378a65 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_378a65
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_378a65
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_378a65
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_378a65
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_378a65
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_378a65
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.wgsl
index b40dee3..79a1a8f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/378a65.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, write>;
-fn textureDimensions_378a65() {
+fn textureDimensions_378a65() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_378a65();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_378a65();
+ prevent_dce = textureDimensions_378a65();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_378a65();
+ prevent_dce = textureDimensions_378a65();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_378a65();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl
index 102115f..cfbdfe8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube<f32>;
// fn textureDimensions(texture: texture_cube<f32>, level: u32) -> vec2<u32>
-fn textureDimensions_382b16() {
+fn textureDimensions_382b16() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_382b16();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_382b16();
+ prevent_dce = textureDimensions_382b16();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_382b16();
+ prevent_dce = textureDimensions_382b16();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_382b16();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.dxc.hlsl
index d877eb7..bdd55ba 100644
--- a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_382b16() {
+uint2 textureDimensions_382b16() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_382b16();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_382b16();
+ prevent_dce.Store2(0u, asuint(textureDimensions_382b16()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_382b16();
+ prevent_dce.Store2(0u, asuint(textureDimensions_382b16()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_382b16();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.fxc.hlsl
index d877eb7..bdd55ba 100644
--- a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_382b16() {
+uint2 textureDimensions_382b16() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_382b16();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_382b16();
+ prevent_dce.Store2(0u, asuint(textureDimensions_382b16()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_382b16();
+ prevent_dce.Store2(0u, asuint(textureDimensions_382b16()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_382b16();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.glsl
index af8a7b6..088cb3b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp samplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_382b16() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_382b16();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_382b16() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_382b16() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_382b16();
+ prevent_dce.inner = textureDimensions_382b16();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_382b16() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_382b16() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_382b16();
+ prevent_dce.inner = textureDimensions_382b16();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_382b16() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_382b16();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.msl
index 9e677b9..95ee932 100644
--- a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_382b16(texturecube<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_382b16(texturecube<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_382b16(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_382b16(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_382b16(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_382b16(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_382b16(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_382b16(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.spvasm
index 170c6f6..0f7599e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,78 +21,104 @@
OpName %textureDimensions_382b16 "textureDimensions_382b16"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %30 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_382b16 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %30
+%textureDimensions_382b16 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %v2uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %34 = OpLoad %v2uint %res
- OpStore %33 %34
+ %28 = OpLoad %16 %arg_0
+ %29 = OpLoad %uint %arg_1
+ %27 = OpImageQuerySizeLod %v2uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %v2uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_382b16
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_382b16
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %v2uint %textureDimensions_382b16
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_382b16
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_382b16
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_382b16
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.wgsl
index 1f7d94d..964c4ac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/382b16.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube<f32>;
-fn textureDimensions_382b16() {
+fn textureDimensions_382b16() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_382b16();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_382b16();
+ prevent_dce = textureDimensions_382b16();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_382b16();
+ prevent_dce = textureDimensions_382b16();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_382b16();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl
index 3fdfd91..35d0989 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<r32sint, read_write>) -> vec2<u32>
-fn textureDimensions_3834f8() {
+fn textureDimensions_3834f8() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3834f8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3834f8();
+ prevent_dce = textureDimensions_3834f8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3834f8();
+ prevent_dce = textureDimensions_3834f8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3834f8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.dxc.hlsl
index 997891c..3acfbef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3834f8() {
+uint2 textureDimensions_3834f8() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3834f8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3834f8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3834f8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3834f8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3834f8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3834f8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.fxc.hlsl
index 997891c..3acfbef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3834f8() {
+uint2 textureDimensions_3834f8() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3834f8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3834f8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3834f8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3834f8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3834f8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3834f8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.glsl
index 7af7fc4..b528dd7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_3834f8() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3834f8();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp iimage2DArray arg_0;
+uvec2 textureDimensions_3834f8() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3834f8() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3834f8();
+ prevent_dce.inner = textureDimensions_3834f8();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp iimage2DArray arg_0;
+uvec2 textureDimensions_3834f8() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3834f8() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_3834f8();
+ prevent_dce.inner = textureDimensions_3834f8();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32i) uniform highp iimage2DArray arg_0;
+uvec2 textureDimensions_3834f8() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3834f8();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.msl
index 32789b8..8bcc26c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3834f8(texture2d_array<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3834f8(texture2d_array<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3834f8(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3834f8(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3834f8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3834f8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3834f8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3834f8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.spvasm
index 4519cff..6e17440 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3834f8 "textureDimensions_3834f8"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3834f8 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_3834f8 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_3834f8
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_3834f8
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_3834f8
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_3834f8
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_3834f8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_3834f8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.wgsl
index a163261..0480cf3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3834f8.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read_write>;
-fn textureDimensions_3834f8() {
+fn textureDimensions_3834f8() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3834f8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3834f8();
+ prevent_dce = textureDimensions_3834f8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3834f8();
+ prevent_dce = textureDimensions_3834f8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3834f8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl
index d227e23..896e2d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16float, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16float, read_write>) -> vec2<u32>
-fn textureDimensions_38c9ca() {
+fn textureDimensions_38c9ca() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_38c9ca();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_38c9ca();
+ prevent_dce = textureDimensions_38c9ca();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_38c9ca();
+ prevent_dce = textureDimensions_38c9ca();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_38c9ca();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.dxc.hlsl
index 1d3c6a9..c4f6899 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_38c9ca() {
+uint2 textureDimensions_38c9ca() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_38c9ca();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_38c9ca();
+ prevent_dce.Store2(0u, asuint(textureDimensions_38c9ca()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_38c9ca();
+ prevent_dce.Store2(0u, asuint(textureDimensions_38c9ca()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_38c9ca();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.fxc.hlsl
index 1d3c6a9..c4f6899 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_38c9ca() {
+uint2 textureDimensions_38c9ca() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_38c9ca();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_38c9ca();
+ prevent_dce.Store2(0u, asuint(textureDimensions_38c9ca()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_38c9ca();
+ prevent_dce.Store2(0u, asuint(textureDimensions_38c9ca()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_38c9ca();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.glsl
index c90d4fc..06c85ee 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_38c9ca() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_38c9ca();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_38c9ca() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_38c9ca() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_38c9ca();
+ prevent_dce.inner = textureDimensions_38c9ca();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_38c9ca() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_38c9ca() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_38c9ca();
+ prevent_dce.inner = textureDimensions_38c9ca();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_38c9ca() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_38c9ca();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.msl
index 569e619..52807bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_38c9ca(texture2d_array<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_38c9ca(texture2d_array<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_38c9ca(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_38c9ca(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_38c9ca(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_38c9ca(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_38c9ca(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_38c9ca(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.spvasm
index 9959d7d..e55ffe0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_38c9ca "textureDimensions_38c9ca"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_38c9ca = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_38c9ca = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_38c9ca
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_38c9ca
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_38c9ca
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_38c9ca
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_38c9ca
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_38c9ca
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.wgsl
index b1d97fb..16c7f6f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/38c9ca.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read_write>;
-fn textureDimensions_38c9ca() {
+fn textureDimensions_38c9ca() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_38c9ca();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_38c9ca();
+ prevent_dce = textureDimensions_38c9ca();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_38c9ca();
+ prevent_dce = textureDimensions_38c9ca();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_38c9ca();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl
index 61fed2f..3217115 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube_array<i32>;
// fn textureDimensions(texture: texture_cube_array<i32>, level: u32) -> vec2<u32>
-fn textureDimensions_3963d0() {
+fn textureDimensions_3963d0() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3963d0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3963d0();
+ prevent_dce = textureDimensions_3963d0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3963d0();
+ prevent_dce = textureDimensions_3963d0();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3963d0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.dxc.hlsl
index 7b6b6ec..dfe958a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3963d0() {
+uint2 textureDimensions_3963d0() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3963d0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3963d0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3963d0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3963d0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3963d0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3963d0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.fxc.hlsl
index 7b6b6ec..dfe958a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3963d0() {
+uint2 textureDimensions_3963d0() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3963d0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3963d0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3963d0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3963d0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3963d0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3963d0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.msl
index 9c215a5..3303964 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3963d0(texturecube_array<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3963d0(texturecube_array<int, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3963d0(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3963d0(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3963d0(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3963d0(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3963d0(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3963d0(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.spvasm
index 1e0086f..0c8c9de 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 66
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,81 +22,107 @@
OpName %textureDimensions_3963d0 "textureDimensions_3963d0"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %27 = OpConstantNull %uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_3963d0 = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_3963d0 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %uint %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %uint %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_3963d0
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_3963d0
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_3963d0
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %57 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %58 = OpFunctionCall %v2uint %textureDimensions_3963d0
+ OpStore %57 %58
+ %59 = OpLoad %VertexOutput %out
+ OpReturnValue %59
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %61 = OpLabel
+ %62 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %63 = OpCompositeExtract %v4float %62 0
+ OpStore %pos_1 %63
+ %64 = OpCompositeExtract %v2uint %62 1
+ OpStore %prevent_dce_1 %64
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_3963d0
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_3963d0
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.wgsl
index e2c25a7..4af2af7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3963d0.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<i32>;
-fn textureDimensions_3963d0() {
+fn textureDimensions_3963d0() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3963d0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3963d0();
+ prevent_dce = textureDimensions_3963d0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3963d0();
+ prevent_dce = textureDimensions_3963d0();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3963d0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl
index e3c93d1..be73c8b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8uint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8uint, read>) -> vec2<u32>
-fn textureDimensions_397dab() {
+fn textureDimensions_397dab() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_397dab();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_397dab();
+ prevent_dce = textureDimensions_397dab();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_397dab();
+ prevent_dce = textureDimensions_397dab();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_397dab();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.dxc.hlsl
index 53a18f3..ab761b5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_397dab() {
+uint2 textureDimensions_397dab() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_397dab();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_397dab();
+ prevent_dce.Store2(0u, asuint(textureDimensions_397dab()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_397dab();
+ prevent_dce.Store2(0u, asuint(textureDimensions_397dab()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_397dab();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.fxc.hlsl
index 53a18f3..ab761b5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_397dab() {
+uint2 textureDimensions_397dab() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_397dab();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_397dab();
+ prevent_dce.Store2(0u, asuint(textureDimensions_397dab()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_397dab();
+ prevent_dce.Store2(0u, asuint(textureDimensions_397dab()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_397dab();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.glsl
index 64faabb..67ff684 100644
--- a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp readonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_397dab() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_397dab();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_397dab() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_397dab() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_397dab();
+ prevent_dce.inner = textureDimensions_397dab();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_397dab() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_397dab() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_397dab();
+ prevent_dce.inner = textureDimensions_397dab();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_397dab() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_397dab();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.msl
index d2efe77..04d662e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_397dab(texture2d_array<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_397dab(texture2d_array<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_397dab(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_397dab(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_397dab(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_397dab(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_397dab(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_397dab(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.spvasm
index 08bb73c..e49b1b5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_397dab "textureDimensions_397dab"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_397dab = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_397dab = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_397dab
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_397dab
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_397dab
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_397dab
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_397dab
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_397dab
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.wgsl
index 025fb82..8ff0955 100644
--- a/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/397dab.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read>;
-fn textureDimensions_397dab() {
+fn textureDimensions_397dab() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_397dab();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_397dab();
+ prevent_dce = textureDimensions_397dab();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_397dab();
+ prevent_dce = textureDimensions_397dab();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_397dab();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl
index 0ab32e9..8168572 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32float, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba32float, write>) -> vec3<u32>
-fn textureDimensions_3a5bb1() {
+fn textureDimensions_3a5bb1() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3a5bb1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3a5bb1();
+ prevent_dce = textureDimensions_3a5bb1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3a5bb1();
+ prevent_dce = textureDimensions_3a5bb1();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3a5bb1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.dxc.hlsl
index d8e1c7a..41ede51 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3a5bb1() {
+uint3 textureDimensions_3a5bb1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3a5bb1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3a5bb1();
+ prevent_dce.Store3(0u, asuint(textureDimensions_3a5bb1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3a5bb1();
+ prevent_dce.Store3(0u, asuint(textureDimensions_3a5bb1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3a5bb1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.fxc.hlsl
index d8e1c7a..41ede51 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3a5bb1() {
+uint3 textureDimensions_3a5bb1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3a5bb1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3a5bb1();
+ prevent_dce.Store3(0u, asuint(textureDimensions_3a5bb1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3a5bb1();
+ prevent_dce.Store3(0u, asuint(textureDimensions_3a5bb1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3a5bb1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.glsl
index f20fe70..765951b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32f) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_3a5bb1() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3a5bb1();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_3a5bb1() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_3a5bb1() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3a5bb1();
+ prevent_dce.inner = textureDimensions_3a5bb1();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_3a5bb1() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_3a5bb1() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_3a5bb1();
+ prevent_dce.inner = textureDimensions_3a5bb1();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_3a5bb1() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3a5bb1();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.msl
index cf5d00a..d749fa7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3a5bb1(texture3d<float, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_3a5bb1(texture3d<float, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_3a5bb1(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_3a5bb1(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_3a5bb1(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3a5bb1(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3a5bb1(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3a5bb1(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.spvasm
index bc431a6..587b0cc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3a5bb1 "textureDimensions_3a5bb1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3a5bb1 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_3a5bb1 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_3a5bb1
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_3a5bb1
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_3a5bb1
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_3a5bb1
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_3a5bb1
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_3a5bb1
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.wgsl
index 0542029..7d2e79e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a5bb1.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, write>;
-fn textureDimensions_3a5bb1() {
+fn textureDimensions_3a5bb1() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3a5bb1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3a5bb1();
+ prevent_dce = textureDimensions_3a5bb1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3a5bb1();
+ prevent_dce = textureDimensions_3a5bb1();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3a5bb1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl
index c375f31..81310aa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8unorm, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8unorm, write>) -> vec2<u32>
-fn textureDimensions_3a7b69() {
+fn textureDimensions_3a7b69() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3a7b69();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3a7b69();
+ prevent_dce = textureDimensions_3a7b69();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3a7b69();
+ prevent_dce = textureDimensions_3a7b69();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3a7b69();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.dxc.hlsl
index b391bd5..09d3fa2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3a7b69() {
+uint2 textureDimensions_3a7b69() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3a7b69();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3a7b69();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3a7b69()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3a7b69();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3a7b69()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3a7b69();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.fxc.hlsl
index b391bd5..09d3fa2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3a7b69() {
+uint2 textureDimensions_3a7b69() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3a7b69();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3a7b69();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3a7b69()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3a7b69();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3a7b69()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3a7b69();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.glsl
index 321bd73..21b27ab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_3a7b69() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3a7b69();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_3a7b69() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3a7b69() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3a7b69();
+ prevent_dce.inner = textureDimensions_3a7b69();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_3a7b69() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3a7b69() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_3a7b69();
+ prevent_dce.inner = textureDimensions_3a7b69();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_3a7b69() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3a7b69();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.msl
index 952bf08..c3d61a5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3a7b69(texture2d_array<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3a7b69(texture2d_array<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3a7b69(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3a7b69(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3a7b69(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3a7b69(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3a7b69(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3a7b69(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.spvasm
index ae8c17a..f9e6a54 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3a7b69 "textureDimensions_3a7b69"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3a7b69 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_3a7b69 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_3a7b69
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_3a7b69
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_3a7b69
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_3a7b69
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_3a7b69
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_3a7b69
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.wgsl
index 1f59f9f..17eea7d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3a7b69.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, write>;
-fn textureDimensions_3a7b69() {
+fn textureDimensions_3a7b69() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3a7b69();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3a7b69();
+ prevent_dce = textureDimensions_3a7b69();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3a7b69();
+ prevent_dce = textureDimensions_3a7b69();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3a7b69();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl
index 22fb7fd..25c4d95 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8unorm, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba8unorm, write>) -> u32
-fn textureDimensions_3af3e7() {
+fn textureDimensions_3af3e7() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3af3e7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_3af3e7();
+ prevent_dce = textureDimensions_3af3e7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3af3e7();
+ prevent_dce = textureDimensions_3af3e7();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3af3e7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.dxc.hlsl
index 0a8cfb8..a9adc4f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3af3e7() {
+uint textureDimensions_3af3e7() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3af3e7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3af3e7();
+ prevent_dce.Store(0u, asuint(textureDimensions_3af3e7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3af3e7();
+ prevent_dce.Store(0u, asuint(textureDimensions_3af3e7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3af3e7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.fxc.hlsl
index 0a8cfb8..a9adc4f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3af3e7() {
+uint textureDimensions_3af3e7() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3af3e7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3af3e7();
+ prevent_dce.Store(0u, asuint(textureDimensions_3af3e7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3af3e7();
+ prevent_dce.Store(0u, asuint(textureDimensions_3af3e7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3af3e7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.glsl
index 4c38cde..d8753b6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_3af3e7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3af3e7();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_3af3e7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_3af3e7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_3af3e7();
+ prevent_dce.inner = textureDimensions_3af3e7();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_3af3e7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_3af3e7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_3af3e7();
+ prevent_dce.inner = textureDimensions_3af3e7();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_3af3e7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3af3e7();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.msl
index 9078302..2d5c6f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3af3e7(texture1d<float, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_3af3e7(texture1d<float, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3af3e7(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3af3e7(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_3af3e7(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3af3e7(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3af3e7(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3af3e7(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.spvasm
index 862c830..da7799b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3af3e7 "textureDimensions_3af3e7"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3af3e7 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_3af3e7 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_3af3e7
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_3af3e7
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_3af3e7
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_3af3e7
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_3af3e7
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_3af3e7
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.wgsl
index e499dc2..8cb2d89 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3af3e7.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, write>;
-fn textureDimensions_3af3e7() {
+fn textureDimensions_3af3e7() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3af3e7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_3af3e7();
+ prevent_dce = textureDimensions_3af3e7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3af3e7();
+ prevent_dce = textureDimensions_3af3e7();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3af3e7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl
index 8b6d8fb..529cae6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_depth_2d;
// fn textureDimensions(texture: texture_depth_2d) -> vec2<u32>
-fn textureDimensions_3b38f6() {
+fn textureDimensions_3b38f6() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3b38f6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3b38f6();
+ prevent_dce = textureDimensions_3b38f6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3b38f6();
+ prevent_dce = textureDimensions_3b38f6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3b38f6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.dxc.hlsl
index 55f1f10..48fa670 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3b38f6() {
+uint2 textureDimensions_3b38f6() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3b38f6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3b38f6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3b38f6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3b38f6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3b38f6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3b38f6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.fxc.hlsl
index 55f1f10..48fa670 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3b38f6() {
+uint2 textureDimensions_3b38f6() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3b38f6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3b38f6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3b38f6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3b38f6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3b38f6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3b38f6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.glsl
index 6ca56e3..5b8a15b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_3b38f6() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3b38f6();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_3b38f6() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3b38f6() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3b38f6();
+ prevent_dce.inner = textureDimensions_3b38f6();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_3b38f6() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3b38f6() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_3b38f6();
+ prevent_dce.inner = textureDimensions_3b38f6();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_3b38f6() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3b38f6();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.msl
index c9baf45..6d597d6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3b38f6(depth2d<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3b38f6(depth2d<float, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depth2d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3b38f6(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depth2d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3b38f6(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depth2d<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3b38f6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depth2d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3b38f6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depth2d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depth2d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depth2d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3b38f6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depth2d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3b38f6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.spvasm
index 7883a06..deb97c7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3b38f6 "textureDimensions_3b38f6"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3b38f6 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %v2uint %22 %int_0
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_3b38f6 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySizeLod %v2uint %24 %int_0
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_3b38f6
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_3b38f6
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_3b38f6
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_3b38f6
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_3b38f6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_3b38f6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.wgsl
index 11c120d..fc18b34 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3b38f6.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_depth_2d;
-fn textureDimensions_3b38f6() {
+fn textureDimensions_3b38f6() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3b38f6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3b38f6();
+ prevent_dce = textureDimensions_3b38f6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3b38f6();
+ prevent_dce = textureDimensions_3b38f6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3b38f6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl
index f9c186b..f118105 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8uint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8uint, write>) -> vec2<u32>
-fn textureDimensions_3baab5() {
+fn textureDimensions_3baab5() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3baab5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3baab5();
+ prevent_dce = textureDimensions_3baab5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3baab5();
+ prevent_dce = textureDimensions_3baab5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3baab5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.dxc.hlsl
index 8f72d86..2af7cb3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3baab5() {
+uint2 textureDimensions_3baab5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3baab5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3baab5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3baab5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3baab5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3baab5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3baab5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.fxc.hlsl
index 8f72d86..2af7cb3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3baab5() {
+uint2 textureDimensions_3baab5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3baab5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3baab5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3baab5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3baab5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3baab5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3baab5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.glsl
index 3d4cca6..482e6f5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_3baab5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3baab5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_3baab5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3baab5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3baab5();
+ prevent_dce.inner = textureDimensions_3baab5();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_3baab5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3baab5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_3baab5();
+ prevent_dce.inner = textureDimensions_3baab5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_3baab5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3baab5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.msl
index 0d775da..58ce133 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3baab5(texture2d_array<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3baab5(texture2d_array<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3baab5(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3baab5(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3baab5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3baab5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3baab5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3baab5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.spvasm
index 36abe71..da3e969 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3baab5 "textureDimensions_3baab5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3baab5 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_3baab5 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_3baab5
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_3baab5
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_3baab5
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_3baab5
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_3baab5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_3baab5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.wgsl
index 3cb17ad..fd31f98 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3baab5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, write>;
-fn textureDimensions_3baab5() {
+fn textureDimensions_3baab5() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3baab5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3baab5();
+ prevent_dce = textureDimensions_3baab5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3baab5();
+ prevent_dce = textureDimensions_3baab5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3baab5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl
index b90ee55..8c201ff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32float, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<r32float, read_write>) -> vec2<u32>
-fn textureDimensions_3bf12a() {
+fn textureDimensions_3bf12a() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3bf12a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3bf12a();
+ prevent_dce = textureDimensions_3bf12a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3bf12a();
+ prevent_dce = textureDimensions_3bf12a();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3bf12a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.dxc.hlsl
index 26f811d..ecce472 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3bf12a() {
+uint2 textureDimensions_3bf12a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3bf12a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3bf12a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3bf12a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3bf12a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3bf12a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3bf12a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.fxc.hlsl
index 26f811d..ecce472 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3bf12a() {
+uint2 textureDimensions_3bf12a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3bf12a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3bf12a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3bf12a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3bf12a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3bf12a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3bf12a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.glsl
index 8d06ca9..bba9dab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_3bf12a() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3bf12a();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp image2DArray arg_0;
+uvec2 textureDimensions_3bf12a() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3bf12a() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3bf12a();
+ prevent_dce.inner = textureDimensions_3bf12a();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp image2DArray arg_0;
+uvec2 textureDimensions_3bf12a() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3bf12a() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_3bf12a();
+ prevent_dce.inner = textureDimensions_3bf12a();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32f) uniform highp image2DArray arg_0;
+uvec2 textureDimensions_3bf12a() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3bf12a();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.msl
index ae0e30c..0d91b56 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3bf12a(texture2d_array<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3bf12a(texture2d_array<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3bf12a(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3bf12a(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3bf12a(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3bf12a(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3bf12a(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3bf12a(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.spvasm
index ecadd1a..496f188 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3bf12a "textureDimensions_3bf12a"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3bf12a = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_3bf12a = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_3bf12a
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_3bf12a
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_3bf12a
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_3bf12a
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_3bf12a
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_3bf12a
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.wgsl
index efbca67..4360cf7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3bf12a.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, read_write>;
-fn textureDimensions_3bf12a() {
+fn textureDimensions_3bf12a() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3bf12a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3bf12a();
+ prevent_dce = textureDimensions_3bf12a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3bf12a();
+ prevent_dce = textureDimensions_3bf12a();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3bf12a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl
index 7628809..ed3b165 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube_array<i32>;
// fn textureDimensions(texture: texture_cube_array<i32>, level: i32) -> vec2<u32>
-fn textureDimensions_3c66f0() {
+fn textureDimensions_3c66f0() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3c66f0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3c66f0();
+ prevent_dce = textureDimensions_3c66f0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3c66f0();
+ prevent_dce = textureDimensions_3c66f0();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3c66f0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.dxc.hlsl
index ea33cba..c23575d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3c66f0() {
+uint2 textureDimensions_3c66f0() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3c66f0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3c66f0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3c66f0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3c66f0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3c66f0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3c66f0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.fxc.hlsl
index ea33cba..c23575d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3c66f0() {
+uint2 textureDimensions_3c66f0() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3c66f0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3c66f0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3c66f0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3c66f0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3c66f0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3c66f0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.msl
index 0447ab0..acc53a5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3c66f0(texturecube_array<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3c66f0(texturecube_array<int, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3c66f0(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3c66f0(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3c66f0(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3c66f0(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3c66f0(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3c66f0(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.spvasm
index 66895aa..3c5885c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 67
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,81 +22,108 @@
OpName %textureDimensions_3c66f0 "textureDimensions_3c66f0"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3c66f0 = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_3c66f0 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %int %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %int %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_3c66f0
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_3c66f0
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_3c66f0
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %58 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %59 = OpFunctionCall %v2uint %textureDimensions_3c66f0
+ OpStore %58 %59
+ %60 = OpLoad %VertexOutput %out
+ OpReturnValue %60
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %62 = OpLabel
+ %63 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %64 = OpCompositeExtract %v4float %63 0
+ OpStore %pos_1 %64
+ %65 = OpCompositeExtract %v2uint %63 1
+ OpStore %prevent_dce_1 %65
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_3c66f0
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_3c66f0
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.wgsl
index 8ca330d..55a59cf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3c66f0.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<i32>;
-fn textureDimensions_3c66f0() {
+fn textureDimensions_3c66f0() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3c66f0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3c66f0();
+ prevent_dce = textureDimensions_3c66f0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3c66f0();
+ prevent_dce = textureDimensions_3c66f0();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3c66f0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl
index 352fe8d..f2b54d9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_multisampled_2d<f32>;
// fn textureDimensions(texture: texture_multisampled_2d<f32>) -> vec2<u32>
-fn textureDimensions_3f3474() {
+fn textureDimensions_3f3474() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3f3474();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3f3474();
+ prevent_dce = textureDimensions_3f3474();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3f3474();
+ prevent_dce = textureDimensions_3f3474();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3f3474();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.dxc.hlsl
index 2e10445..e26a378 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DMS<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3f3474() {
+uint2 textureDimensions_3f3474() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3f3474();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3f3474();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3f3474()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3f3474();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3f3474()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3f3474();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.fxc.hlsl
index 2e10445..e26a378 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DMS<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3f3474() {
+uint2 textureDimensions_3f3474() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3f3474();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3f3474();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3f3474()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3f3474();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3f3474()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3f3474();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.glsl
index 684ab67..23a872c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp sampler2DMS arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_3f3474() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3f3474();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2DMS arg_0_1;
+uvec2 textureDimensions_3f3474() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3f3474() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3f3474();
+ prevent_dce.inner = textureDimensions_3f3474();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp sampler2DMS arg_0_1;
+uvec2 textureDimensions_3f3474() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3f3474() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_3f3474();
+ prevent_dce.inner = textureDimensions_3f3474();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2DMS arg_0_1;
+uvec2 textureDimensions_3f3474() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3f3474();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.msl
index 8de6e4d..a99e3c5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3f3474(texture2d_ms<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3f3474(texture2d_ms<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_ms<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3f3474(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_ms<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3f3474(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_ms<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3f3474(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_ms<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3f3474(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_ms<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_ms<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_ms<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3f3474(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_ms<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3f3474(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.spvasm
index 8c8a1ca..f000b98 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3f3474 "textureDimensions_3f3474"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 1 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3f3474 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_3f3474 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_3f3474
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_3f3474
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_3f3474
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_3f3474
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_3f3474
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_3f3474
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.wgsl
index f8459c2..8cf9008 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3f3474.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_multisampled_2d<f32>;
-fn textureDimensions_3f3474() {
+fn textureDimensions_3f3474() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3f3474();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3f3474();
+ prevent_dce = textureDimensions_3f3474();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3f3474();
+ prevent_dce = textureDimensions_3f3474();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3f3474();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl
index cef5eb7..b3ec857 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
// fn textureDimensions(texture: texture_2d_array<f32>, level: u32) -> vec2<u32>
-fn textureDimensions_3fc3dc() {
+fn textureDimensions_3fc3dc() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3fc3dc();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3fc3dc();
+ prevent_dce = textureDimensions_3fc3dc();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3fc3dc();
+ prevent_dce = textureDimensions_3fc3dc();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3fc3dc();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.dxc.hlsl
index 3043b1b..2dcd9db 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3fc3dc() {
+uint2 textureDimensions_3fc3dc() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3fc3dc();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3fc3dc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3fc3dc()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3fc3dc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3fc3dc()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3fc3dc();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.fxc.hlsl
index 3043b1b..2dcd9db 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3fc3dc() {
+uint2 textureDimensions_3fc3dc() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3fc3dc();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3fc3dc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3fc3dc()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3fc3dc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3fc3dc()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3fc3dc();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.glsl
index 624a1d7..c897bfb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_3fc3dc() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3fc3dc();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_3fc3dc() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3fc3dc() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3fc3dc();
+ prevent_dce.inner = textureDimensions_3fc3dc();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_3fc3dc() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3fc3dc() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_3fc3dc();
+ prevent_dce.inner = textureDimensions_3fc3dc();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_3fc3dc() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3fc3dc();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.msl
index aa00e05..f9b65d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3fc3dc(texture2d_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3fc3dc(texture2d_array<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3fc3dc(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3fc3dc(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3fc3dc(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3fc3dc(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3fc3dc(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3fc3dc(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.spvasm
index 0034c90..43c5a51 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 51
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,80 +21,106 @@
OpName %textureDimensions_3fc3dc "textureDimensions_3fc3dc"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %32 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %35 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %37 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %47 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %53 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_3fc3dc = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %32
+%textureDimensions_3fc3dc = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %28 = OpLoad %11 %arg_0
- %29 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v3uint %28 %29
- %25 = OpVectorShuffle %v2uint %26 %26 0 1
- OpStore %res %25
- %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %36 = OpLoad %v2uint %res
- OpStore %35 %36
+ %30 = OpLoad %16 %arg_0
+ %31 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %30 %31
+ %27 = OpVectorShuffle %v2uint %28 %28 0 1
+ OpStore %res %27
+ %34 = OpLoad %v2uint %res
+ OpReturnValue %34
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %35
+ %38 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_3fc3dc
+ OpStore %41 %42
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %37
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_3fc3dc
- OpReturnValue %5
+%compute_main = OpFunction %void None %35
+ %44 = OpLabel
+ %45 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %46 = OpFunctionCall %v2uint %textureDimensions_3fc3dc
+ OpStore %45 %46
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %43
+%vertex_main_inner = OpFunction %VertexOutput None %47
+ %50 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %53
+ %55 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %55 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_3fc3dc
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %35
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_3fc3dc
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %49 = OpLabel
- %50 = OpFunctionCall %void %textureDimensions_3fc3dc
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.wgsl
index 7fd00b7..cdca68c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3fc3dc.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
-fn textureDimensions_3fc3dc() {
+fn textureDimensions_3fc3dc() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3fc3dc();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3fc3dc();
+ prevent_dce = textureDimensions_3fc3dc();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3fc3dc();
+ prevent_dce = textureDimensions_3fc3dc();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3fc3dc();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl
index b67ab1a..266ff8b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32sint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<r32sint, read>) -> vec2<u32>
-fn textureDimensions_3ff0a5() {
+fn textureDimensions_3ff0a5() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3ff0a5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3ff0a5();
+ prevent_dce = textureDimensions_3ff0a5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3ff0a5();
+ prevent_dce = textureDimensions_3ff0a5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3ff0a5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.dxc.hlsl
index bcc0dbc..b4e5610 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3ff0a5() {
+uint2 textureDimensions_3ff0a5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3ff0a5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3ff0a5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3ff0a5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3ff0a5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3ff0a5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3ff0a5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.fxc.hlsl
index bcc0dbc..b4e5610 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_3ff0a5() {
+uint2 textureDimensions_3ff0a5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_3ff0a5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_3ff0a5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3ff0a5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_3ff0a5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_3ff0a5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_3ff0a5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.glsl
index a24a360..cef1986 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp readonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_3ff0a5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_3ff0a5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_3ff0a5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3ff0a5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_3ff0a5();
+ prevent_dce.inner = textureDimensions_3ff0a5();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_3ff0a5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_3ff0a5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_3ff0a5();
+ prevent_dce.inner = textureDimensions_3ff0a5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_3ff0a5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_3ff0a5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.msl
index 338fff5..e2cac87 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_3ff0a5(texture2d_array<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_3ff0a5(texture2d_array<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_3ff0a5(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_3ff0a5(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_3ff0a5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_3ff0a5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_3ff0a5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_3ff0a5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.spvasm
index 811d06b..e01fff6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_3ff0a5 "textureDimensions_3ff0a5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_3ff0a5 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_3ff0a5 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_3ff0a5
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_3ff0a5
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_3ff0a5
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_3ff0a5
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_3ff0a5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_3ff0a5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.wgsl
index 22f3344..aa34739 100644
--- a/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/3ff0a5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, read>;
-fn textureDimensions_3ff0a5() {
+fn textureDimensions_3ff0a5() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_3ff0a5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_3ff0a5();
+ prevent_dce = textureDimensions_3ff0a5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_3ff0a5();
+ prevent_dce = textureDimensions_3ff0a5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_3ff0a5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl
index 37faf01..38ef2ef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8sint, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba8sint, write>) -> vec3<u32>
-fn textureDimensions_40c671() {
+fn textureDimensions_40c671() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_40c671();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_40c671();
+ prevent_dce = textureDimensions_40c671();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_40c671();
+ prevent_dce = textureDimensions_40c671();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_40c671();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.dxc.hlsl
index 676bb14..1ebabb8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_40c671() {
+uint3 textureDimensions_40c671() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_40c671();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_40c671();
+ prevent_dce.Store3(0u, asuint(textureDimensions_40c671()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_40c671();
+ prevent_dce.Store3(0u, asuint(textureDimensions_40c671()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_40c671();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.fxc.hlsl
index 676bb14..1ebabb8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_40c671() {
+uint3 textureDimensions_40c671() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_40c671();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_40c671();
+ prevent_dce.Store3(0u, asuint(textureDimensions_40c671()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_40c671();
+ prevent_dce.Store3(0u, asuint(textureDimensions_40c671()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_40c671();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.glsl
index 80f9af7..0e3d094 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8i) uniform highp writeonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_40c671() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_40c671();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_40c671() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_40c671() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_40c671();
+ prevent_dce.inner = textureDimensions_40c671();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_40c671() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_40c671() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_40c671();
+ prevent_dce.inner = textureDimensions_40c671();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_40c671() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_40c671();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.msl
index de2c135..5d33559 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_40c671(texture3d<int, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_40c671(texture3d<int, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_40c671(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_40c671(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_40c671(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_40c671(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_40c671(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_40c671(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.spvasm
index 86a4c1e..90b2a20 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_40c671 "textureDimensions_40c671"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_40c671 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_40c671 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_40c671
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_40c671
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_40c671
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_40c671
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_40c671
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_40c671
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.wgsl
index 43e9284..3494c29 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40c671.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, write>;
-fn textureDimensions_40c671() {
+fn textureDimensions_40c671() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_40c671();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_40c671();
+ prevent_dce = textureDimensions_40c671();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_40c671();
+ prevent_dce = textureDimensions_40c671();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_40c671();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl
index dc1df71..5fda4a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r8unorm, read>;
// fn textureDimensions(texture: texture_storage_2d<r8unorm, read>) -> vec2<u32>
-fn textureDimensions_40da20() {
+fn textureDimensions_40da20() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_40da20();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_40da20();
+ prevent_dce = textureDimensions_40da20();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_40da20();
+ prevent_dce = textureDimensions_40da20();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_40da20();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.dxc.hlsl
index 4ec3a73..a3a8aab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_40da20() {
+uint2 textureDimensions_40da20() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_40da20();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_40da20();
+ prevent_dce.Store2(0u, asuint(textureDimensions_40da20()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_40da20();
+ prevent_dce.Store2(0u, asuint(textureDimensions_40da20()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_40da20();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.fxc.hlsl
index 4ec3a73..a3a8aab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_40da20() {
+uint2 textureDimensions_40da20() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_40da20();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_40da20();
+ prevent_dce.Store2(0u, asuint(textureDimensions_40da20()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_40da20();
+ prevent_dce.Store2(0u, asuint(textureDimensions_40da20()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_40da20();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.msl
index 8af0da9..60d00a7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_40da20(texture2d<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_40da20(texture2d<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_40da20(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_40da20(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_40da20(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_40da20(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_40da20(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_40da20(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.spvasm
index faf1d61..3daff3f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_40da20 "textureDimensions_40da20"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_40da20 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_40da20 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_40da20
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_40da20
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_40da20
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_40da20
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_40da20
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_40da20
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.wgsl
index 81140cb..c8d1b8a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40da20.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r8unorm, read>;
-fn textureDimensions_40da20() {
+fn textureDimensions_40da20() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_40da20();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_40da20();
+ prevent_dce = textureDimensions_40da20();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_40da20();
+ prevent_dce = textureDimensions_40da20();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_40da20();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl
index 15a663b..e58e2bc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16uint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16uint, write>) -> vec2<u32>
-fn textureDimensions_40ecf4() {
+fn textureDimensions_40ecf4() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_40ecf4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_40ecf4();
+ prevent_dce = textureDimensions_40ecf4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_40ecf4();
+ prevent_dce = textureDimensions_40ecf4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_40ecf4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.dxc.hlsl
index 0555e82..bdee881 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_40ecf4() {
+uint2 textureDimensions_40ecf4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_40ecf4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_40ecf4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_40ecf4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_40ecf4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_40ecf4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_40ecf4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.fxc.hlsl
index 0555e82..bdee881 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_40ecf4() {
+uint2 textureDimensions_40ecf4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_40ecf4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_40ecf4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_40ecf4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_40ecf4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_40ecf4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_40ecf4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.glsl
index c39a807..b23c546 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_40ecf4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_40ecf4();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_40ecf4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_40ecf4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_40ecf4();
+ prevent_dce.inner = textureDimensions_40ecf4();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_40ecf4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_40ecf4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_40ecf4();
+ prevent_dce.inner = textureDimensions_40ecf4();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_40ecf4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_40ecf4();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.msl
index 0c8d982..7028cd6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_40ecf4(texture2d_array<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_40ecf4(texture2d_array<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_40ecf4(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_40ecf4(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_40ecf4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_40ecf4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_40ecf4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_40ecf4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.spvasm
index f81134c..fa1fdf6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_40ecf4 "textureDimensions_40ecf4"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_40ecf4 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_40ecf4 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_40ecf4
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_40ecf4
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_40ecf4
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_40ecf4
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_40ecf4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_40ecf4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.wgsl
index f53f416..a978f80 100644
--- a/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/40ecf4.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, write>;
-fn textureDimensions_40ecf4() {
+fn textureDimensions_40ecf4() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_40ecf4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_40ecf4();
+ prevent_dce = textureDimensions_40ecf4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_40ecf4();
+ prevent_dce = textureDimensions_40ecf4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_40ecf4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl
index 10b296e..cd90a0a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32uint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<r32uint, write>) -> vec2<u32>
-fn textureDimensions_41545f() {
+fn textureDimensions_41545f() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_41545f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_41545f();
+ prevent_dce = textureDimensions_41545f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_41545f();
+ prevent_dce = textureDimensions_41545f();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_41545f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.dxc.hlsl
index 2795e32..70788c3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_41545f() {
+uint2 textureDimensions_41545f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_41545f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_41545f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_41545f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_41545f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_41545f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_41545f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.fxc.hlsl
index 2795e32..70788c3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_41545f() {
+uint2 textureDimensions_41545f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_41545f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_41545f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_41545f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_41545f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_41545f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_41545f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.glsl
index a90346a..5fd5518 100644
--- a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp writeonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_41545f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_41545f();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_41545f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_41545f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_41545f();
+ prevent_dce.inner = textureDimensions_41545f();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_41545f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_41545f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_41545f();
+ prevent_dce.inner = textureDimensions_41545f();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_41545f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_41545f();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.msl
index f4a8ece..e9255d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_41545f(texture2d_array<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_41545f(texture2d_array<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_41545f(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_41545f(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_41545f(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_41545f(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_41545f(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_41545f(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.spvasm
index 98e2b28..6467d2a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_41545f "textureDimensions_41545f"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_41545f = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_41545f = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_41545f
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_41545f
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_41545f
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_41545f
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_41545f
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_41545f
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.wgsl
index 9fff36d..5896f00 100644
--- a/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/41545f.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, write>;
-fn textureDimensions_41545f() {
+fn textureDimensions_41545f() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_41545f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_41545f();
+ prevent_dce = textureDimensions_41545f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_41545f();
+ prevent_dce = textureDimensions_41545f();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_41545f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl
index 1f749d8..0c1a24d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32uint, read>;
// fn textureDimensions(texture: texture_storage_3d<r32uint, read>) -> vec3<u32>
-fn textureDimensions_423519() {
+fn textureDimensions_423519() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_423519();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_423519();
+ prevent_dce = textureDimensions_423519();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_423519();
+ prevent_dce = textureDimensions_423519();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_423519();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.dxc.hlsl
index 33f722c..30206bc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_423519() {
+uint3 textureDimensions_423519() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_423519();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_423519();
+ prevent_dce.Store3(0u, asuint(textureDimensions_423519()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_423519();
+ prevent_dce.Store3(0u, asuint(textureDimensions_423519()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_423519();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.fxc.hlsl
index 33f722c..30206bc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_423519() {
+uint3 textureDimensions_423519() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_423519();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_423519();
+ prevent_dce.Store3(0u, asuint(textureDimensions_423519()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_423519();
+ prevent_dce.Store3(0u, asuint(textureDimensions_423519()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_423519();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.glsl
index 23ca388..2e5e30b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32ui) uniform highp readonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_423519() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_423519();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_423519() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_423519() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_423519();
+ prevent_dce.inner = textureDimensions_423519();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_423519() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_423519() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_423519();
+ prevent_dce.inner = textureDimensions_423519();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_423519() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_423519();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.msl
index a28ea80..006feca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_423519(texture3d<uint, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_423519(texture3d<uint, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_423519(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_423519(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_423519(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_423519(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_423519(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_423519(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.spvasm
index f6e3194..bcd8fc8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_423519 "textureDimensions_423519"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_423519 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_423519 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_423519
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_423519
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_423519
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_423519
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_423519
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_423519
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.wgsl
index 1a20323..e866326 100644
--- a/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/423519.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32uint, read>;
-fn textureDimensions_423519() {
+fn textureDimensions_423519() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_423519();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_423519();
+ prevent_dce = textureDimensions_423519();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_423519();
+ prevent_dce = textureDimensions_423519();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_423519();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl
index d1d67b3..93e4dad 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16uint, read_write>) -> vec2<u32>
-fn textureDimensions_427f92() {
+fn textureDimensions_427f92() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_427f92();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_427f92();
+ prevent_dce = textureDimensions_427f92();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_427f92();
+ prevent_dce = textureDimensions_427f92();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_427f92();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.dxc.hlsl
index e331af7..7025b2a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_427f92() {
+uint2 textureDimensions_427f92() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_427f92();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_427f92();
+ prevent_dce.Store2(0u, asuint(textureDimensions_427f92()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_427f92();
+ prevent_dce.Store2(0u, asuint(textureDimensions_427f92()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_427f92();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.fxc.hlsl
index e331af7..7025b2a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_427f92() {
+uint2 textureDimensions_427f92() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_427f92();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_427f92();
+ prevent_dce.Store2(0u, asuint(textureDimensions_427f92()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_427f92();
+ prevent_dce.Store2(0u, asuint(textureDimensions_427f92()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_427f92();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.glsl
index 6bab0e0..61aff2d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_427f92() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_427f92();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_427f92() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_427f92() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_427f92();
+ prevent_dce.inner = textureDimensions_427f92();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_427f92() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_427f92() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_427f92();
+ prevent_dce.inner = textureDimensions_427f92();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_427f92() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_427f92();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.msl
index 37b2bfd..8c5290d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_427f92(texture2d_array<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_427f92(texture2d_array<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_427f92(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_427f92(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_427f92(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_427f92(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_427f92(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_427f92(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.spvasm
index 251fb79..e9993ce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_427f92 "textureDimensions_427f92"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_427f92 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_427f92 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_427f92
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_427f92
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_427f92
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_427f92
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_427f92
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_427f92
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.wgsl
index c571ce3..3196bdc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/427f92.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read_write>;
-fn textureDimensions_427f92() {
+fn textureDimensions_427f92() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_427f92();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_427f92();
+ prevent_dce = textureDimensions_427f92();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_427f92();
+ prevent_dce = textureDimensions_427f92();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_427f92();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl
index c4826c0..58a827b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32sint, write>;
// fn textureDimensions(texture: texture_storage_2d<rg32sint, write>) -> vec2<u32>
-fn textureDimensions_439651() {
+fn textureDimensions_439651() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_439651();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_439651();
+ prevent_dce = textureDimensions_439651();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_439651();
+ prevent_dce = textureDimensions_439651();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_439651();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.dxc.hlsl
index 59d1ae0..02f0a02 100644
--- a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_439651() {
+uint2 textureDimensions_439651() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_439651();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_439651();
+ prevent_dce.Store2(0u, asuint(textureDimensions_439651()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_439651();
+ prevent_dce.Store2(0u, asuint(textureDimensions_439651()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_439651();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.fxc.hlsl
index 59d1ae0..02f0a02 100644
--- a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_439651() {
+uint2 textureDimensions_439651() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_439651();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_439651();
+ prevent_dce.Store2(0u, asuint(textureDimensions_439651()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_439651();
+ prevent_dce.Store2(0u, asuint(textureDimensions_439651()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_439651();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.msl
index e0f663e..ff4e678 100644
--- a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_439651(texture2d<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_439651(texture2d<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_439651(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_439651(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_439651(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_439651(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_439651(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_439651(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.spvasm
index 68957a9..c11d388 100644
--- a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,74 +21,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_439651 "textureDimensions_439651"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_439651 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_439651 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_439651
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_439651
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_439651
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_439651
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_439651
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_439651
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.wgsl
index 7711de7..cb65e4a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/439651.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, write>;
-fn textureDimensions_439651() {
+fn textureDimensions_439651() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_439651();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_439651();
+ prevent_dce = textureDimensions_439651();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_439651();
+ prevent_dce = textureDimensions_439651();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_439651();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl
index 964fe37..2ccc63e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_2d_array<u32>;
// fn textureDimensions(texture: texture_2d_array<u32>) -> vec2<u32>
-fn textureDimensions_445376() {
+fn textureDimensions_445376() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_445376();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_445376();
+ prevent_dce = textureDimensions_445376();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_445376();
+ prevent_dce = textureDimensions_445376();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_445376();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.dxc.hlsl
index e0f80bf..d7cd926 100644
--- a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_445376() {
+uint2 textureDimensions_445376() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_445376();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_445376();
+ prevent_dce.Store2(0u, asuint(textureDimensions_445376()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_445376();
+ prevent_dce.Store2(0u, asuint(textureDimensions_445376()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_445376();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.fxc.hlsl
index e0f80bf..d7cd926 100644
--- a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_445376() {
+uint2 textureDimensions_445376() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_445376();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_445376();
+ prevent_dce.Store2(0u, asuint(textureDimensions_445376()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_445376();
+ prevent_dce.Store2(0u, asuint(textureDimensions_445376()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_445376();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.glsl
index 9302940..888383d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp usampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_445376() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_445376();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_445376() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_445376() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_445376();
+ prevent_dce.inner = textureDimensions_445376();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_445376() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_445376() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_445376();
+ prevent_dce.inner = textureDimensions_445376();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_445376() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_445376();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.msl
index 959df4d..91d9ae2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_445376(texture2d_array<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_445376(texture2d_array<uint, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_445376(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_445376(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_445376(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_445376(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_445376(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_445376(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.spvasm
index 2b24cf5..3fe653f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_445376 "textureDimensions_445376"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %29 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %32 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %34 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %44 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %50 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_445376 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %29
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v3uint %24 %int_0
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %32 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %33 = OpLoad %v2uint %res
- OpStore %32 %33
+%textureDimensions_445376 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v3uint %26 %int_0
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %31 = OpLoad %v2uint %res
+ OpReturnValue %31
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %32
+ %35 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_445376
+ OpStore %38 %39
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
- %36 = OpLabel
- %37 = OpFunctionCall %void %textureDimensions_445376
- OpReturnValue %5
+%compute_main = OpFunction %void None %32
+ %41 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_445376
+ OpStore %42 %43
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %40
+%vertex_main_inner = OpFunction %VertexOutput None %44
+ %47 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %50
+ %52 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %52 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_445376
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %32
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_445376
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_445376
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.wgsl
index f26606e..bc19315 100644
--- a/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/445376.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<u32>;
-fn textureDimensions_445376() {
+fn textureDimensions_445376() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_445376();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_445376();
+ prevent_dce = textureDimensions_445376();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_445376();
+ prevent_dce = textureDimensions_445376();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_445376();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl
index 5b8b776..ade9410 100644
--- a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32uint, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba32uint, write>) -> vec3<u32>
-fn textureDimensions_44b358() {
+fn textureDimensions_44b358() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_44b358();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_44b358();
+ prevent_dce = textureDimensions_44b358();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_44b358();
+ prevent_dce = textureDimensions_44b358();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_44b358();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.dxc.hlsl
index ca67752..1554ce8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_44b358() {
+uint3 textureDimensions_44b358() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_44b358();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_44b358();
+ prevent_dce.Store3(0u, asuint(textureDimensions_44b358()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_44b358();
+ prevent_dce.Store3(0u, asuint(textureDimensions_44b358()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_44b358();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.fxc.hlsl
index ca67752..1554ce8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_44b358() {
+uint3 textureDimensions_44b358() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_44b358();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_44b358();
+ prevent_dce.Store3(0u, asuint(textureDimensions_44b358()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_44b358();
+ prevent_dce.Store3(0u, asuint(textureDimensions_44b358()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_44b358();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.glsl
index 353f0f5..d4226d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32ui) uniform highp writeonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_44b358() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_44b358();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_44b358() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_44b358() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_44b358();
+ prevent_dce.inner = textureDimensions_44b358();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_44b358() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_44b358() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_44b358();
+ prevent_dce.inner = textureDimensions_44b358();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_44b358() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_44b358();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.msl
index ea4c716..4561316 100644
--- a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_44b358(texture3d<uint, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_44b358(texture3d<uint, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_44b358(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_44b358(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_44b358(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_44b358(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_44b358(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_44b358(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.spvasm
index 0f50a8e..fa85a56 100644
--- a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_44b358 "textureDimensions_44b358"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_44b358 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_44b358 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_44b358
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_44b358
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_44b358
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_44b358
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_44b358
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_44b358
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.wgsl
index 1e9d5da..2f1476c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/44b358.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, write>;
-fn textureDimensions_44b358() {
+fn textureDimensions_44b358() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_44b358();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_44b358();
+ prevent_dce = textureDimensions_44b358();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_44b358();
+ prevent_dce = textureDimensions_44b358();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_44b358();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl
index db9f7ec..1c81769 100644
--- a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32uint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32uint, write>) -> vec2<u32>
-fn textureDimensions_452fc1() {
+fn textureDimensions_452fc1() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_452fc1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_452fc1();
+ prevent_dce = textureDimensions_452fc1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_452fc1();
+ prevent_dce = textureDimensions_452fc1();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_452fc1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.dxc.hlsl
index e91ca0b..1ee752a5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_452fc1() {
+uint2 textureDimensions_452fc1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_452fc1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_452fc1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_452fc1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_452fc1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_452fc1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_452fc1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.fxc.hlsl
index e91ca0b..1ee752a5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_452fc1() {
+uint2 textureDimensions_452fc1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_452fc1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_452fc1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_452fc1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_452fc1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_452fc1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_452fc1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.glsl
index 78f2119..161b50c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_452fc1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_452fc1();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_452fc1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_452fc1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_452fc1();
+ prevent_dce.inner = textureDimensions_452fc1();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_452fc1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_452fc1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_452fc1();
+ prevent_dce.inner = textureDimensions_452fc1();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_452fc1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_452fc1();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.msl
index 5497059..209976a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_452fc1(texture2d_array<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_452fc1(texture2d_array<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_452fc1(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_452fc1(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_452fc1(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_452fc1(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_452fc1(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_452fc1(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.spvasm
index 9f35db0..7bd0107 100644
--- a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_452fc1 "textureDimensions_452fc1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_452fc1 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_452fc1 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_452fc1
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_452fc1
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_452fc1
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_452fc1
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_452fc1
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_452fc1
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.wgsl
index a110af1..7927f34 100644
--- a/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/452fc1.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, write>;
-fn textureDimensions_452fc1() {
+fn textureDimensions_452fc1() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_452fc1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_452fc1();
+ prevent_dce = textureDimensions_452fc1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_452fc1();
+ prevent_dce = textureDimensions_452fc1();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_452fc1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl
index 7aa595d..2e7cc17 100644
--- a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_2d_array<f32>;
// fn textureDimensions(texture: texture_2d_array<f32>) -> vec2<u32>
-fn textureDimensions_46f0fc() {
+fn textureDimensions_46f0fc() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_46f0fc();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_46f0fc();
+ prevent_dce = textureDimensions_46f0fc();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_46f0fc();
+ prevent_dce = textureDimensions_46f0fc();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_46f0fc();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.dxc.hlsl
index 243ca3c..474b153 100644
--- a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_46f0fc() {
+uint2 textureDimensions_46f0fc() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_46f0fc();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_46f0fc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_46f0fc()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_46f0fc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_46f0fc()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_46f0fc();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.fxc.hlsl
index 243ca3c..474b153 100644
--- a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_46f0fc() {
+uint2 textureDimensions_46f0fc() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_46f0fc();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_46f0fc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_46f0fc()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_46f0fc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_46f0fc()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_46f0fc();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.glsl
index 312eda4..12fa9fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp sampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_46f0fc() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_46f0fc();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_46f0fc() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_46f0fc() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_46f0fc();
+ prevent_dce.inner = textureDimensions_46f0fc();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_46f0fc() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_46f0fc() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_46f0fc();
+ prevent_dce.inner = textureDimensions_46f0fc();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_46f0fc() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_46f0fc();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.msl
index 30095ed..4ceea09 100644
--- a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_46f0fc(texture2d_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_46f0fc(texture2d_array<float, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_46f0fc(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_46f0fc(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_46f0fc(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_46f0fc(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_46f0fc(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_46f0fc(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.spvasm
index d57b8aa..ea0d0ae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_46f0fc "textureDimensions_46f0fc"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %29 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %32 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %34 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %44 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %50 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_46f0fc = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %29
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v3uint %24 %int_0
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %32 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %33 = OpLoad %v2uint %res
- OpStore %32 %33
+%textureDimensions_46f0fc = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v3uint %26 %int_0
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %31 = OpLoad %v2uint %res
+ OpReturnValue %31
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %32
+ %35 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_46f0fc
+ OpStore %38 %39
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
- %36 = OpLabel
- %37 = OpFunctionCall %void %textureDimensions_46f0fc
- OpReturnValue %5
+%compute_main = OpFunction %void None %32
+ %41 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_46f0fc
+ OpStore %42 %43
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %40
+%vertex_main_inner = OpFunction %VertexOutput None %44
+ %47 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %50
+ %52 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %52 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_46f0fc
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %32
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_46f0fc
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_46f0fc
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.wgsl
index 2339095..223b755 100644
--- a/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/46f0fc.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<f32>;
-fn textureDimensions_46f0fc() {
+fn textureDimensions_46f0fc() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_46f0fc();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_46f0fc();
+ prevent_dce = textureDimensions_46f0fc();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_46f0fc();
+ prevent_dce = textureDimensions_46f0fc();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_46f0fc();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl
index 25b8eb0..a94111d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8sint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8sint, read>) -> vec2<u32>
-fn textureDimensions_4716a4() {
+fn textureDimensions_4716a4() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4716a4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4716a4();
+ prevent_dce = textureDimensions_4716a4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4716a4();
+ prevent_dce = textureDimensions_4716a4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4716a4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.dxc.hlsl
index 6c4d88f..70cd007 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4716a4() {
+uint2 textureDimensions_4716a4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4716a4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4716a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4716a4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4716a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4716a4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4716a4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.fxc.hlsl
index 6c4d88f..70cd007 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4716a4() {
+uint2 textureDimensions_4716a4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4716a4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4716a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4716a4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4716a4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4716a4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4716a4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.glsl
index d58c309..2225337 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp readonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_4716a4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_4716a4();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_4716a4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_4716a4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_4716a4();
+ prevent_dce.inner = textureDimensions_4716a4();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_4716a4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_4716a4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_4716a4();
+ prevent_dce.inner = textureDimensions_4716a4();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_4716a4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_4716a4();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.msl
index 0a98d5e..536840e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_4716a4(texture2d_array<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_4716a4(texture2d_array<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_4716a4(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_4716a4(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_4716a4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_4716a4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_4716a4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_4716a4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.spvasm
index 1a98972..cdff3ea 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_4716a4 "textureDimensions_4716a4"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_4716a4 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_4716a4 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_4716a4
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_4716a4
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_4716a4
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_4716a4
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_4716a4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_4716a4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.wgsl
index f73cf6c..5401350 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4716a4.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read>;
-fn textureDimensions_4716a4() {
+fn textureDimensions_4716a4() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4716a4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4716a4();
+ prevent_dce = textureDimensions_4716a4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4716a4();
+ prevent_dce = textureDimensions_4716a4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4716a4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl
index 6bad687..da07b93 100644
--- a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8uint, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba8uint, read>) -> vec3<u32>
-fn textureDimensions_475c10() {
+fn textureDimensions_475c10() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_475c10();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_475c10();
+ prevent_dce = textureDimensions_475c10();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_475c10();
+ prevent_dce = textureDimensions_475c10();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_475c10();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.dxc.hlsl
index ee5ff54..027d6e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_475c10() {
+uint3 textureDimensions_475c10() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_475c10();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_475c10();
+ prevent_dce.Store3(0u, asuint(textureDimensions_475c10()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_475c10();
+ prevent_dce.Store3(0u, asuint(textureDimensions_475c10()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_475c10();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.fxc.hlsl
index ee5ff54..027d6e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_475c10() {
+uint3 textureDimensions_475c10() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_475c10();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_475c10();
+ prevent_dce.Store3(0u, asuint(textureDimensions_475c10()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_475c10();
+ prevent_dce.Store3(0u, asuint(textureDimensions_475c10()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_475c10();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.glsl
index 2e72f7d..16718d4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8ui) uniform highp readonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_475c10() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_475c10();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_475c10() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_475c10() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_475c10();
+ prevent_dce.inner = textureDimensions_475c10();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_475c10() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_475c10() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_475c10();
+ prevent_dce.inner = textureDimensions_475c10();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_475c10() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_475c10();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.msl
index 7a31e1f..99024ac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_475c10(texture3d<uint, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_475c10(texture3d<uint, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_475c10(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_475c10(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_475c10(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_475c10(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_475c10(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_475c10(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.spvasm
index 2f43f51..b683a9b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_475c10 "textureDimensions_475c10"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_475c10 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_475c10 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_475c10
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_475c10
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_475c10
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_475c10
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_475c10
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_475c10
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.wgsl
index c8bb475..54e8ff8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/475c10.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read>;
-fn textureDimensions_475c10() {
+fn textureDimensions_475c10() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_475c10();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_475c10();
+ prevent_dce = textureDimensions_475c10();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_475c10();
+ prevent_dce = textureDimensions_475c10();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_475c10();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl
index 36c9110..bb1fd65 100644
--- a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube<f32>;
// fn textureDimensions(texture: texture_cube<f32>, level: i32) -> vec2<u32>
-fn textureDimensions_49a067() {
+fn textureDimensions_49a067() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_49a067();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_49a067();
+ prevent_dce = textureDimensions_49a067();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_49a067();
+ prevent_dce = textureDimensions_49a067();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_49a067();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.dxc.hlsl
index eb1dfc3..72b13f8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_49a067() {
+uint2 textureDimensions_49a067() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_49a067();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_49a067();
+ prevent_dce.Store2(0u, asuint(textureDimensions_49a067()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_49a067();
+ prevent_dce.Store2(0u, asuint(textureDimensions_49a067()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_49a067();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.fxc.hlsl
index eb1dfc3..72b13f8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_49a067() {
+uint2 textureDimensions_49a067() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_49a067();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_49a067();
+ prevent_dce.Store2(0u, asuint(textureDimensions_49a067()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_49a067();
+ prevent_dce.Store2(0u, asuint(textureDimensions_49a067()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_49a067();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.glsl
index 9490b68..14db5e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp samplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_49a067() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_49a067();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_49a067() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_49a067() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_49a067();
+ prevent_dce.inner = textureDimensions_49a067();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_49a067() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_49a067() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_49a067();
+ prevent_dce.inner = textureDimensions_49a067();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_49a067() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_49a067();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.msl
index 08359d8..7111eae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_49a067(texturecube<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_49a067(texturecube<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_49a067(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_49a067(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_49a067(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_49a067(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_49a067(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_49a067(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.spvasm
index f8cf3e4..e5b8406 100644
--- a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_49a067 "textureDimensions_49a067"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_49a067 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_49a067 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_49a067
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_49a067
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_49a067
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_49a067
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_49a067
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_49a067
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.wgsl
index d91f7f4..7daf64e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/49a067.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube<f32>;
-fn textureDimensions_49a067() {
+fn textureDimensions_49a067() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_49a067();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_49a067();
+ prevent_dce = textureDimensions_49a067();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_49a067();
+ prevent_dce = textureDimensions_49a067();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_49a067();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl
index 5e4e12f..026bfa8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32float, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32float, write>) -> vec2<u32>
-fn textureDimensions_4acec7() {
+fn textureDimensions_4acec7() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4acec7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4acec7();
+ prevent_dce = textureDimensions_4acec7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4acec7();
+ prevent_dce = textureDimensions_4acec7();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4acec7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.dxc.hlsl
index 35c91c8..4214b5e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4acec7() {
+uint2 textureDimensions_4acec7() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4acec7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4acec7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4acec7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4acec7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4acec7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4acec7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.fxc.hlsl
index 35c91c8..4214b5e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4acec7() {
+uint2 textureDimensions_4acec7() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4acec7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4acec7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4acec7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4acec7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4acec7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4acec7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.msl
index 04b59fd..22df118 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_4acec7(texture2d_array<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_4acec7(texture2d_array<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_4acec7(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_4acec7(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_4acec7(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_4acec7(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_4acec7(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_4acec7(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.spvasm
index 8b93b99..133d740 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,75 +21,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_4acec7 "textureDimensions_4acec7"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_4acec7 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_4acec7 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_4acec7
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_4acec7
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_4acec7
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_4acec7
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_4acec7
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_4acec7
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.wgsl
index 1df8546..d861528 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4acec7.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, write>;
-fn textureDimensions_4acec7() {
+fn textureDimensions_4acec7() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4acec7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4acec7();
+ prevent_dce = textureDimensions_4acec7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4acec7();
+ prevent_dce = textureDimensions_4acec7();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4acec7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl
index 4d76eeb..d7b47e2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8unorm, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba8unorm, write>) -> vec3<u32>
-fn textureDimensions_4b26ef() {
+fn textureDimensions_4b26ef() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4b26ef();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4b26ef();
+ prevent_dce = textureDimensions_4b26ef();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4b26ef();
+ prevent_dce = textureDimensions_4b26ef();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4b26ef();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.dxc.hlsl
index 2c3f265..2616344 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4b26ef() {
+uint3 textureDimensions_4b26ef() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4b26ef();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4b26ef();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4b26ef()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4b26ef();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4b26ef()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4b26ef();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.fxc.hlsl
index 2c3f265..2616344 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4b26ef() {
+uint3 textureDimensions_4b26ef() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4b26ef();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4b26ef();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4b26ef()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4b26ef();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4b26ef()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4b26ef();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.glsl
index f7ddb61..8151cfc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_4b26ef() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_4b26ef();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_4b26ef() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_4b26ef() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_4b26ef();
+ prevent_dce.inner = textureDimensions_4b26ef();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_4b26ef() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_4b26ef() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_4b26ef();
+ prevent_dce.inner = textureDimensions_4b26ef();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_4b26ef() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_4b26ef();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.msl
index d7ba783..ffd1e13 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_4b26ef(texture3d<float, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_4b26ef(texture3d<float, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_4b26ef(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_4b26ef(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_4b26ef(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_4b26ef(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_4b26ef(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_4b26ef(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.spvasm
index 849045a..2044be2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_4b26ef "textureDimensions_4b26ef"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_4b26ef = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_4b26ef = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_4b26ef
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_4b26ef
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_4b26ef
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_4b26ef
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_4b26ef
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_4b26ef
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.wgsl
index edcea5d..deff631 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4b26ef.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, write>;
-fn textureDimensions_4b26ef() {
+fn textureDimensions_4b26ef() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4b26ef();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4b26ef();
+ prevent_dce = textureDimensions_4b26ef();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4b26ef();
+ prevent_dce = textureDimensions_4b26ef();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4b26ef();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl
index 4672325..1ffd4d7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_2d<u32>;
// fn textureDimensions(texture: texture_2d<u32>) -> vec2<u32>
-fn textureDimensions_4be71b() {
+fn textureDimensions_4be71b() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4be71b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4be71b();
+ prevent_dce = textureDimensions_4be71b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4be71b();
+ prevent_dce = textureDimensions_4be71b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4be71b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.dxc.hlsl
index ce5b12b..646604a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4be71b() {
+uint2 textureDimensions_4be71b() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4be71b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4be71b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4be71b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4be71b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4be71b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4be71b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.fxc.hlsl
index ce5b12b..646604a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4be71b() {
+uint2 textureDimensions_4be71b() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4be71b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4be71b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4be71b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4be71b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4be71b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4be71b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.glsl
index b005654..c1f962a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp usampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_4be71b() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_4be71b();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_4be71b() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_4be71b() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_4be71b();
+ prevent_dce.inner = textureDimensions_4be71b();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_4be71b() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_4be71b() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_4be71b();
+ prevent_dce.inner = textureDimensions_4be71b();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_4be71b() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_4be71b();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.msl
index 96a9ea1..6002508 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_4be71b(texture2d<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_4be71b(texture2d<uint, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_4be71b(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_4be71b(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_4be71b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_4be71b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_4be71b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_4be71b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.spvasm
index dbfc315..dde943c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_4be71b "textureDimensions_4be71b"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_4be71b = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %v2uint %22 %int_0
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_4be71b = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySizeLod %v2uint %24 %int_0
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_4be71b
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_4be71b
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_4be71b
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_4be71b
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_4be71b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_4be71b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.wgsl
index 8782231..eff8954 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4be71b.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_2d<u32>;
-fn textureDimensions_4be71b() {
+fn textureDimensions_4be71b() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4be71b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4be71b();
+ prevent_dce = textureDimensions_4be71b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4be71b();
+ prevent_dce = textureDimensions_4be71b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4be71b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl
index 64c54fe..8e7aea4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32uint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32uint, read>) -> vec2<u32>
-fn textureDimensions_4d1f71() {
+fn textureDimensions_4d1f71() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4d1f71();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4d1f71();
+ prevent_dce = textureDimensions_4d1f71();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4d1f71();
+ prevent_dce = textureDimensions_4d1f71();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4d1f71();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.dxc.hlsl
index f761810..06b23e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4d1f71() {
+uint2 textureDimensions_4d1f71() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4d1f71();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4d1f71();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4d1f71()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4d1f71();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4d1f71()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4d1f71();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.fxc.hlsl
index f761810..06b23e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4d1f71() {
+uint2 textureDimensions_4d1f71() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4d1f71();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4d1f71();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4d1f71()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4d1f71();
+ prevent_dce.Store2(0u, asuint(textureDimensions_4d1f71()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4d1f71();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.msl
index 1435bac..56d21d0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_4d1f71(texture2d_array<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_4d1f71(texture2d_array<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_4d1f71(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_4d1f71(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_4d1f71(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_4d1f71(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_4d1f71(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_4d1f71(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.spvasm
index f50210f..d4c58c7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,75 +21,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_4d1f71 "textureDimensions_4d1f71"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_4d1f71 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_4d1f71 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_4d1f71
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_4d1f71
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_4d1f71
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_4d1f71
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_4d1f71
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_4d1f71
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.wgsl
index 7ebe9d9..f108089 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d1f71.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read>;
-fn textureDimensions_4d1f71() {
+fn textureDimensions_4d1f71() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4d1f71();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4d1f71();
+ prevent_dce = textureDimensions_4d1f71();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4d1f71();
+ prevent_dce = textureDimensions_4d1f71();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4d1f71();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl
index b61bec8..35ba76c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32sint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<r32sint, read_write>) -> vec3<u32>
-fn textureDimensions_4d27b3() {
+fn textureDimensions_4d27b3() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4d27b3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4d27b3();
+ prevent_dce = textureDimensions_4d27b3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4d27b3();
+ prevent_dce = textureDimensions_4d27b3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4d27b3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.dxc.hlsl
index a972f32..4c85d86 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4d27b3() {
+uint3 textureDimensions_4d27b3() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4d27b3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4d27b3();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4d27b3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4d27b3();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4d27b3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4d27b3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.fxc.hlsl
index a972f32..4c85d86 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4d27b3() {
+uint3 textureDimensions_4d27b3() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4d27b3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4d27b3();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4d27b3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4d27b3();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4d27b3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4d27b3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.glsl
index c2cdce2..339f679 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32i) uniform highp iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_4d27b3() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_4d27b3();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp iimage3D arg_0;
+uvec3 textureDimensions_4d27b3() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_4d27b3() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_4d27b3();
+ prevent_dce.inner = textureDimensions_4d27b3();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32i) uniform highp iimage3D arg_0;
+uvec3 textureDimensions_4d27b3() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_4d27b3() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_4d27b3();
+ prevent_dce.inner = textureDimensions_4d27b3();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32i) uniform highp iimage3D arg_0;
+uvec3 textureDimensions_4d27b3() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_4d27b3();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.msl
index 063848f..2f8f47a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_4d27b3(texture3d<int, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_4d27b3(texture3d<int, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_4d27b3(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_4d27b3(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_4d27b3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_4d27b3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_4d27b3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_4d27b3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.spvasm
index 74d6c63..87f507c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_4d27b3 "textureDimensions_4d27b3"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_4d27b3 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_4d27b3 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_4d27b3
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_4d27b3
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_4d27b3
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_4d27b3
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_4d27b3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_4d27b3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.wgsl
index d85c7c5..0cb11b8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4d27b3.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read_write>;
-fn textureDimensions_4d27b3() {
+fn textureDimensions_4d27b3() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4d27b3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4d27b3();
+ prevent_dce = textureDimensions_4d27b3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4d27b3();
+ prevent_dce = textureDimensions_4d27b3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4d27b3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl
index 9dcdfb3..103b4db 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32uint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rg32uint, read_write>) -> vec3<u32>
-fn textureDimensions_4df14c() {
+fn textureDimensions_4df14c() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4df14c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4df14c();
+ prevent_dce = textureDimensions_4df14c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4df14c();
+ prevent_dce = textureDimensions_4df14c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4df14c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.dxc.hlsl
index 423213a..89d85bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4df14c() {
+uint3 textureDimensions_4df14c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4df14c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4df14c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4df14c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4df14c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4df14c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4df14c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.fxc.hlsl
index 423213a..89d85bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4df14c() {
+uint3 textureDimensions_4df14c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4df14c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4df14c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4df14c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4df14c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_4df14c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4df14c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.msl
index 91ca234..faaf826 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_4df14c(texture3d<uint, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_4df14c(texture3d<uint, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_4df14c(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_4df14c(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_4df14c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_4df14c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_4df14c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_4df14c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.spvasm
index 4b3baf3..505d465 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_4df14c "textureDimensions_4df14c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_4df14c = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_4df14c = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_4df14c
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_4df14c
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_4df14c
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_4df14c
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_4df14c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_4df14c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.wgsl
index 410a6d0..0b9b4ff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4df14c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read_write>;
-fn textureDimensions_4df14c() {
+fn textureDimensions_4df14c() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4df14c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_4df14c();
+ prevent_dce = textureDimensions_4df14c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4df14c();
+ prevent_dce = textureDimensions_4df14c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4df14c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl
index 3175a30..ce2ef12 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32sint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<r32sint, read_write>) -> u32
-fn textureDimensions_4e540a() {
+fn textureDimensions_4e540a() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4e540a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_4e540a();
+ prevent_dce = textureDimensions_4e540a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4e540a();
+ prevent_dce = textureDimensions_4e540a();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4e540a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.dxc.hlsl
index d1db1ad..3706280 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4e540a() {
+uint textureDimensions_4e540a() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4e540a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4e540a();
+ prevent_dce.Store(0u, asuint(textureDimensions_4e540a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4e540a();
+ prevent_dce.Store(0u, asuint(textureDimensions_4e540a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4e540a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.fxc.hlsl
index d1db1ad..3706280 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_4e540a() {
+uint textureDimensions_4e540a() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_4e540a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_4e540a();
+ prevent_dce.Store(0u, asuint(textureDimensions_4e540a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_4e540a();
+ prevent_dce.Store(0u, asuint(textureDimensions_4e540a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_4e540a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.glsl
index 0b996e1..e79ee6f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_4e540a() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_4e540a();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp iimage2D arg_0;
+uint textureDimensions_4e540a() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_4e540a() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_4e540a();
+ prevent_dce.inner = textureDimensions_4e540a();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp iimage2D arg_0;
+uint textureDimensions_4e540a() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_4e540a() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_4e540a();
+ prevent_dce.inner = textureDimensions_4e540a();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32i) uniform highp iimage2D arg_0;
+uint textureDimensions_4e540a() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_4e540a();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.msl
index 336d3fc..e924de4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_4e540a(texture1d<int, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_4e540a(texture1d<int, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_4e540a(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_4e540a(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_4e540a(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_4e540a(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_4e540a(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_4e540a(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.spvasm
index 173b1c1..036ca90 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_4e540a "textureDimensions_4e540a"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_4e540a = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_4e540a = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_4e540a
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_4e540a
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_4e540a
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_4e540a
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_4e540a
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_4e540a
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.wgsl
index 7a24ea6..fae0598 100644
--- a/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/4e540a.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read_write>;
-fn textureDimensions_4e540a() {
+fn textureDimensions_4e540a() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_4e540a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_4e540a();
+ prevent_dce = textureDimensions_4e540a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_4e540a();
+ prevent_dce = textureDimensions_4e540a();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_4e540a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl
index bb46775..c4aa7ee 100644
--- a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d_array<u32>;
// fn textureDimensions(texture: texture_2d_array<u32>, level: u32) -> vec2<u32>
-fn textureDimensions_528c0e() {
+fn textureDimensions_528c0e() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_528c0e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_528c0e();
+ prevent_dce = textureDimensions_528c0e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_528c0e();
+ prevent_dce = textureDimensions_528c0e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_528c0e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.dxc.hlsl
index 3dd90fe..8aa6ee1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_528c0e() {
+uint2 textureDimensions_528c0e() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_528c0e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_528c0e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_528c0e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_528c0e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_528c0e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_528c0e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.fxc.hlsl
index 3dd90fe..8aa6ee1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_528c0e() {
+uint2 textureDimensions_528c0e() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_528c0e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_528c0e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_528c0e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_528c0e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_528c0e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_528c0e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.glsl
index 4d9461e..d5a5917 100644
--- a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_528c0e() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_528c0e();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_528c0e() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_528c0e() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_528c0e();
+ prevent_dce.inner = textureDimensions_528c0e();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_528c0e() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_528c0e() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_528c0e();
+ prevent_dce.inner = textureDimensions_528c0e();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_528c0e() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_528c0e();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.msl
index 6abd565..21a730a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_528c0e(texture2d_array<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_528c0e(texture2d_array<uint, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_528c0e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_528c0e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_528c0e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_528c0e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_528c0e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_528c0e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.spvasm
index 26a7efd..7546a25 100644
--- a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 51
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,80 +21,106 @@
OpName %textureDimensions_528c0e "textureDimensions_528c0e"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %32 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %35 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %37 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %47 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %53 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_528c0e = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %32
+%textureDimensions_528c0e = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %28 = OpLoad %11 %arg_0
- %29 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v3uint %28 %29
- %25 = OpVectorShuffle %v2uint %26 %26 0 1
- OpStore %res %25
- %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %36 = OpLoad %v2uint %res
- OpStore %35 %36
+ %30 = OpLoad %16 %arg_0
+ %31 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %30 %31
+ %27 = OpVectorShuffle %v2uint %28 %28 0 1
+ OpStore %res %27
+ %34 = OpLoad %v2uint %res
+ OpReturnValue %34
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %35
+ %38 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_528c0e
+ OpStore %41 %42
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %37
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_528c0e
- OpReturnValue %5
+%compute_main = OpFunction %void None %35
+ %44 = OpLabel
+ %45 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %46 = OpFunctionCall %v2uint %textureDimensions_528c0e
+ OpStore %45 %46
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %43
+%vertex_main_inner = OpFunction %VertexOutput None %47
+ %50 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %53
+ %55 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %55 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_528c0e
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %35
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_528c0e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %49 = OpLabel
- %50 = OpFunctionCall %void %textureDimensions_528c0e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.wgsl
index 4ee81ff..77f8142 100644
--- a/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/528c0e.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<u32>;
-fn textureDimensions_528c0e() {
+fn textureDimensions_528c0e() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_528c0e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_528c0e();
+ prevent_dce = textureDimensions_528c0e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_528c0e();
+ prevent_dce = textureDimensions_528c0e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_528c0e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl
index 3d3af17..18d151c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32float, read>;
// fn textureDimensions(texture: texture_storage_2d<rg32float, read>) -> vec2<u32>
-fn textureDimensions_52cf60() {
+fn textureDimensions_52cf60() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_52cf60();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_52cf60();
+ prevent_dce = textureDimensions_52cf60();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_52cf60();
+ prevent_dce = textureDimensions_52cf60();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_52cf60();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.dxc.hlsl
index 287ab49..6c9bcd1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_52cf60() {
+uint2 textureDimensions_52cf60() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_52cf60();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_52cf60();
+ prevent_dce.Store2(0u, asuint(textureDimensions_52cf60()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_52cf60();
+ prevent_dce.Store2(0u, asuint(textureDimensions_52cf60()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_52cf60();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.fxc.hlsl
index 287ab49..6c9bcd1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_52cf60() {
+uint2 textureDimensions_52cf60() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_52cf60();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_52cf60();
+ prevent_dce.Store2(0u, asuint(textureDimensions_52cf60()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_52cf60();
+ prevent_dce.Store2(0u, asuint(textureDimensions_52cf60()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_52cf60();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.msl
index 51f8561..199d347 100644
--- a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_52cf60(texture2d<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_52cf60(texture2d<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_52cf60(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_52cf60(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_52cf60(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_52cf60(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_52cf60(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_52cf60(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.spvasm
index 2b767b0..37b12d3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_52cf60 "textureDimensions_52cf60"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_52cf60 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_52cf60 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_52cf60
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_52cf60
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_52cf60
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_52cf60
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_52cf60
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_52cf60
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.wgsl
index 4801163..f52f6f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/52cf60.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read>;
-fn textureDimensions_52cf60() {
+fn textureDimensions_52cf60() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_52cf60();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_52cf60();
+ prevent_dce = textureDimensions_52cf60();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_52cf60();
+ prevent_dce = textureDimensions_52cf60();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_52cf60();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl
index e31153b..f6356b2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8sint, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba8sint, read>) -> vec2<u32>
-fn textureDimensions_534ef8() {
+fn textureDimensions_534ef8() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_534ef8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_534ef8();
+ prevent_dce = textureDimensions_534ef8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_534ef8();
+ prevent_dce = textureDimensions_534ef8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_534ef8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.dxc.hlsl
index 0e8dc34..fbdaf14 100644
--- a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_534ef8() {
+uint2 textureDimensions_534ef8() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_534ef8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_534ef8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_534ef8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_534ef8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_534ef8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_534ef8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.fxc.hlsl
index 0e8dc34..fbdaf14 100644
--- a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_534ef8() {
+uint2 textureDimensions_534ef8() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_534ef8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_534ef8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_534ef8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_534ef8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_534ef8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_534ef8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.glsl
index fb3465d..8aad6f8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp readonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_534ef8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_534ef8();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_534ef8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_534ef8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_534ef8();
+ prevent_dce.inner = textureDimensions_534ef8();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_534ef8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_534ef8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_534ef8();
+ prevent_dce.inner = textureDimensions_534ef8();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_534ef8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_534ef8();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.msl
index 13796d6..f72d92a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_534ef8(texture2d<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_534ef8(texture2d<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_534ef8(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_534ef8(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_534ef8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_534ef8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_534ef8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_534ef8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.spvasm
index 8c1e536..3b90040 100644
--- a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_534ef8 "textureDimensions_534ef8"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_534ef8 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_534ef8 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_534ef8
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_534ef8
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_534ef8
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_534ef8
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_534ef8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_534ef8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.wgsl
index 0a8a385..e4ea83c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/534ef8.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read>;
-fn textureDimensions_534ef8() {
+fn textureDimensions_534ef8() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_534ef8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_534ef8();
+ prevent_dce = textureDimensions_534ef8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_534ef8();
+ prevent_dce = textureDimensions_534ef8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_534ef8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl
index 83438e3..a8f6aff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r8unorm, write>;
// fn textureDimensions(texture: texture_storage_1d<r8unorm, write>) -> u32
-fn textureDimensions_542c62() {
+fn textureDimensions_542c62() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_542c62();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_542c62();
+ prevent_dce = textureDimensions_542c62();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_542c62();
+ prevent_dce = textureDimensions_542c62();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_542c62();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.dxc.hlsl
index 162de9b..f235ef2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_542c62() {
+uint textureDimensions_542c62() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_542c62();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_542c62();
+ prevent_dce.Store(0u, asuint(textureDimensions_542c62()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_542c62();
+ prevent_dce.Store(0u, asuint(textureDimensions_542c62()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_542c62();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.fxc.hlsl
index 162de9b..f235ef2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_542c62() {
+uint textureDimensions_542c62() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_542c62();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_542c62();
+ prevent_dce.Store(0u, asuint(textureDimensions_542c62()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_542c62();
+ prevent_dce.Store(0u, asuint(textureDimensions_542c62()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_542c62();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.msl
index c21ad73..dcd435b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_542c62(texture1d<float, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_542c62(texture1d<float, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_542c62(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_542c62(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_542c62(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_542c62(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_542c62(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_542c62(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.spvasm
index 3b62495..bc81cf7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,72 +22,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_542c62 "textureDimensions_542c62"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 R8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_542c62 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_542c62 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_542c62
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_542c62
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_542c62
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_542c62
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_542c62
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_542c62
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.wgsl
index bd3741d..15e4653 100644
--- a/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/542c62.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r8unorm, write>;
-fn textureDimensions_542c62() {
+fn textureDimensions_542c62() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_542c62();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_542c62();
+ prevent_dce = textureDimensions_542c62();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_542c62();
+ prevent_dce = textureDimensions_542c62();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_542c62();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl
index d6616a8..8b04658 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<bgra8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_2d<bgra8unorm, read_write>) -> vec2<u32>
-fn textureDimensions_55fdeb() {
+fn textureDimensions_55fdeb() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_55fdeb();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_55fdeb();
+ prevent_dce = textureDimensions_55fdeb();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_55fdeb();
+ prevent_dce = textureDimensions_55fdeb();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_55fdeb();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.dxc.hlsl
index 86ce786..c054967 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_55fdeb() {
+uint2 textureDimensions_55fdeb() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_55fdeb();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_55fdeb();
+ prevent_dce.Store2(0u, asuint(textureDimensions_55fdeb()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_55fdeb();
+ prevent_dce.Store2(0u, asuint(textureDimensions_55fdeb()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_55fdeb();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.fxc.hlsl
index 86ce786..c054967 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_55fdeb() {
+uint2 textureDimensions_55fdeb() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_55fdeb();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_55fdeb();
+ prevent_dce.Store2(0u, asuint(textureDimensions_55fdeb()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_55fdeb();
+ prevent_dce.Store2(0u, asuint(textureDimensions_55fdeb()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_55fdeb();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.glsl
index 0992bd7..d289876 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_55fdeb() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_55fdeb();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_55fdeb() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_55fdeb() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_55fdeb();
+ prevent_dce.inner = textureDimensions_55fdeb();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_55fdeb() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_55fdeb() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_55fdeb();
+ prevent_dce.inner = textureDimensions_55fdeb();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_55fdeb() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_55fdeb();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.msl
index 78e6ea1..74f8019 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_55fdeb(texture2d<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_55fdeb(texture2d<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_55fdeb(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_55fdeb(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_55fdeb(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_55fdeb(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_55fdeb(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_55fdeb(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.spvasm
index 0b40fa9..05fbc50 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_55fdeb "textureDimensions_55fdeb"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_55fdeb = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_55fdeb = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_55fdeb
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_55fdeb
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_55fdeb
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_55fdeb
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_55fdeb
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_55fdeb
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.wgsl
index 9e13b3c..e351c45 100644
--- a/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/55fdeb.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read_write>;
-fn textureDimensions_55fdeb() {
+fn textureDimensions_55fdeb() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_55fdeb();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_55fdeb();
+ prevent_dce = textureDimensions_55fdeb();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_55fdeb();
+ prevent_dce = textureDimensions_55fdeb();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_55fdeb();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl
index 22b543d..04ba6f0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<bgra8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_1d<bgra8unorm, read_write>) -> u32
-fn textureDimensions_5703b3() {
+fn textureDimensions_5703b3() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_5703b3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_5703b3();
+ prevent_dce = textureDimensions_5703b3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_5703b3();
+ prevent_dce = textureDimensions_5703b3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_5703b3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.dxc.hlsl
index 5e0e145..e3deb39 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_5703b3() {
+uint textureDimensions_5703b3() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_5703b3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_5703b3();
+ prevent_dce.Store(0u, asuint(textureDimensions_5703b3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_5703b3();
+ prevent_dce.Store(0u, asuint(textureDimensions_5703b3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_5703b3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.fxc.hlsl
index 5e0e145..e3deb39 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_5703b3() {
+uint textureDimensions_5703b3() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_5703b3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_5703b3();
+ prevent_dce.Store(0u, asuint(textureDimensions_5703b3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_5703b3();
+ prevent_dce.Store(0u, asuint(textureDimensions_5703b3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_5703b3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.glsl
index c6fc30d..41331f9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_5703b3() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_5703b3();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_5703b3() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_5703b3() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_5703b3();
+ prevent_dce.inner = textureDimensions_5703b3();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_5703b3() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_5703b3() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_5703b3();
+ prevent_dce.inner = textureDimensions_5703b3();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_5703b3() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_5703b3();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.msl
index b9c7979..4149ce2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_5703b3(texture1d<float, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_5703b3(texture1d<float, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_5703b3(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_5703b3(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_5703b3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_5703b3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_5703b3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_5703b3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.spvasm
index ac15b7c..5e28743 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_5703b3 "textureDimensions_5703b3"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_5703b3 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_5703b3 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_5703b3
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_5703b3
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_5703b3
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_5703b3
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_5703b3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_5703b3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.wgsl
index 466ccd3..4e825e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5703b3.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, read_write>;
-fn textureDimensions_5703b3() {
+fn textureDimensions_5703b3() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_5703b3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_5703b3();
+ prevent_dce = textureDimensions_5703b3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_5703b3();
+ prevent_dce = textureDimensions_5703b3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_5703b3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl
index 50ab98d..88813a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<r8unorm, read_write>) -> vec2<u32>
-fn textureDimensions_578e75() {
+fn textureDimensions_578e75() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_578e75();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_578e75();
+ prevent_dce = textureDimensions_578e75();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_578e75();
+ prevent_dce = textureDimensions_578e75();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_578e75();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.dxc.hlsl
index 81df8a2..d377d62 100644
--- a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_578e75() {
+uint2 textureDimensions_578e75() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_578e75();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_578e75();
+ prevent_dce.Store2(0u, asuint(textureDimensions_578e75()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_578e75();
+ prevent_dce.Store2(0u, asuint(textureDimensions_578e75()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_578e75();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.fxc.hlsl
index 81df8a2..d377d62 100644
--- a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_578e75() {
+uint2 textureDimensions_578e75() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_578e75();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_578e75();
+ prevent_dce.Store2(0u, asuint(textureDimensions_578e75()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_578e75();
+ prevent_dce.Store2(0u, asuint(textureDimensions_578e75()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_578e75();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.msl
index 12ac6de..4ab3134 100644
--- a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_578e75(texture2d_array<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_578e75(texture2d_array<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_578e75(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_578e75(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_578e75(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_578e75(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_578e75(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_578e75(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.spvasm
index 426a01e..1b37edb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,74 +21,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_578e75 "textureDimensions_578e75"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_578e75 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_578e75 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_578e75
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_578e75
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_578e75
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_578e75
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_578e75
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_578e75
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.wgsl
index f0a4f7b..eeabf1d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/578e75.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r8unorm, read_write>;
-fn textureDimensions_578e75() {
+fn textureDimensions_578e75() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_578e75();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_578e75();
+ prevent_dce = textureDimensions_578e75();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_578e75();
+ prevent_dce = textureDimensions_578e75();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_578e75();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl
index bfd0602..5d52b5f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba32uint, read_write>) -> vec2<u32>
-fn textureDimensions_579eee() {
+fn textureDimensions_579eee() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_579eee();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_579eee();
+ prevent_dce = textureDimensions_579eee();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_579eee();
+ prevent_dce = textureDimensions_579eee();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_579eee();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.dxc.hlsl
index 5bbf8bd..36c5394 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_579eee() {
+uint2 textureDimensions_579eee() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_579eee();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_579eee();
+ prevent_dce.Store2(0u, asuint(textureDimensions_579eee()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_579eee();
+ prevent_dce.Store2(0u, asuint(textureDimensions_579eee()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_579eee();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.fxc.hlsl
index 5bbf8bd..36c5394 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_579eee() {
+uint2 textureDimensions_579eee() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_579eee();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_579eee();
+ prevent_dce.Store2(0u, asuint(textureDimensions_579eee()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_579eee();
+ prevent_dce.Store2(0u, asuint(textureDimensions_579eee()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_579eee();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.glsl
index ed760f8..2bd352f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_579eee() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_579eee();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_579eee() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_579eee() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_579eee();
+ prevent_dce.inner = textureDimensions_579eee();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_579eee() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_579eee() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_579eee();
+ prevent_dce.inner = textureDimensions_579eee();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_579eee() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_579eee();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.msl
index c5cd8f7..43c7732 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_579eee(texture2d<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_579eee(texture2d<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_579eee(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_579eee(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_579eee(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_579eee(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_579eee(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_579eee(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.spvasm
index ff988e8..5bd3e9b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_579eee "textureDimensions_579eee"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_579eee = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_579eee = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_579eee
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_579eee
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_579eee
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_579eee
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_579eee
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_579eee
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.wgsl
index b681610..82ec6a9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/579eee.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, read_write>;
-fn textureDimensions_579eee() {
+fn textureDimensions_579eee() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_579eee();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_579eee();
+ prevent_dce = textureDimensions_579eee();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_579eee();
+ prevent_dce = textureDimensions_579eee();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_579eee();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl
index 2aa8064..cc12ddd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16uint, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba16uint, write>) -> u32
-fn textureDimensions_58a82d() {
+fn textureDimensions_58a82d() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_58a82d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_58a82d();
+ prevent_dce = textureDimensions_58a82d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_58a82d();
+ prevent_dce = textureDimensions_58a82d();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_58a82d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.dxc.hlsl
index 9e2bb5a..a118217 100644
--- a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_58a82d() {
+uint textureDimensions_58a82d() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_58a82d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_58a82d();
+ prevent_dce.Store(0u, asuint(textureDimensions_58a82d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_58a82d();
+ prevent_dce.Store(0u, asuint(textureDimensions_58a82d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_58a82d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.fxc.hlsl
index 9e2bb5a..a118217 100644
--- a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_58a82d() {
+uint textureDimensions_58a82d() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_58a82d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_58a82d();
+ prevent_dce.Store(0u, asuint(textureDimensions_58a82d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_58a82d();
+ prevent_dce.Store(0u, asuint(textureDimensions_58a82d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_58a82d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.glsl
index a0283a0..718680c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_58a82d() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_58a82d();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_58a82d() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_58a82d() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_58a82d();
+ prevent_dce.inner = textureDimensions_58a82d();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_58a82d() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_58a82d() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_58a82d();
+ prevent_dce.inner = textureDimensions_58a82d();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_58a82d() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_58a82d();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.msl
index 08142b4..0915b51 100644
--- a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_58a82d(texture1d<uint, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_58a82d(texture1d<uint, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_58a82d(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_58a82d(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_58a82d(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_58a82d(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_58a82d(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_58a82d(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.spvasm
index 5aa4216..6824a6b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_58a82d "textureDimensions_58a82d"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_58a82d = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_58a82d = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_58a82d
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_58a82d
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_58a82d
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_58a82d
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_58a82d
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_58a82d
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.wgsl
index 89ffb84..fe37d2a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/58a82d.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, write>;
-fn textureDimensions_58a82d() {
+fn textureDimensions_58a82d() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_58a82d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_58a82d();
+ prevent_dce = textureDimensions_58a82d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_58a82d();
+ prevent_dce = textureDimensions_58a82d();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_58a82d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl
index de66330..a1ff9a7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16sint, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba16sint, write>) -> vec3<u32>
-fn textureDimensions_591981() {
+fn textureDimensions_591981() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_591981();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_591981();
+ prevent_dce = textureDimensions_591981();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_591981();
+ prevent_dce = textureDimensions_591981();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_591981();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.dxc.hlsl
index 24bb012..d504f19 100644
--- a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_591981() {
+uint3 textureDimensions_591981() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_591981();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_591981();
+ prevent_dce.Store3(0u, asuint(textureDimensions_591981()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_591981();
+ prevent_dce.Store3(0u, asuint(textureDimensions_591981()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_591981();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.fxc.hlsl
index 24bb012..d504f19 100644
--- a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_591981() {
+uint3 textureDimensions_591981() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_591981();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_591981();
+ prevent_dce.Store3(0u, asuint(textureDimensions_591981()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_591981();
+ prevent_dce.Store3(0u, asuint(textureDimensions_591981()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_591981();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.glsl
index a65a790..42c73f0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16i) uniform highp writeonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_591981() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_591981();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_591981() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_591981() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_591981();
+ prevent_dce.inner = textureDimensions_591981();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_591981() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_591981() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_591981();
+ prevent_dce.inner = textureDimensions_591981();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_591981() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_591981();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.msl
index ff794c9..9caf759 100644
--- a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_591981(texture3d<int, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_591981(texture3d<int, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_591981(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_591981(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_591981(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_591981(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_591981(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_591981(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.spvasm
index ad8cddc..3ff7058 100644
--- a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_591981 "textureDimensions_591981"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_591981 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_591981 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_591981
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_591981
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_591981
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_591981
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_591981
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_591981
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.wgsl
index f54d7e8..e787395 100644
--- a/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/591981.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16sint, write>;
-fn textureDimensions_591981() {
+fn textureDimensions_591981() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_591981();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_591981();
+ prevent_dce = textureDimensions_591981();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_591981();
+ prevent_dce = textureDimensions_591981();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_591981();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl
index cef9977..f9af455 100644
--- a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16float, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba16float, write>) -> vec2<u32>
-fn textureDimensions_599ab5() {
+fn textureDimensions_599ab5() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_599ab5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_599ab5();
+ prevent_dce = textureDimensions_599ab5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_599ab5();
+ prevent_dce = textureDimensions_599ab5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_599ab5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.dxc.hlsl
index fdb4dc4..138ed9f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_599ab5() {
+uint2 textureDimensions_599ab5() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_599ab5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_599ab5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_599ab5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_599ab5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_599ab5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_599ab5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.fxc.hlsl
index fdb4dc4..138ed9f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_599ab5() {
+uint2 textureDimensions_599ab5() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_599ab5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_599ab5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_599ab5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_599ab5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_599ab5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_599ab5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.glsl
index 126cfcb..c201763 100644
--- a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_599ab5() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_599ab5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_599ab5() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_599ab5() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_599ab5();
+ prevent_dce.inner = textureDimensions_599ab5();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_599ab5() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_599ab5() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_599ab5();
+ prevent_dce.inner = textureDimensions_599ab5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_599ab5() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_599ab5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.msl
index eed79dd..c1deb6b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_599ab5(texture2d<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_599ab5(texture2d<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_599ab5(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_599ab5(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_599ab5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_599ab5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_599ab5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_599ab5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.spvasm
index dd4dfe1..87d7f72 100644
--- a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_599ab5 "textureDimensions_599ab5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_599ab5 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_599ab5 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_599ab5
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_599ab5
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_599ab5
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_599ab5
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_599ab5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_599ab5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.wgsl
index ccc869b..13a4fc6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/599ab5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, write>;
-fn textureDimensions_599ab5() {
+fn textureDimensions_599ab5() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_599ab5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_599ab5();
+ prevent_dce = textureDimensions_599ab5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_599ab5();
+ prevent_dce = textureDimensions_599ab5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_599ab5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl
index e7ddc63..a5434b0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<bgra8unorm, write>;
// fn textureDimensions(texture: texture_storage_3d<bgra8unorm, write>) -> vec3<u32>
-fn textureDimensions_5b4b10() {
+fn textureDimensions_5b4b10() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_5b4b10();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_5b4b10();
+ prevent_dce = textureDimensions_5b4b10();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_5b4b10();
+ prevent_dce = textureDimensions_5b4b10();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_5b4b10();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.dxc.hlsl
index 82c0db2..2ee5848 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_5b4b10() {
+uint3 textureDimensions_5b4b10() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_5b4b10();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_5b4b10();
+ prevent_dce.Store3(0u, asuint(textureDimensions_5b4b10()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_5b4b10();
+ prevent_dce.Store3(0u, asuint(textureDimensions_5b4b10()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_5b4b10();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.fxc.hlsl
index 82c0db2..2ee5848 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_5b4b10() {
+uint3 textureDimensions_5b4b10() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_5b4b10();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_5b4b10();
+ prevent_dce.Store3(0u, asuint(textureDimensions_5b4b10()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_5b4b10();
+ prevent_dce.Store3(0u, asuint(textureDimensions_5b4b10()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_5b4b10();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.glsl
index 97aa18f..fdf2377 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_5b4b10() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_5b4b10();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_5b4b10() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_5b4b10() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_5b4b10();
+ prevent_dce.inner = textureDimensions_5b4b10();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_5b4b10() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_5b4b10() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_5b4b10();
+ prevent_dce.inner = textureDimensions_5b4b10();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_5b4b10() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_5b4b10();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.msl
index 3a3a59e..2b19d8f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_5b4b10(texture3d<float, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_5b4b10(texture3d<float, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_5b4b10(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_5b4b10(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_5b4b10(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_5b4b10(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_5b4b10(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_5b4b10(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.spvasm
index 7c7b98c..f17f678 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_5b4b10 "textureDimensions_5b4b10"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_5b4b10 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_5b4b10 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_5b4b10
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_5b4b10
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_5b4b10
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_5b4b10
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_5b4b10
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_5b4b10
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.wgsl
index afde0ac..b5db4ad 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5b4b10.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, write>;
-fn textureDimensions_5b4b10() {
+fn textureDimensions_5b4b10() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_5b4b10();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_5b4b10();
+ prevent_dce = textureDimensions_5b4b10();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_5b4b10();
+ prevent_dce = textureDimensions_5b4b10();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_5b4b10();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl
index 9afea47..c5b9ced 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_1d<i32>;
// fn textureDimensions(texture: texture_1d<i32>) -> u32
-fn textureDimensions_5df042() {
+fn textureDimensions_5df042() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_5df042();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_5df042();
+ prevent_dce = textureDimensions_5df042();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_5df042();
+ prevent_dce = textureDimensions_5df042();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_5df042();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.dxc.hlsl
index fc36ad8..ff07b9d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_5df042() {
+uint textureDimensions_5df042() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_5df042();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_5df042();
+ prevent_dce.Store(0u, asuint(textureDimensions_5df042()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_5df042();
+ prevent_dce.Store(0u, asuint(textureDimensions_5df042()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_5df042();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.fxc.hlsl
index fc36ad8..ff07b9d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_5df042() {
+uint textureDimensions_5df042() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_5df042();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_5df042();
+ prevent_dce.Store(0u, asuint(textureDimensions_5df042()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_5df042();
+ prevent_dce.Store(0u, asuint(textureDimensions_5df042()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_5df042();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.glsl
index 54f087e..492b443 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp isampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_5df042() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_5df042();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2D arg_0_1;
+uint textureDimensions_5df042() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_5df042() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_5df042();
+ prevent_dce.inner = textureDimensions_5df042();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp isampler2D arg_0_1;
+uint textureDimensions_5df042() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_5df042() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_5df042();
+ prevent_dce.inner = textureDimensions_5df042();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp isampler2D arg_0_1;
+uint textureDimensions_5df042() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_5df042();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.msl
index a3deed2..cc71113 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_5df042(texture1d<int, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_5df042(texture1d<int, access::sample> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_5df042(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_5df042(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_5df042(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_5df042(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_5df042(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_5df042(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.spvasm
index 8681b78..98c0a72 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_5df042 "textureDimensions_5df042"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%int_0 = OpConstant %int 0
%_ptr_Function_uint = OpTypePointer Function %uint
- %26 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_5df042 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %26
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %uint %22 %int_0
- OpStore %res %21
- %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %30 = OpLoad %uint %res
- OpStore %29 %30
+%textureDimensions_5df042 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySizeLod %uint %24 %int_0
+ OpStore %res %23
+ %28 = OpLoad %uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %uint %textureDimensions_5df042
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_5df042
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %uint %textureDimensions_5df042
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %52 = OpFunctionCall %uint %textureDimensions_5df042
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_5df042
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_5df042
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.wgsl
index f71690f..4e04c2b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/5df042.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_1d<i32>;
-fn textureDimensions_5df042() {
+fn textureDimensions_5df042() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_5df042();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_5df042();
+ prevent_dce = textureDimensions_5df042();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_5df042();
+ prevent_dce = textureDimensions_5df042();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_5df042();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl
index ac61e0b..9a7c5fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32sint, write>;
// fn textureDimensions(texture: texture_storage_1d<r32sint, write>) -> u32
-fn textureDimensions_607979() {
+fn textureDimensions_607979() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_607979();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_607979();
+ prevent_dce = textureDimensions_607979();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_607979();
+ prevent_dce = textureDimensions_607979();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_607979();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.dxc.hlsl
index b6d74cc..e968dce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_607979() {
+uint textureDimensions_607979() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_607979();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_607979();
+ prevent_dce.Store(0u, asuint(textureDimensions_607979()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_607979();
+ prevent_dce.Store(0u, asuint(textureDimensions_607979()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_607979();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.fxc.hlsl
index b6d74cc..e968dce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_607979() {
+uint textureDimensions_607979() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_607979();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_607979();
+ prevent_dce.Store(0u, asuint(textureDimensions_607979()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_607979();
+ prevent_dce.Store(0u, asuint(textureDimensions_607979()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_607979();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.glsl
index 14a82c3..40833c3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_607979() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_607979();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_607979() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_607979() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_607979();
+ prevent_dce.inner = textureDimensions_607979();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_607979() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_607979() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_607979();
+ prevent_dce.inner = textureDimensions_607979();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_607979() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_607979();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.msl
index b0ebee4..f8c1ffc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_607979(texture1d<int, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_607979(texture1d<int, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_607979(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_607979(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_607979(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_607979(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_607979(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_607979(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.spvasm
index afb30ec..44b49a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_607979 "textureDimensions_607979"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_607979 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_607979 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_607979
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_607979
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_607979
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_607979
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_607979
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_607979
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.wgsl
index 86ad89f..b92feb1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/607979.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, write>;
-fn textureDimensions_607979() {
+fn textureDimensions_607979() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_607979();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_607979();
+ prevent_dce = textureDimensions_607979();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_607979();
+ prevent_dce = textureDimensions_607979();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_607979();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl
index f30f4c6..2d93d90 100644
--- a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8snorm, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8snorm, read>) -> vec2<u32>
-fn textureDimensions_609d34() {
+fn textureDimensions_609d34() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_609d34();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_609d34();
+ prevent_dce = textureDimensions_609d34();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_609d34();
+ prevent_dce = textureDimensions_609d34();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_609d34();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.dxc.hlsl
index 4ce0ec1..343a409 100644
--- a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_609d34() {
+uint2 textureDimensions_609d34() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_609d34();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_609d34();
+ prevent_dce.Store2(0u, asuint(textureDimensions_609d34()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_609d34();
+ prevent_dce.Store2(0u, asuint(textureDimensions_609d34()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_609d34();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.fxc.hlsl
index 4ce0ec1..343a409 100644
--- a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_609d34() {
+uint2 textureDimensions_609d34() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_609d34();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_609d34();
+ prevent_dce.Store2(0u, asuint(textureDimensions_609d34()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_609d34();
+ prevent_dce.Store2(0u, asuint(textureDimensions_609d34()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_609d34();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.glsl
index 0a80baa..6a546f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp readonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_609d34() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_609d34();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_609d34() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_609d34() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_609d34();
+ prevent_dce.inner = textureDimensions_609d34();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_609d34() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_609d34() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_609d34();
+ prevent_dce.inner = textureDimensions_609d34();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8_snorm) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_609d34() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_609d34();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.msl
index a28f5c6..58ffe7f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_609d34(texture2d_array<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_609d34(texture2d_array<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_609d34(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_609d34(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_609d34(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_609d34(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_609d34(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_609d34(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.spvasm
index ea13ca7..ab6279f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_609d34 "textureDimensions_609d34"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_609d34 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_609d34 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_609d34
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_609d34
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_609d34
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_609d34
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_609d34
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_609d34
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.wgsl
index 34bb8f0..aa5f5d4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/609d34.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read>;
-fn textureDimensions_609d34() {
+fn textureDimensions_609d34() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_609d34();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_609d34();
+ prevent_dce = textureDimensions_609d34();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_609d34();
+ prevent_dce = textureDimensions_609d34();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_609d34();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl
index 36e8038..dbf4b41 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32float, read_write>;
// fn textureDimensions(texture: texture_storage_3d<r32float, read_write>) -> vec3<u32>
-fn textureDimensions_617dc8() {
+fn textureDimensions_617dc8() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_617dc8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_617dc8();
+ prevent_dce = textureDimensions_617dc8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_617dc8();
+ prevent_dce = textureDimensions_617dc8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_617dc8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.dxc.hlsl
index 9162584..6f8308e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_617dc8() {
+uint3 textureDimensions_617dc8() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_617dc8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_617dc8();
+ prevent_dce.Store3(0u, asuint(textureDimensions_617dc8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_617dc8();
+ prevent_dce.Store3(0u, asuint(textureDimensions_617dc8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_617dc8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.fxc.hlsl
index 9162584..6f8308e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_617dc8() {
+uint3 textureDimensions_617dc8() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_617dc8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_617dc8();
+ prevent_dce.Store3(0u, asuint(textureDimensions_617dc8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_617dc8();
+ prevent_dce.Store3(0u, asuint(textureDimensions_617dc8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_617dc8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.glsl
index 8941810..6f1eea2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32f) uniform highp image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_617dc8() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_617dc8();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp image3D arg_0;
+uvec3 textureDimensions_617dc8() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_617dc8() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_617dc8();
+ prevent_dce.inner = textureDimensions_617dc8();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32f) uniform highp image3D arg_0;
+uvec3 textureDimensions_617dc8() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_617dc8() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_617dc8();
+ prevent_dce.inner = textureDimensions_617dc8();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32f) uniform highp image3D arg_0;
+uvec3 textureDimensions_617dc8() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_617dc8();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.msl
index e25f333..4380372 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_617dc8(texture3d<float, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_617dc8(texture3d<float, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_617dc8(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_617dc8(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_617dc8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_617dc8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_617dc8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_617dc8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.spvasm
index 6cea9c5..81701e2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_617dc8 "textureDimensions_617dc8"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_617dc8 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_617dc8 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_617dc8
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_617dc8
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_617dc8
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_617dc8
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_617dc8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_617dc8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.wgsl
index 8754d52..ebd801d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/617dc8.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, read_write>;
-fn textureDimensions_617dc8() {
+fn textureDimensions_617dc8() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_617dc8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_617dc8();
+ prevent_dce = textureDimensions_617dc8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_617dc8();
+ prevent_dce = textureDimensions_617dc8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_617dc8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl
index 772ab91..8db18a6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_2d_array<i32>;
// fn textureDimensions(texture: texture_2d_array<i32>) -> vec2<u32>
-fn textureDimensions_62cb5a() {
+fn textureDimensions_62cb5a() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_62cb5a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_62cb5a();
+ prevent_dce = textureDimensions_62cb5a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_62cb5a();
+ prevent_dce = textureDimensions_62cb5a();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_62cb5a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.dxc.hlsl
index 000e253..18c9d95 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_62cb5a() {
+uint2 textureDimensions_62cb5a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_62cb5a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_62cb5a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_62cb5a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_62cb5a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_62cb5a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_62cb5a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.fxc.hlsl
index 000e253..18c9d95 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_62cb5a() {
+uint2 textureDimensions_62cb5a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_62cb5a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_62cb5a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_62cb5a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_62cb5a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_62cb5a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_62cb5a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.glsl
index a557992..fb49cff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp isampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_62cb5a() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_62cb5a();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_62cb5a() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_62cb5a() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_62cb5a();
+ prevent_dce.inner = textureDimensions_62cb5a();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_62cb5a() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_62cb5a() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_62cb5a();
+ prevent_dce.inner = textureDimensions_62cb5a();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_62cb5a() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_62cb5a();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.msl
index 830f885..e3e7340 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_62cb5a(texture2d_array<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_62cb5a(texture2d_array<int, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_62cb5a(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_62cb5a(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_62cb5a(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_62cb5a(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_62cb5a(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_62cb5a(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.spvasm
index b95e531..2134dea 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_62cb5a "textureDimensions_62cb5a"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %29 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %32 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %34 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %44 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %50 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_62cb5a = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %29
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySizeLod %v3uint %25 %int_0
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %32 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %33 = OpLoad %v2uint %res
- OpStore %32 %33
+%textureDimensions_62cb5a = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySizeLod %v3uint %27 %int_0
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %31 = OpLoad %v2uint %res
+ OpReturnValue %31
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %32
+ %35 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_62cb5a
+ OpStore %38 %39
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
- %36 = OpLabel
- %37 = OpFunctionCall %void %textureDimensions_62cb5a
- OpReturnValue %5
+%compute_main = OpFunction %void None %32
+ %41 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_62cb5a
+ OpStore %42 %43
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %39 = OpLabel
- %40 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %40
+%vertex_main_inner = OpFunction %VertexOutput None %44
+ %47 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %50
+ %52 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %52 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_62cb5a
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %32
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_62cb5a
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_62cb5a
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.wgsl
index 8280fe3..aab6ffb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62cb5a.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<i32>;
-fn textureDimensions_62cb5a() {
+fn textureDimensions_62cb5a() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_62cb5a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_62cb5a();
+ prevent_dce = textureDimensions_62cb5a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_62cb5a();
+ prevent_dce = textureDimensions_62cb5a();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_62cb5a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl
index bad8523..efdae6a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8uint, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba8uint, read>) -> vec2<u32>
-fn textureDimensions_62e7ae() {
+fn textureDimensions_62e7ae() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_62e7ae();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_62e7ae();
+ prevent_dce = textureDimensions_62e7ae();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_62e7ae();
+ prevent_dce = textureDimensions_62e7ae();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_62e7ae();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.dxc.hlsl
index cd2626b..dc4eac2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_62e7ae() {
+uint2 textureDimensions_62e7ae() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_62e7ae();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_62e7ae();
+ prevent_dce.Store2(0u, asuint(textureDimensions_62e7ae()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_62e7ae();
+ prevent_dce.Store2(0u, asuint(textureDimensions_62e7ae()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_62e7ae();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.fxc.hlsl
index cd2626b..dc4eac2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_62e7ae() {
+uint2 textureDimensions_62e7ae() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_62e7ae();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_62e7ae();
+ prevent_dce.Store2(0u, asuint(textureDimensions_62e7ae()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_62e7ae();
+ prevent_dce.Store2(0u, asuint(textureDimensions_62e7ae()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_62e7ae();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.glsl
index e30fba6..703426f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp readonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_62e7ae() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_62e7ae();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_62e7ae() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_62e7ae() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_62e7ae();
+ prevent_dce.inner = textureDimensions_62e7ae();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_62e7ae() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_62e7ae() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_62e7ae();
+ prevent_dce.inner = textureDimensions_62e7ae();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_62e7ae() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_62e7ae();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.msl
index 90e1fd0..d1a2d5b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_62e7ae(texture2d<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_62e7ae(texture2d<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_62e7ae(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_62e7ae(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_62e7ae(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_62e7ae(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_62e7ae(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_62e7ae(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.spvasm
index 6438682..0f24380 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_62e7ae "textureDimensions_62e7ae"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_62e7ae = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_62e7ae = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_62e7ae
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_62e7ae
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_62e7ae
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_62e7ae
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_62e7ae
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_62e7ae
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.wgsl
index b370b1f..02a74fb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/62e7ae.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read>;
-fn textureDimensions_62e7ae() {
+fn textureDimensions_62e7ae() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_62e7ae();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_62e7ae();
+ prevent_dce = textureDimensions_62e7ae();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_62e7ae();
+ prevent_dce = textureDimensions_62e7ae();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_62e7ae();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl
index 0298f18..ec68a83 100644
--- a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube<i32>;
// fn textureDimensions(texture: texture_cube<i32>, level: u32) -> vec2<u32>
-fn textureDimensions_64dc74() {
+fn textureDimensions_64dc74() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_64dc74();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_64dc74();
+ prevent_dce = textureDimensions_64dc74();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_64dc74();
+ prevent_dce = textureDimensions_64dc74();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_64dc74();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.dxc.hlsl
index d9008c0..469e5b6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_64dc74() {
+uint2 textureDimensions_64dc74() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_64dc74();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_64dc74();
+ prevent_dce.Store2(0u, asuint(textureDimensions_64dc74()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_64dc74();
+ prevent_dce.Store2(0u, asuint(textureDimensions_64dc74()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_64dc74();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.fxc.hlsl
index d9008c0..469e5b6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_64dc74() {
+uint2 textureDimensions_64dc74() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_64dc74();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_64dc74();
+ prevent_dce.Store2(0u, asuint(textureDimensions_64dc74()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_64dc74();
+ prevent_dce.Store2(0u, asuint(textureDimensions_64dc74()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_64dc74();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.glsl
index d786583..891a7b9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isamplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_64dc74() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_64dc74();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_64dc74() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_64dc74() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_64dc74();
+ prevent_dce.inner = textureDimensions_64dc74();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_64dc74() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_64dc74() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_64dc74();
+ prevent_dce.inner = textureDimensions_64dc74();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_64dc74() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_64dc74();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.msl
index 1e63cdd..90ad7a4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_64dc74(texturecube<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_64dc74(texturecube<int, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_64dc74(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_64dc74(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_64dc74(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_64dc74(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_64dc74(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_64dc74(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.spvasm
index 54e7273..0b6fa41 100644
--- a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 64
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,105 @@
OpName %textureDimensions_64dc74 "textureDimensions_64dc74"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %27 = OpConstantNull %uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_64dc74 = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_64dc74 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_64dc74
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_64dc74
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_64dc74
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %55 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %56 = OpFunctionCall %v2uint %textureDimensions_64dc74
+ OpStore %55 %56
+ %57 = OpLoad %VertexOutput %out
+ OpReturnValue %57
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %59 = OpLabel
+ %60 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %61 = OpCompositeExtract %v4float %60 0
+ OpStore %pos_1 %61
+ %62 = OpCompositeExtract %v2uint %60 1
+ OpStore %prevent_dce_1 %62
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_64dc74
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_64dc74
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.wgsl
index a1a67b0..b436930 100644
--- a/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/64dc74.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube<i32>;
-fn textureDimensions_64dc74() {
+fn textureDimensions_64dc74() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_64dc74();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_64dc74();
+ prevent_dce = textureDimensions_64dc74();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_64dc74();
+ prevent_dce = textureDimensions_64dc74();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_64dc74();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl
index 8bb363d..cad83c8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32sint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<r32sint, write>) -> vec2<u32>
-fn textureDimensions_674058() {
+fn textureDimensions_674058() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_674058();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_674058();
+ prevent_dce = textureDimensions_674058();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_674058();
+ prevent_dce = textureDimensions_674058();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_674058();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.dxc.hlsl
index 4ae4e30..d33607b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_674058() {
+uint2 textureDimensions_674058() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_674058();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_674058();
+ prevent_dce.Store2(0u, asuint(textureDimensions_674058()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_674058();
+ prevent_dce.Store2(0u, asuint(textureDimensions_674058()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_674058();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.fxc.hlsl
index 4ae4e30..d33607b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_674058() {
+uint2 textureDimensions_674058() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_674058();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_674058();
+ prevent_dce.Store2(0u, asuint(textureDimensions_674058()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_674058();
+ prevent_dce.Store2(0u, asuint(textureDimensions_674058()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_674058();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.glsl
index 752654c..fd38d7e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp writeonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_674058() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_674058();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_674058() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_674058() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_674058();
+ prevent_dce.inner = textureDimensions_674058();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_674058() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_674058() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_674058();
+ prevent_dce.inner = textureDimensions_674058();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_674058() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_674058();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.msl
index 02af1ed..d40d19c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_674058(texture2d_array<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_674058(texture2d_array<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_674058(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_674058(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_674058(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_674058(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_674058(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_674058(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.spvasm
index 6cc571b..d271b43 100644
--- a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_674058 "textureDimensions_674058"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_674058 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_674058 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_674058
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_674058
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_674058
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_674058
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_674058
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_674058
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.wgsl
index 5000f73..fb06937 100644
--- a/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/674058.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32sint, write>;
-fn textureDimensions_674058() {
+fn textureDimensions_674058() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_674058();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_674058();
+ prevent_dce = textureDimensions_674058();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_674058();
+ prevent_dce = textureDimensions_674058();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_674058();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl
index bbd8bc5..c2a4cab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32float, read>;
// fn textureDimensions(texture: texture_storage_3d<rg32float, read>) -> vec3<u32>
-fn textureDimensions_6dae40() {
+fn textureDimensions_6dae40() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6dae40();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6dae40();
+ prevent_dce = textureDimensions_6dae40();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6dae40();
+ prevent_dce = textureDimensions_6dae40();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6dae40();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.dxc.hlsl
index 586120c..74e4a59 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6dae40() {
+uint3 textureDimensions_6dae40() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6dae40();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6dae40();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6dae40()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6dae40();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6dae40()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6dae40();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.fxc.hlsl
index 586120c..74e4a59 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6dae40() {
+uint3 textureDimensions_6dae40() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6dae40();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6dae40();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6dae40()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6dae40();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6dae40()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6dae40();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.msl
index 7c76eae..c746ddf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_6dae40(texture3d<float, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_6dae40(texture3d<float, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_6dae40(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_6dae40(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_6dae40(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_6dae40(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_6dae40(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_6dae40(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.spvasm
index 5b54f79..9dc6849 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_6dae40 "textureDimensions_6dae40"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_6dae40 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_6dae40 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_6dae40
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_6dae40
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_6dae40
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_6dae40
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_6dae40
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_6dae40
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.wgsl
index 11e6e96..205bf25 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dae40.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read>;
-fn textureDimensions_6dae40() {
+fn textureDimensions_6dae40() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6dae40();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6dae40();
+ prevent_dce = textureDimensions_6dae40();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6dae40();
+ prevent_dce = textureDimensions_6dae40();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6dae40();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl
index dc6e153..3de889b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32sint, read>;
// fn textureDimensions(texture: texture_storage_3d<rg32sint, read>) -> vec3<u32>
-fn textureDimensions_6dbef4() {
+fn textureDimensions_6dbef4() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6dbef4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6dbef4();
+ prevent_dce = textureDimensions_6dbef4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6dbef4();
+ prevent_dce = textureDimensions_6dbef4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6dbef4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.dxc.hlsl
index 44ef69e..d1d3ac9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6dbef4() {
+uint3 textureDimensions_6dbef4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6dbef4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6dbef4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6dbef4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6dbef4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6dbef4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6dbef4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.fxc.hlsl
index 44ef69e..d1d3ac9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6dbef4() {
+uint3 textureDimensions_6dbef4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6dbef4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6dbef4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6dbef4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6dbef4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6dbef4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6dbef4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.msl
index ce5b634..5b30eb1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_6dbef4(texture3d<int, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_6dbef4(texture3d<int, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_6dbef4(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_6dbef4(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_6dbef4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_6dbef4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_6dbef4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_6dbef4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.spvasm
index 8b46264..9827538 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,74 +21,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_6dbef4 "textureDimensions_6dbef4"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_6dbef4 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_6dbef4 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_6dbef4
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_6dbef4
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_6dbef4
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_6dbef4
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_6dbef4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_6dbef4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.wgsl
index cd7e33e..906db61 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6dbef4.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read>;
-fn textureDimensions_6dbef4() {
+fn textureDimensions_6dbef4() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6dbef4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6dbef4();
+ prevent_dce = textureDimensions_6dbef4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6dbef4();
+ prevent_dce = textureDimensions_6dbef4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6dbef4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl
index 499cf77..05f6041 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_3d<u32>;
// fn textureDimensions(texture: texture_3d<u32>, level: u32) -> vec3<u32>
-fn textureDimensions_6e6c7a() {
+fn textureDimensions_6e6c7a() -> vec3<u32>{
var arg_1 = 1u;
var res: vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6e6c7a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6e6c7a();
+ prevent_dce = textureDimensions_6e6c7a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6e6c7a();
+ prevent_dce = textureDimensions_6e6c7a();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6e6c7a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.dxc.hlsl
index 4ceff93..df93400 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6e6c7a() {
+uint3 textureDimensions_6e6c7a() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6e6c7a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6e6c7a();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6e6c7a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6e6c7a();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6e6c7a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6e6c7a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.fxc.hlsl
index 4ceff93..df93400 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6e6c7a() {
+uint3 textureDimensions_6e6c7a() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6e6c7a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6e6c7a();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6e6c7a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6e6c7a();
+ prevent_dce.Store3(0u, asuint(textureDimensions_6e6c7a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6e6c7a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.glsl
index 3db2c4b..4d51cd2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.glsl
@@ -1,48 +1,26 @@
#version 310 es
-
-uniform highp usampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_6e6c7a() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_6e6c7a();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_6e6c7a() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_6e6c7a() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_6e6c7a();
+ prevent_dce.inner = textureDimensions_6e6c7a();
}
void main() {
@@ -52,19 +30,24 @@
#version 310 es
uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_6e6c7a() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_6e6c7a() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_6e6c7a();
+ prevent_dce.inner = textureDimensions_6e6c7a();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -72,3 +55,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_6e6c7a() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_6e6c7a();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.msl
index e9dafaf..638e69b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_6e6c7a(texture3d<uint, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_6e6c7a(texture3d<uint, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint3 res = uint3(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1), tint_symbol_1.get_depth(arg_1));
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_6e6c7a(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_6e6c7a(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_6e6c7a(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_6e6c7a(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_6e6c7a(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_6e6c7a(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.spvasm
index ff612a3..6bd67ce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,78 +21,104 @@
OpName %textureDimensions_6e6c7a "textureDimensions_6e6c7a"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %30 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_6e6c7a = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v3uint Function %30
+%textureDimensions_6e6c7a = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v3uint Function %10
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %v3uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %34 = OpLoad %v3uint %res
- OpStore %33 %34
+ %28 = OpLoad %16 %arg_0
+ %29 = OpLoad %uint %arg_1
+ %27 = OpImageQuerySizeLod %v3uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %v3uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_6e6c7a
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_6e6c7a
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %v3uint %textureDimensions_6e6c7a
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %54 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %55 = OpFunctionCall %v3uint %textureDimensions_6e6c7a
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v3uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_6e6c7a
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_6e6c7a
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.wgsl
index 3372527..27859c4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e6c7a.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_3d<u32>;
-fn textureDimensions_6e6c7a() {
+fn textureDimensions_6e6c7a() -> vec3<u32> {
var arg_1 = 1u;
var res : vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6e6c7a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6e6c7a();
+ prevent_dce = textureDimensions_6e6c7a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6e6c7a();
+ prevent_dce = textureDimensions_6e6c7a();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6e6c7a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl
index 935c6f2..a57b32b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32float, read>;
// fn textureDimensions(texture: texture_storage_2d<r32float, read>) -> vec2<u32>
-fn textureDimensions_6e72c5() {
+fn textureDimensions_6e72c5() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6e72c5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6e72c5();
+ prevent_dce = textureDimensions_6e72c5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6e72c5();
+ prevent_dce = textureDimensions_6e72c5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6e72c5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.dxc.hlsl
index 6e183f0..aef65e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6e72c5() {
+uint2 textureDimensions_6e72c5() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6e72c5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6e72c5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_6e72c5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6e72c5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_6e72c5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6e72c5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.fxc.hlsl
index 6e183f0..aef65e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6e72c5() {
+uint2 textureDimensions_6e72c5() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6e72c5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6e72c5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_6e72c5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6e72c5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_6e72c5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6e72c5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.glsl
index 6c15993..86f0e29 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_6e72c5() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_6e72c5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_6e72c5() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_6e72c5() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_6e72c5();
+ prevent_dce.inner = textureDimensions_6e72c5();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_6e72c5() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_6e72c5() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_6e72c5();
+ prevent_dce.inner = textureDimensions_6e72c5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_6e72c5() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_6e72c5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.msl
index 629d369..3f5cefb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_6e72c5(texture2d<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_6e72c5(texture2d<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_6e72c5(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_6e72c5(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_6e72c5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_6e72c5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_6e72c5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_6e72c5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.spvasm
index 3a238be..1bd4de5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_6e72c5 "textureDimensions_6e72c5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_6e72c5 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_6e72c5 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_6e72c5
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_6e72c5
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_6e72c5
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_6e72c5
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_6e72c5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_6e72c5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.wgsl
index 34c0d69..4dc753b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6e72c5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32float, read>;
-fn textureDimensions_6e72c5() {
+fn textureDimensions_6e72c5() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6e72c5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6e72c5();
+ prevent_dce = textureDimensions_6e72c5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6e72c5();
+ prevent_dce = textureDimensions_6e72c5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6e72c5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl
index d5aeb85..9fc2702 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_depth_2d;
// fn textureDimensions(texture: texture_depth_2d, level: i32) -> vec2<u32>
-fn textureDimensions_6f1b5d() {
+fn textureDimensions_6f1b5d() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6f1b5d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6f1b5d();
+ prevent_dce = textureDimensions_6f1b5d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6f1b5d();
+ prevent_dce = textureDimensions_6f1b5d();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6f1b5d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.dxc.hlsl
index 676b2b8..752fa32 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2D arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6f1b5d() {
+uint2 textureDimensions_6f1b5d() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6f1b5d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6f1b5d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_6f1b5d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6f1b5d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_6f1b5d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6f1b5d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.fxc.hlsl
index 676b2b8..752fa32 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2D arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_6f1b5d() {
+uint2 textureDimensions_6f1b5d() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_6f1b5d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_6f1b5d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_6f1b5d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_6f1b5d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_6f1b5d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_6f1b5d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.glsl
index 2599034..dafd2df 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_6f1b5d() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_6f1b5d();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_6f1b5d() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_6f1b5d() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_6f1b5d();
+ prevent_dce.inner = textureDimensions_6f1b5d();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_6f1b5d() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_6f1b5d() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_6f1b5d();
+ prevent_dce.inner = textureDimensions_6f1b5d();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_6f1b5d() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_6f1b5d();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.msl
index 424c21d..ea634aa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_6f1b5d(depth2d<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_6f1b5d(depth2d<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depth2d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_6f1b5d(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depth2d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_6f1b5d(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depth2d<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_6f1b5d(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depth2d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_6f1b5d(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depth2d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depth2d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depth2d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_6f1b5d(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depth2d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_6f1b5d(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.spvasm
index 82cbec9..58c6d7e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_6f1b5d "textureDimensions_6f1b5d"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_6f1b5d = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_6f1b5d = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_6f1b5d
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_6f1b5d
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_6f1b5d
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_6f1b5d
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_6f1b5d
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_6f1b5d
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.wgsl
index 4a50f82..a2d73af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/6f1b5d.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_depth_2d;
-fn textureDimensions_6f1b5d() {
+fn textureDimensions_6f1b5d() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_6f1b5d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_6f1b5d();
+ prevent_dce = textureDimensions_6f1b5d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_6f1b5d();
+ prevent_dce = textureDimensions_6f1b5d();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_6f1b5d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl
index 3af1ec7..84696a9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16uint, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba16uint, read>) -> u32
-fn textureDimensions_709357() {
+fn textureDimensions_709357() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_709357();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_709357();
+ prevent_dce = textureDimensions_709357();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_709357();
+ prevent_dce = textureDimensions_709357();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_709357();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.dxc.hlsl
index 0c5312d..5fa73e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_709357() {
+uint textureDimensions_709357() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_709357();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_709357();
+ prevent_dce.Store(0u, asuint(textureDimensions_709357()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_709357();
+ prevent_dce.Store(0u, asuint(textureDimensions_709357()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_709357();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.fxc.hlsl
index 0c5312d..5fa73e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_709357() {
+uint textureDimensions_709357() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_709357();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_709357();
+ prevent_dce.Store(0u, asuint(textureDimensions_709357()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_709357();
+ prevent_dce.Store(0u, asuint(textureDimensions_709357()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_709357();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.glsl
index 96ec47f..706f8da 100644
--- a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp readonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_709357() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_709357();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_709357() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_709357() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_709357();
+ prevent_dce.inner = textureDimensions_709357();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_709357() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_709357() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_709357();
+ prevent_dce.inner = textureDimensions_709357();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_709357() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_709357();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.msl
index 8c3975f..07ff8ef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_709357(texture1d<uint, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_709357(texture1d<uint, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_709357(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_709357(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_709357(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_709357(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_709357(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_709357(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.spvasm
index 6bf348e..d8e7766 100644
--- a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_709357 "textureDimensions_709357"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_709357 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_709357 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_709357
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_709357
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_709357
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_709357
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_709357
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_709357
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.wgsl
index e13ef65..25ac5cf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/709357.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read>;
-fn textureDimensions_709357() {
+fn textureDimensions_709357() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_709357();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_709357();
+ prevent_dce = textureDimensions_709357();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_709357();
+ prevent_dce = textureDimensions_709357();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_709357();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl
index fa0c447..f76a098 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32sint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba32sint, read_write>) -> vec3<u32>
-fn textureDimensions_70dd33() {
+fn textureDimensions_70dd33() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_70dd33();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_70dd33();
+ prevent_dce = textureDimensions_70dd33();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_70dd33();
+ prevent_dce = textureDimensions_70dd33();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_70dd33();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.dxc.hlsl
index b4818c4..a1784ce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_70dd33() {
+uint3 textureDimensions_70dd33() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_70dd33();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_70dd33();
+ prevent_dce.Store3(0u, asuint(textureDimensions_70dd33()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_70dd33();
+ prevent_dce.Store3(0u, asuint(textureDimensions_70dd33()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_70dd33();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.fxc.hlsl
index b4818c4..a1784ce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_70dd33() {
+uint3 textureDimensions_70dd33() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_70dd33();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_70dd33();
+ prevent_dce.Store3(0u, asuint(textureDimensions_70dd33()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_70dd33();
+ prevent_dce.Store3(0u, asuint(textureDimensions_70dd33()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_70dd33();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.glsl
index 74f008a..3a94f4e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32i) uniform highp writeonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_70dd33() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_70dd33();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_70dd33() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_70dd33() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_70dd33();
+ prevent_dce.inner = textureDimensions_70dd33();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_70dd33() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_70dd33() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_70dd33();
+ prevent_dce.inner = textureDimensions_70dd33();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_70dd33() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_70dd33();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.msl
index 7e28937..4d7b61a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_70dd33(texture3d<int, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_70dd33(texture3d<int, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_70dd33(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_70dd33(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_70dd33(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_70dd33(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_70dd33(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_70dd33(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.spvasm
index 8798983..9465d3c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_70dd33 "textureDimensions_70dd33"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_70dd33 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_70dd33 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_70dd33
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_70dd33
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_70dd33
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_70dd33
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_70dd33
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_70dd33
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.wgsl
index f59f105..9716f35 100644
--- a/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/70dd33.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read_write>;
-fn textureDimensions_70dd33() {
+fn textureDimensions_70dd33() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_70dd33();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_70dd33();
+ prevent_dce = textureDimensions_70dd33();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_70dd33();
+ prevent_dce = textureDimensions_70dd33();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_70dd33();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl
index 41327b3..abebea7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<bgra8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<bgra8unorm, read_write>) -> vec2<u32>
-fn textureDimensions_715917() {
+fn textureDimensions_715917() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_715917();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_715917();
+ prevent_dce = textureDimensions_715917();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_715917();
+ prevent_dce = textureDimensions_715917();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_715917();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.dxc.hlsl
index 7f84e7b..a669af9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_715917() {
+uint2 textureDimensions_715917() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_715917();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_715917();
+ prevent_dce.Store2(0u, asuint(textureDimensions_715917()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_715917();
+ prevent_dce.Store2(0u, asuint(textureDimensions_715917()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_715917();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.fxc.hlsl
index 7f84e7b..a669af9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_715917() {
+uint2 textureDimensions_715917() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_715917();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_715917();
+ prevent_dce.Store2(0u, asuint(textureDimensions_715917()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_715917();
+ prevent_dce.Store2(0u, asuint(textureDimensions_715917()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_715917();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.glsl
index 86f820e..910debb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_715917() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_715917();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_715917() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_715917() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_715917();
+ prevent_dce.inner = textureDimensions_715917();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_715917() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_715917() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_715917();
+ prevent_dce.inner = textureDimensions_715917();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_715917() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_715917();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.msl
index 9ced3de..0e944bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_715917(texture2d_array<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_715917(texture2d_array<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_715917(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_715917(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_715917(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_715917(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_715917(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_715917(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.spvasm
index 4ae6f64..49cba3d7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_715917 "textureDimensions_715917"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_715917 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_715917 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_715917
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_715917
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_715917
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_715917
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_715917
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_715917
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.wgsl
index efcbfd2..d82dc31 100644
--- a/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/715917.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read_write>;
-fn textureDimensions_715917() {
+fn textureDimensions_715917() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_715917();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_715917();
+ prevent_dce = textureDimensions_715917();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_715917();
+ prevent_dce = textureDimensions_715917();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_715917();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl
index 6a0a21f..6f58938 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32uint, write>;
// fn textureDimensions(texture: texture_storage_1d<r32uint, write>) -> u32
-fn textureDimensions_7228de() {
+fn textureDimensions_7228de() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7228de();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_7228de();
+ prevent_dce = textureDimensions_7228de();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7228de();
+ prevent_dce = textureDimensions_7228de();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7228de();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.dxc.hlsl
index 5a85086..e64e322 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7228de() {
+uint textureDimensions_7228de() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7228de();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7228de();
+ prevent_dce.Store(0u, asuint(textureDimensions_7228de()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7228de();
+ prevent_dce.Store(0u, asuint(textureDimensions_7228de()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7228de();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.fxc.hlsl
index 5a85086..e64e322 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7228de() {
+uint textureDimensions_7228de() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7228de();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7228de();
+ prevent_dce.Store(0u, asuint(textureDimensions_7228de()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7228de();
+ prevent_dce.Store(0u, asuint(textureDimensions_7228de()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7228de();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.glsl
index a11b593..4f546da 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_7228de() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_7228de();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_7228de() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_7228de() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_7228de();
+ prevent_dce.inner = textureDimensions_7228de();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_7228de() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_7228de() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_7228de();
+ prevent_dce.inner = textureDimensions_7228de();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_7228de() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_7228de();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.msl
index bcac19c..2c00865 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7228de(texture1d<uint, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_7228de(texture1d<uint, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_7228de(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_7228de(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_7228de(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7228de(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7228de(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7228de(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.spvasm
index 6381839..7ec98b1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7228de "textureDimensions_7228de"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7228de = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_7228de = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_7228de
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_7228de
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_7228de
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_7228de
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_7228de
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_7228de
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.wgsl
index 258d65b..5e8fba8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7228de.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, write>;
-fn textureDimensions_7228de() {
+fn textureDimensions_7228de() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7228de();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_7228de();
+ prevent_dce = textureDimensions_7228de();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7228de();
+ prevent_dce = textureDimensions_7228de();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7228de();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl
index adb42ed..623ea3d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8snorm, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba8snorm, read>) -> vec2<u32>
-fn textureDimensions_7327fa() {
+fn textureDimensions_7327fa() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7327fa();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7327fa();
+ prevent_dce = textureDimensions_7327fa();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7327fa();
+ prevent_dce = textureDimensions_7327fa();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7327fa();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.dxc.hlsl
index 7b7699d..087ae97 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7327fa() {
+uint2 textureDimensions_7327fa() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7327fa();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7327fa();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7327fa()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7327fa();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7327fa()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7327fa();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.fxc.hlsl
index 7b7699d..087ae97 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7327fa() {
+uint2 textureDimensions_7327fa() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7327fa();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7327fa();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7327fa()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7327fa();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7327fa()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7327fa();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.glsl
index 0974303..21b3f4f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_7327fa() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_7327fa();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_7327fa() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_7327fa() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_7327fa();
+ prevent_dce.inner = textureDimensions_7327fa();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_7327fa() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_7327fa() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_7327fa();
+ prevent_dce.inner = textureDimensions_7327fa();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8_snorm) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_7327fa() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_7327fa();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.msl
index 8efa69f..fa1cb7f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7327fa(texture2d<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_7327fa(texture2d<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_7327fa(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_7327fa(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_7327fa(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7327fa(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7327fa(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7327fa(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.spvasm
index 6afe408..3b717e3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7327fa "textureDimensions_7327fa"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7327fa = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_7327fa = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_7327fa
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_7327fa
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_7327fa
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_7327fa
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_7327fa
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_7327fa
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.wgsl
index 1fa86fa..58ad696 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7327fa.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, read>;
-fn textureDimensions_7327fa() {
+fn textureDimensions_7327fa() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7327fa();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7327fa();
+ prevent_dce = textureDimensions_7327fa();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7327fa();
+ prevent_dce = textureDimensions_7327fa();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7327fa();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl
index e8b4560..f1e07e5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32sint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rg32sint, read_write>) -> u32
-fn textureDimensions_740e7c() {
+fn textureDimensions_740e7c() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_740e7c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_740e7c();
+ prevent_dce = textureDimensions_740e7c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_740e7c();
+ prevent_dce = textureDimensions_740e7c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_740e7c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.dxc.hlsl
index ce31aae..1981b9c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_740e7c() {
+uint textureDimensions_740e7c() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_740e7c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_740e7c();
+ prevent_dce.Store(0u, asuint(textureDimensions_740e7c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_740e7c();
+ prevent_dce.Store(0u, asuint(textureDimensions_740e7c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_740e7c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.fxc.hlsl
index ce31aae..1981b9c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_740e7c() {
+uint textureDimensions_740e7c() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_740e7c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_740e7c();
+ prevent_dce.Store(0u, asuint(textureDimensions_740e7c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_740e7c();
+ prevent_dce.Store(0u, asuint(textureDimensions_740e7c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_740e7c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.msl
index badd6d5..6259d7c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_740e7c(texture1d<int, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_740e7c(texture1d<int, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_740e7c(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_740e7c(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_740e7c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_740e7c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_740e7c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_740e7c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.spvasm
index 0ef6bd5..fc74d7c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,72 +22,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_740e7c "textureDimensions_740e7c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_740e7c = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_740e7c = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_740e7c
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_740e7c
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_740e7c
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_740e7c
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_740e7c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_740e7c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.wgsl
index e2cb6ba..a9a7160 100644
--- a/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/740e7c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read_write>;
-fn textureDimensions_740e7c() {
+fn textureDimensions_740e7c() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_740e7c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_740e7c();
+ prevent_dce = textureDimensions_740e7c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_740e7c();
+ prevent_dce = textureDimensions_740e7c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_740e7c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl
index 8d0dde8..c1a7668 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_3d<i32>;
// fn textureDimensions(texture: texture_3d<i32>, level: i32) -> vec3<u32>
-fn textureDimensions_756031() {
+fn textureDimensions_756031() -> vec3<u32>{
var arg_1 = 1i;
var res: vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_756031();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_756031();
+ prevent_dce = textureDimensions_756031();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_756031();
+ prevent_dce = textureDimensions_756031();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_756031();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.dxc.hlsl
index be69b4f..56b75af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_756031() {
+uint3 textureDimensions_756031() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_756031();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_756031();
+ prevent_dce.Store3(0u, asuint(textureDimensions_756031()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_756031();
+ prevent_dce.Store3(0u, asuint(textureDimensions_756031()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_756031();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.fxc.hlsl
index be69b4f..56b75af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_756031() {
+uint3 textureDimensions_756031() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_756031();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_756031();
+ prevent_dce.Store3(0u, asuint(textureDimensions_756031()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_756031();
+ prevent_dce.Store3(0u, asuint(textureDimensions_756031()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_756031();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.glsl
index 3ad2e52..a710afb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.glsl
@@ -1,48 +1,26 @@
#version 310 es
-
-uniform highp isampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_756031() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_756031();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_756031() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_756031() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_756031();
+ prevent_dce.inner = textureDimensions_756031();
}
void main() {
@@ -52,19 +30,24 @@
#version 310 es
uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_756031() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_756031() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_756031();
+ prevent_dce.inner = textureDimensions_756031();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -72,3 +55,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_756031() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_756031();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.msl
index 1ae75d1..d4259bf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_756031(texture3d<int, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_756031(texture3d<int, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint3 res = uint3(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1), tint_symbol_1.get_depth(arg_1));
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_756031(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_756031(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_756031(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_756031(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_756031(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_756031(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.spvasm
index af87151..462af77 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_756031 "textureDimensions_756031"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %31 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_756031 = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v3uint Function %31
+%textureDimensions_756031 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v3uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v3uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %35 = OpLoad %v3uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v3uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v3uint %textureDimensions_756031
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_756031
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v3uint %textureDimensions_756031
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %57 = OpFunctionCall %v3uint %textureDimensions_756031
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v3uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_756031
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_756031
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.wgsl
index 7c6c200..4ce4431 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756031.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_3d<i32>;
-fn textureDimensions_756031() {
+fn textureDimensions_756031() -> vec3<u32> {
var arg_1 = 1i;
var res : vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_756031();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_756031();
+ prevent_dce = textureDimensions_756031();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_756031();
+ prevent_dce = textureDimensions_756031();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_756031();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl
index 5027af8..0cfeded 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32float, write>;
// fn textureDimensions(texture: texture_storage_2d_array<r32float, write>) -> vec2<u32>
-fn textureDimensions_756304() {
+fn textureDimensions_756304() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_756304();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_756304();
+ prevent_dce = textureDimensions_756304();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_756304();
+ prevent_dce = textureDimensions_756304();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_756304();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.dxc.hlsl
index 72179c1..f7304f7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_756304() {
+uint2 textureDimensions_756304() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_756304();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_756304();
+ prevent_dce.Store2(0u, asuint(textureDimensions_756304()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_756304();
+ prevent_dce.Store2(0u, asuint(textureDimensions_756304()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_756304();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.fxc.hlsl
index 72179c1..f7304f7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_756304() {
+uint2 textureDimensions_756304() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_756304();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_756304();
+ prevent_dce.Store2(0u, asuint(textureDimensions_756304()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_756304();
+ prevent_dce.Store2(0u, asuint(textureDimensions_756304()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_756304();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.glsl
index 231ad49..f169d1d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_756304() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_756304();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_756304() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_756304() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_756304();
+ prevent_dce.inner = textureDimensions_756304();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_756304() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_756304() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_756304();
+ prevent_dce.inner = textureDimensions_756304();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_756304() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_756304();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.msl
index 19beb5b..94cc1c9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_756304(texture2d_array<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_756304(texture2d_array<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_756304(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_756304(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_756304(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_756304(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_756304(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_756304(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.spvasm
index 5acbfc0..ac6825d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_756304 "textureDimensions_756304"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_756304 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_756304 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_756304
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_756304
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_756304
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_756304
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_756304
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_756304
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.wgsl
index b87a0d0..d3e29bd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/756304.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32float, write>;
-fn textureDimensions_756304() {
+fn textureDimensions_756304() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_756304();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_756304();
+ prevent_dce = textureDimensions_756304();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_756304();
+ prevent_dce = textureDimensions_756304();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_756304();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl
index 7e57113..45ae89b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8sint, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba8sint, read>) -> vec3<u32>
-fn textureDimensions_790e57() {
+fn textureDimensions_790e57() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_790e57();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_790e57();
+ prevent_dce = textureDimensions_790e57();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_790e57();
+ prevent_dce = textureDimensions_790e57();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_790e57();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.dxc.hlsl
index fa3a703..848961a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_790e57() {
+uint3 textureDimensions_790e57() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_790e57();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_790e57();
+ prevent_dce.Store3(0u, asuint(textureDimensions_790e57()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_790e57();
+ prevent_dce.Store3(0u, asuint(textureDimensions_790e57()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_790e57();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.fxc.hlsl
index fa3a703..848961a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_790e57() {
+uint3 textureDimensions_790e57() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_790e57();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_790e57();
+ prevent_dce.Store3(0u, asuint(textureDimensions_790e57()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_790e57();
+ prevent_dce.Store3(0u, asuint(textureDimensions_790e57()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_790e57();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.glsl
index 3ac9439..85527d9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8i) uniform highp readonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_790e57() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_790e57();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_790e57() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_790e57() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_790e57();
+ prevent_dce.inner = textureDimensions_790e57();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_790e57() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_790e57() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_790e57();
+ prevent_dce.inner = textureDimensions_790e57();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_790e57() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_790e57();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.msl
index a5788b3..7570fd3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_790e57(texture3d<int, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_790e57(texture3d<int, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_790e57(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_790e57(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_790e57(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_790e57(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_790e57(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_790e57(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.spvasm
index d23a18d..8e9b904 100644
--- a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_790e57 "textureDimensions_790e57"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_790e57 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_790e57 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_790e57
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_790e57
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_790e57
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_790e57
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_790e57
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_790e57
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.wgsl
index 51a54f4..321022f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/790e57.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read>;
-fn textureDimensions_790e57() {
+fn textureDimensions_790e57() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_790e57();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_790e57();
+ prevent_dce = textureDimensions_790e57();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_790e57();
+ prevent_dce = textureDimensions_790e57();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_790e57();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl
index 239f4be..75a16f8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8unorm, read_write>) -> vec2<u32>
-fn textureDimensions_795fbb() {
+fn textureDimensions_795fbb() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_795fbb();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_795fbb();
+ prevent_dce = textureDimensions_795fbb();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_795fbb();
+ prevent_dce = textureDimensions_795fbb();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_795fbb();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.dxc.hlsl
index eba248d..f82ceb0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_795fbb() {
+uint2 textureDimensions_795fbb() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_795fbb();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_795fbb();
+ prevent_dce.Store2(0u, asuint(textureDimensions_795fbb()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_795fbb();
+ prevent_dce.Store2(0u, asuint(textureDimensions_795fbb()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_795fbb();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.fxc.hlsl
index eba248d..f82ceb0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_795fbb() {
+uint2 textureDimensions_795fbb() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_795fbb();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_795fbb();
+ prevent_dce.Store2(0u, asuint(textureDimensions_795fbb()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_795fbb();
+ prevent_dce.Store2(0u, asuint(textureDimensions_795fbb()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_795fbb();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.glsl
index 050a533..6a29446 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_795fbb() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_795fbb();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_795fbb() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_795fbb() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_795fbb();
+ prevent_dce.inner = textureDimensions_795fbb();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_795fbb() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_795fbb() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_795fbb();
+ prevent_dce.inner = textureDimensions_795fbb();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_795fbb() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_795fbb();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.msl
index fcec216..4b250b9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_795fbb(texture2d_array<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_795fbb(texture2d_array<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_795fbb(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_795fbb(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_795fbb(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_795fbb(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_795fbb(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_795fbb(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.spvasm
index 0ec77d3..0245a7a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_795fbb "textureDimensions_795fbb"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_795fbb = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_795fbb = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_795fbb
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_795fbb
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_795fbb
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_795fbb
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_795fbb
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_795fbb
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.wgsl
index d4e3a9c..73694d3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/795fbb.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read_write>;
-fn textureDimensions_795fbb() {
+fn textureDimensions_795fbb() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_795fbb();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_795fbb();
+ prevent_dce = textureDimensions_795fbb();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_795fbb();
+ prevent_dce = textureDimensions_795fbb();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_795fbb();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl
index 8a63207..e0e015b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32uint, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba32uint, read>) -> u32
-fn textureDimensions_797c30() {
+fn textureDimensions_797c30() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_797c30();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_797c30();
+ prevent_dce = textureDimensions_797c30();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_797c30();
+ prevent_dce = textureDimensions_797c30();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_797c30();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.dxc.hlsl
index 0148350..58091cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_797c30() {
+uint textureDimensions_797c30() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_797c30();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_797c30();
+ prevent_dce.Store(0u, asuint(textureDimensions_797c30()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_797c30();
+ prevent_dce.Store(0u, asuint(textureDimensions_797c30()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_797c30();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.fxc.hlsl
index 0148350..58091cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_797c30() {
+uint textureDimensions_797c30() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_797c30();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_797c30();
+ prevent_dce.Store(0u, asuint(textureDimensions_797c30()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_797c30();
+ prevent_dce.Store(0u, asuint(textureDimensions_797c30()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_797c30();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.glsl
index bcb0187..25b159c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp readonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_797c30() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_797c30();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_797c30() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_797c30() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_797c30();
+ prevent_dce.inner = textureDimensions_797c30();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_797c30() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_797c30() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_797c30();
+ prevent_dce.inner = textureDimensions_797c30();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_797c30() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_797c30();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.msl
index 5004dea..72014d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_797c30(texture1d<uint, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_797c30(texture1d<uint, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_797c30(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_797c30(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_797c30(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_797c30(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_797c30(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_797c30(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.spvasm
index 2c56b0d..018e077 100644
--- a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_797c30 "textureDimensions_797c30"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_797c30 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_797c30 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_797c30
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_797c30
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_797c30
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_797c30
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_797c30
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_797c30
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.wgsl
index 35d1dce..eadad37 100644
--- a/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/797c30.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read>;
-fn textureDimensions_797c30() {
+fn textureDimensions_797c30() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_797c30();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_797c30();
+ prevent_dce = textureDimensions_797c30();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_797c30();
+ prevent_dce = textureDimensions_797c30();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_797c30();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl
index 74c4972..18ba20b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_depth_cube;
// fn textureDimensions(texture: texture_depth_cube, level: i32) -> vec2<u32>
-fn textureDimensions_79d168() {
+fn textureDimensions_79d168() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_79d168();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_79d168();
+ prevent_dce = textureDimensions_79d168();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_79d168();
+ prevent_dce = textureDimensions_79d168();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_79d168();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.dxc.hlsl
index 2c1ef84..6218ef3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCube arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_79d168() {
+uint2 textureDimensions_79d168() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_79d168();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_79d168();
+ prevent_dce.Store2(0u, asuint(textureDimensions_79d168()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_79d168();
+ prevent_dce.Store2(0u, asuint(textureDimensions_79d168()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_79d168();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.fxc.hlsl
index 2c1ef84..6218ef3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCube arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_79d168() {
+uint2 textureDimensions_79d168() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_79d168();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_79d168();
+ prevent_dce.Store2(0u, asuint(textureDimensions_79d168()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_79d168();
+ prevent_dce.Store2(0u, asuint(textureDimensions_79d168()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_79d168();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.glsl
index caff85e..8490343 100644
--- a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp samplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_79d168() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_79d168();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_79d168() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_79d168() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_79d168();
+ prevent_dce.inner = textureDimensions_79d168();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_79d168() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_79d168() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_79d168();
+ prevent_dce.inner = textureDimensions_79d168();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_79d168() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_79d168();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.msl
index 96ad7ea..94841d6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_79d168(depthcube<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_79d168(depthcube<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depthcube<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_79d168(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depthcube<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_79d168(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depthcube<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_79d168(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depthcube<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_79d168(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depthcube<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depthcube<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depthcube<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_79d168(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depthcube<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_79d168(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.spvasm
index 7e40b8e..aa7a5d9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_79d168 "textureDimensions_79d168"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_79d168 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_79d168 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_79d168
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_79d168
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_79d168
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_79d168
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_79d168
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_79d168
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.wgsl
index 9e76ce3..61dc19e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/79d168.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_depth_cube;
-fn textureDimensions_79d168() {
+fn textureDimensions_79d168() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_79d168();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_79d168();
+ prevent_dce = textureDimensions_79d168();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_79d168();
+ prevent_dce = textureDimensions_79d168();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_79d168();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl
index d16e739..e11bc60 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_3d<u32>;
// fn textureDimensions(texture: texture_3d<u32>) -> vec3<u32>
-fn textureDimensions_7a3890() {
+fn textureDimensions_7a3890() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7a3890();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7a3890();
+ prevent_dce = textureDimensions_7a3890();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7a3890();
+ prevent_dce = textureDimensions_7a3890();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7a3890();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.dxc.hlsl
index bca915b..e964059 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7a3890() {
+uint3 textureDimensions_7a3890() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7a3890();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7a3890();
+ prevent_dce.Store3(0u, asuint(textureDimensions_7a3890()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7a3890();
+ prevent_dce.Store3(0u, asuint(textureDimensions_7a3890()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7a3890();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.fxc.hlsl
index bca915b..e964059 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7a3890() {
+uint3 textureDimensions_7a3890() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7a3890();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7a3890();
+ prevent_dce.Store3(0u, asuint(textureDimensions_7a3890()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7a3890();
+ prevent_dce.Store3(0u, asuint(textureDimensions_7a3890()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7a3890();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.glsl
index 355d19c..acbd9b1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_7a3890() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_7a3890();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_7a3890() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_7a3890() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_7a3890();
+ prevent_dce.inner = textureDimensions_7a3890();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_7a3890() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_7a3890() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_7a3890();
+ prevent_dce.inner = textureDimensions_7a3890();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_7a3890() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_7a3890();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.msl
index 46e8389..c333ee1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7a3890(texture3d<uint, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_7a3890(texture3d<uint, access::sample> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_7a3890(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_7a3890(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_7a3890(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7a3890(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7a3890(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7a3890(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.spvasm
index 3e16f4d..bed858b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7a3890 "textureDimensions_7a3890"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %27 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7a3890 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %27
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %v3uint %22 %int_0
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %31 = OpLoad %v3uint %res
- OpStore %30 %31
+%textureDimensions_7a3890 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySizeLod %v3uint %24 %int_0
+ OpStore %res %23
+ %29 = OpLoad %v3uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v3uint %textureDimensions_7a3890
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_7a3890
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v3uint %textureDimensions_7a3890
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %53 = OpFunctionCall %v3uint %textureDimensions_7a3890
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v3uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_7a3890
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_7a3890
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.wgsl
index 0538678..f4c32b4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a3890.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_3d<u32>;
-fn textureDimensions_7a3890() {
+fn textureDimensions_7a3890() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7a3890();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7a3890();
+ prevent_dce = textureDimensions_7a3890();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7a3890();
+ prevent_dce = textureDimensions_7a3890();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7a3890();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl
index de1e023..cc1886b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_cube<u32>;
// fn textureDimensions(texture: texture_cube<u32>) -> vec2<u32>
-fn textureDimensions_7a9e30() {
+fn textureDimensions_7a9e30() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7a9e30();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7a9e30();
+ prevent_dce = textureDimensions_7a9e30();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7a9e30();
+ prevent_dce = textureDimensions_7a9e30();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7a9e30();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.dxc.hlsl
index 52ccf80..a87f3a6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
TextureCube<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7a9e30() {
+uint2 textureDimensions_7a9e30() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7a9e30();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7a9e30();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7a9e30()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7a9e30();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7a9e30()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7a9e30();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.fxc.hlsl
index 52ccf80..a87f3a6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
TextureCube<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7a9e30() {
+uint2 textureDimensions_7a9e30() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7a9e30();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7a9e30();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7a9e30()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7a9e30();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7a9e30()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7a9e30();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.glsl
index a5484a2..3aaf678 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp usamplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_7a9e30() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_7a9e30();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_7a9e30() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_7a9e30() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_7a9e30();
+ prevent_dce.inner = textureDimensions_7a9e30();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_7a9e30() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_7a9e30() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_7a9e30();
+ prevent_dce.inner = textureDimensions_7a9e30();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_7a9e30() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_7a9e30();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.msl
index 8244dd9..1f7e6fa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7a9e30(texturecube<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_7a9e30(texturecube<uint, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_7a9e30(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_7a9e30(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_7a9e30(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7a9e30(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7a9e30(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7a9e30(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.spvasm
index c544c20..67046a4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7a9e30 "textureDimensions_7a9e30"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7a9e30 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %v2uint %22 %int_0
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_7a9e30 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySizeLod %v2uint %24 %int_0
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_7a9e30
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_7a9e30
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_7a9e30
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_7a9e30
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_7a9e30
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_7a9e30
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.wgsl
index d29020c..b199663 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7a9e30.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_cube<u32>;
-fn textureDimensions_7a9e30() {
+fn textureDimensions_7a9e30() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7a9e30();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7a9e30();
+ prevent_dce = textureDimensions_7a9e30();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7a9e30();
+ prevent_dce = textureDimensions_7a9e30();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7a9e30();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl
index 59b3b4d..cdb32f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32float, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba32float, read>) -> u32
-fn textureDimensions_7c753b() {
+fn textureDimensions_7c753b() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7c753b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_7c753b();
+ prevent_dce = textureDimensions_7c753b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7c753b();
+ prevent_dce = textureDimensions_7c753b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7c753b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.dxc.hlsl
index f26b62b..1db987d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7c753b() {
+uint textureDimensions_7c753b() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7c753b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7c753b();
+ prevent_dce.Store(0u, asuint(textureDimensions_7c753b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7c753b();
+ prevent_dce.Store(0u, asuint(textureDimensions_7c753b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7c753b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.fxc.hlsl
index f26b62b..1db987d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7c753b() {
+uint textureDimensions_7c753b() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7c753b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7c753b();
+ prevent_dce.Store(0u, asuint(textureDimensions_7c753b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7c753b();
+ prevent_dce.Store(0u, asuint(textureDimensions_7c753b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7c753b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.glsl
index 74f588d..8fb7c8a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_7c753b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_7c753b();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp readonly image2D arg_0;
+uint textureDimensions_7c753b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_7c753b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_7c753b();
+ prevent_dce.inner = textureDimensions_7c753b();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp readonly image2D arg_0;
+uint textureDimensions_7c753b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_7c753b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_7c753b();
+ prevent_dce.inner = textureDimensions_7c753b();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32f) uniform highp readonly image2D arg_0;
+uint textureDimensions_7c753b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_7c753b();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.msl
index 445d3cd..6e7a838 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7c753b(texture1d<float, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_7c753b(texture1d<float, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_7c753b(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_7c753b(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_7c753b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7c753b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7c753b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7c753b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.spvasm
index d7e6423..fb7b95a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7c753b "textureDimensions_7c753b"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7c753b = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_7c753b = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_7c753b
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_7c753b
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_7c753b
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_7c753b
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_7c753b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_7c753b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.wgsl
index 15533d0..50000e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c753b.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, read>;
-fn textureDimensions_7c753b() {
+fn textureDimensions_7c753b() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7c753b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_7c753b();
+ prevent_dce = textureDimensions_7c753b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7c753b();
+ prevent_dce = textureDimensions_7c753b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7c753b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl
index 6c86762..24240e4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32sint, read_write>) -> vec2<u32>
-fn textureDimensions_7c7c64() {
+fn textureDimensions_7c7c64() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7c7c64();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7c7c64();
+ prevent_dce = textureDimensions_7c7c64();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7c7c64();
+ prevent_dce = textureDimensions_7c7c64();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7c7c64();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.dxc.hlsl
index a77b85d..dae5b6a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7c7c64() {
+uint2 textureDimensions_7c7c64() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7c7c64();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7c7c64();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7c7c64()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7c7c64();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7c7c64()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7c7c64();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.fxc.hlsl
index a77b85d..dae5b6a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7c7c64() {
+uint2 textureDimensions_7c7c64() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7c7c64();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7c7c64();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7c7c64()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7c7c64();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7c7c64()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7c7c64();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.msl
index 4b4d437..61a8bfe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7c7c64(texture2d_array<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_7c7c64(texture2d_array<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_7c7c64(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_7c7c64(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_7c7c64(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7c7c64(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7c7c64(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7c7c64(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.spvasm
index 894f0dd..7efe268 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,75 +21,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7c7c64 "textureDimensions_7c7c64"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7c7c64 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_7c7c64 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_7c7c64
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_7c7c64
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_7c7c64
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_7c7c64
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_7c7c64
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_7c7c64
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.wgsl
index 8398940..8c06909 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7c7c64.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read_write>;
-fn textureDimensions_7c7c64() {
+fn textureDimensions_7c7c64() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7c7c64();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7c7c64();
+ prevent_dce = textureDimensions_7c7c64();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7c7c64();
+ prevent_dce = textureDimensions_7c7c64();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7c7c64();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl
index 7c0d151..a8902ab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32uint, read>;
// fn textureDimensions(texture: texture_storage_1d<rg32uint, read>) -> u32
-fn textureDimensions_7d8439() {
+fn textureDimensions_7d8439() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7d8439();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_7d8439();
+ prevent_dce = textureDimensions_7d8439();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7d8439();
+ prevent_dce = textureDimensions_7d8439();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7d8439();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.dxc.hlsl
index fbed68c..c7cd0be 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7d8439() {
+uint textureDimensions_7d8439() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7d8439();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7d8439();
+ prevent_dce.Store(0u, asuint(textureDimensions_7d8439()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7d8439();
+ prevent_dce.Store(0u, asuint(textureDimensions_7d8439()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7d8439();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.fxc.hlsl
index fbed68c..c7cd0be 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7d8439() {
+uint textureDimensions_7d8439() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7d8439();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7d8439();
+ prevent_dce.Store(0u, asuint(textureDimensions_7d8439()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7d8439();
+ prevent_dce.Store(0u, asuint(textureDimensions_7d8439()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7d8439();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.msl
index 6669a37..a735040 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7d8439(texture1d<uint, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_7d8439(texture1d<uint, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_7d8439(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_7d8439(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_7d8439(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7d8439(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7d8439(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7d8439(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.spvasm
index f041802..e1bbd4a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,72 +22,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7d8439 "textureDimensions_7d8439"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7d8439 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_7d8439 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_7d8439
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_7d8439
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_7d8439
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_7d8439
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_7d8439
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_7d8439
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.wgsl
index 9056f2b..38bdab7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7d8439.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, read>;
-fn textureDimensions_7d8439() {
+fn textureDimensions_7d8439() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7d8439();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_7d8439();
+ prevent_dce = textureDimensions_7d8439();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7d8439();
+ prevent_dce = textureDimensions_7d8439();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7d8439();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl
index 3f51525..459d96c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8sint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba8sint, read_write>) -> vec3<u32>
-fn textureDimensions_7ea4b5() {
+fn textureDimensions_7ea4b5() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7ea4b5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7ea4b5();
+ prevent_dce = textureDimensions_7ea4b5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7ea4b5();
+ prevent_dce = textureDimensions_7ea4b5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7ea4b5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.dxc.hlsl
index a279e24..04014ae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7ea4b5() {
+uint3 textureDimensions_7ea4b5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7ea4b5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7ea4b5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_7ea4b5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7ea4b5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_7ea4b5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7ea4b5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.fxc.hlsl
index a279e24..04014ae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7ea4b5() {
+uint3 textureDimensions_7ea4b5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7ea4b5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7ea4b5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_7ea4b5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7ea4b5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_7ea4b5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7ea4b5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.glsl
index b77fcdb..08d0831 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8i) uniform highp writeonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_7ea4b5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_7ea4b5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_7ea4b5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_7ea4b5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_7ea4b5();
+ prevent_dce.inner = textureDimensions_7ea4b5();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_7ea4b5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_7ea4b5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_7ea4b5();
+ prevent_dce.inner = textureDimensions_7ea4b5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_7ea4b5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_7ea4b5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.msl
index fc2012e..d1b799e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7ea4b5(texture3d<int, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_7ea4b5(texture3d<int, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_7ea4b5(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_7ea4b5(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_7ea4b5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7ea4b5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7ea4b5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7ea4b5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.spvasm
index eeb33e4..7fe614c3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7ea4b5 "textureDimensions_7ea4b5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7ea4b5 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_7ea4b5 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_7ea4b5
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_7ea4b5
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_7ea4b5
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_7ea4b5
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_7ea4b5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_7ea4b5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.wgsl
index 9fd1368..04a7f43 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7ea4b5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8sint, read_write>;
-fn textureDimensions_7ea4b5() {
+fn textureDimensions_7ea4b5() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7ea4b5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7ea4b5();
+ prevent_dce = textureDimensions_7ea4b5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7ea4b5();
+ prevent_dce = textureDimensions_7ea4b5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7ea4b5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl
index 4a38dd2..a59b12d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16uint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16uint, read>) -> vec2<u32>
-fn textureDimensions_7edb05() {
+fn textureDimensions_7edb05() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7edb05();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7edb05();
+ prevent_dce = textureDimensions_7edb05();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7edb05();
+ prevent_dce = textureDimensions_7edb05();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7edb05();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.dxc.hlsl
index 3cc7970..a27563f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7edb05() {
+uint2 textureDimensions_7edb05() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7edb05();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7edb05();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7edb05()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7edb05();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7edb05()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7edb05();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.fxc.hlsl
index 3cc7970..a27563f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_7edb05() {
+uint2 textureDimensions_7edb05() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_7edb05();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_7edb05();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7edb05()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_7edb05();
+ prevent_dce.Store2(0u, asuint(textureDimensions_7edb05()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_7edb05();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.glsl
index b4cc3ec..2d3247c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp readonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_7edb05() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_7edb05();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_7edb05() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_7edb05() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_7edb05();
+ prevent_dce.inner = textureDimensions_7edb05();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_7edb05() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_7edb05() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_7edb05();
+ prevent_dce.inner = textureDimensions_7edb05();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_7edb05() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_7edb05();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.msl
index cb6b073..635086b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_7edb05(texture2d_array<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_7edb05(texture2d_array<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_7edb05(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_7edb05(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_7edb05(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_7edb05(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_7edb05(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_7edb05(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.spvasm
index 21e3776..2dd5090 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_7edb05 "textureDimensions_7edb05"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_7edb05 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_7edb05 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_7edb05
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_7edb05
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_7edb05
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_7edb05
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_7edb05
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_7edb05
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.wgsl
index e3ed291..96cf95a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/7edb05.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16uint, read>;
-fn textureDimensions_7edb05() {
+fn textureDimensions_7edb05() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_7edb05();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_7edb05();
+ prevent_dce = textureDimensions_7edb05();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_7edb05();
+ prevent_dce = textureDimensions_7edb05();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_7edb05();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl
index 976cff2..ba02d1e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<bgra8unorm, read>;
// fn textureDimensions(texture: texture_storage_3d<bgra8unorm, read>) -> vec3<u32>
-fn textureDimensions_8057cb() {
+fn textureDimensions_8057cb() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8057cb();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8057cb();
+ prevent_dce = textureDimensions_8057cb();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8057cb();
+ prevent_dce = textureDimensions_8057cb();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8057cb();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.dxc.hlsl
index e99a6d2..e606ad9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8057cb() {
+uint3 textureDimensions_8057cb() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8057cb();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8057cb();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8057cb()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8057cb();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8057cb()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8057cb();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.fxc.hlsl
index e99a6d2..e606ad9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8057cb() {
+uint3 textureDimensions_8057cb() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8057cb();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8057cb();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8057cb()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8057cb();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8057cb()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8057cb();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.glsl
index 9009e12..8bc5dd5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8) uniform highp readonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_8057cb() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_8057cb();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_8057cb() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_8057cb() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_8057cb();
+ prevent_dce.inner = textureDimensions_8057cb();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_8057cb() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_8057cb() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_8057cb();
+ prevent_dce.inner = textureDimensions_8057cb();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_8057cb() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_8057cb();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.msl
index bcf8c18..1b8b9e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8057cb(texture3d<float, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_8057cb(texture3d<float, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_8057cb(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_8057cb(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_8057cb(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8057cb(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8057cb(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8057cb(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.spvasm
index 63bcdf4..16682ca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8057cb "textureDimensions_8057cb"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8057cb = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_8057cb = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_8057cb
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_8057cb
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_8057cb
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_8057cb
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_8057cb
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_8057cb
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.wgsl
index 8e6c611..7c07936 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8057cb.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read>;
-fn textureDimensions_8057cb() {
+fn textureDimensions_8057cb() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8057cb();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8057cb();
+ prevent_dce = textureDimensions_8057cb();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8057cb();
+ prevent_dce = textureDimensions_8057cb();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8057cb();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl
index fd28e07..4d51a77 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<bgra8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_3d<bgra8unorm, read_write>) -> vec3<u32>
-fn textureDimensions_8243a1() {
+fn textureDimensions_8243a1() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8243a1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8243a1();
+ prevent_dce = textureDimensions_8243a1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8243a1();
+ prevent_dce = textureDimensions_8243a1();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8243a1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.dxc.hlsl
index e28c072..e349c9d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8243a1() {
+uint3 textureDimensions_8243a1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8243a1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8243a1();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8243a1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8243a1();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8243a1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8243a1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.fxc.hlsl
index e28c072..e349c9d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8243a1() {
+uint3 textureDimensions_8243a1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8243a1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8243a1();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8243a1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8243a1();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8243a1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8243a1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.glsl
index 18a6326..9ddafb9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_8243a1() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_8243a1();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_8243a1() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_8243a1() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_8243a1();
+ prevent_dce.inner = textureDimensions_8243a1();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_8243a1() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_8243a1() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_8243a1();
+ prevent_dce.inner = textureDimensions_8243a1();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_8243a1() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_8243a1();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.msl
index 22181a2..fb90328 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8243a1(texture3d<float, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_8243a1(texture3d<float, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_8243a1(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_8243a1(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_8243a1(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8243a1(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8243a1(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8243a1(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.spvasm
index 34d9e68..41fc4d3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8243a1 "textureDimensions_8243a1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8243a1 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_8243a1 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_8243a1
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_8243a1
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_8243a1
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_8243a1
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_8243a1
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_8243a1
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.wgsl
index 08b5900..5a38759 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8243a1.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<bgra8unorm, read_write>;
-fn textureDimensions_8243a1() {
+fn textureDimensions_8243a1() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8243a1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8243a1();
+ prevent_dce = textureDimensions_8243a1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8243a1();
+ prevent_dce = textureDimensions_8243a1();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8243a1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl
index c0504d6..1fafbc6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rg32sint, read_write>) -> vec2<u32>
-fn textureDimensions_835f90() {
+fn textureDimensions_835f90() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_835f90();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_835f90();
+ prevent_dce = textureDimensions_835f90();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_835f90();
+ prevent_dce = textureDimensions_835f90();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_835f90();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.dxc.hlsl
index a20313f..5a243cd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_835f90() {
+uint2 textureDimensions_835f90() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_835f90();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_835f90();
+ prevent_dce.Store2(0u, asuint(textureDimensions_835f90()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_835f90();
+ prevent_dce.Store2(0u, asuint(textureDimensions_835f90()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_835f90();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.fxc.hlsl
index a20313f..5a243cd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_835f90() {
+uint2 textureDimensions_835f90() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_835f90();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_835f90();
+ prevent_dce.Store2(0u, asuint(textureDimensions_835f90()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_835f90();
+ prevent_dce.Store2(0u, asuint(textureDimensions_835f90()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_835f90();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.msl
index 273b59f..232f4e3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_835f90(texture2d<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_835f90(texture2d<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_835f90(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_835f90(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_835f90(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_835f90(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_835f90(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_835f90(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.spvasm
index 0a5db9b..79437fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_835f90 "textureDimensions_835f90"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_835f90 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_835f90 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_835f90
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_835f90
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_835f90
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_835f90
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_835f90
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_835f90
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.wgsl
index 118f466..164dd3f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/835f90.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32sint, read_write>;
-fn textureDimensions_835f90() {
+fn textureDimensions_835f90() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_835f90();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_835f90();
+ prevent_dce = textureDimensions_835f90();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_835f90();
+ prevent_dce = textureDimensions_835f90();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_835f90();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl
index c281b23..9978dda 100644
--- a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8sint, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba8sint, read>) -> u32
-fn textureDimensions_841ebe() {
+fn textureDimensions_841ebe() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_841ebe();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_841ebe();
+ prevent_dce = textureDimensions_841ebe();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_841ebe();
+ prevent_dce = textureDimensions_841ebe();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_841ebe();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.dxc.hlsl
index 10603e2..624efaa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_841ebe() {
+uint textureDimensions_841ebe() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_841ebe();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_841ebe();
+ prevent_dce.Store(0u, asuint(textureDimensions_841ebe()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_841ebe();
+ prevent_dce.Store(0u, asuint(textureDimensions_841ebe()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_841ebe();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.fxc.hlsl
index 10603e2..624efaa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_841ebe() {
+uint textureDimensions_841ebe() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_841ebe();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_841ebe();
+ prevent_dce.Store(0u, asuint(textureDimensions_841ebe()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_841ebe();
+ prevent_dce.Store(0u, asuint(textureDimensions_841ebe()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_841ebe();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.glsl
index 1e1b0c2..3e87fb7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp readonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_841ebe() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_841ebe();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_841ebe() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_841ebe() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_841ebe();
+ prevent_dce.inner = textureDimensions_841ebe();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_841ebe() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_841ebe() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_841ebe();
+ prevent_dce.inner = textureDimensions_841ebe();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_841ebe() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_841ebe();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.msl
index 4a333b4..e93187a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_841ebe(texture1d<int, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_841ebe(texture1d<int, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_841ebe(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_841ebe(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_841ebe(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_841ebe(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_841ebe(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_841ebe(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.spvasm
index cb2ceb4..30d0021 100644
--- a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_841ebe "textureDimensions_841ebe"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_841ebe = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_841ebe = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_841ebe
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_841ebe
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_841ebe
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_841ebe
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_841ebe
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_841ebe
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.wgsl
index 4822bb7..a89146f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/841ebe.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, read>;
-fn textureDimensions_841ebe() {
+fn textureDimensions_841ebe() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_841ebe();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_841ebe();
+ prevent_dce = textureDimensions_841ebe();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_841ebe();
+ prevent_dce = textureDimensions_841ebe();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_841ebe();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl
index 64c8938..2873057 100644
--- a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<bgra8unorm, write>;
// fn textureDimensions(texture: texture_storage_1d<bgra8unorm, write>) -> u32
-fn textureDimensions_84f363() {
+fn textureDimensions_84f363() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_84f363();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_84f363();
+ prevent_dce = textureDimensions_84f363();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_84f363();
+ prevent_dce = textureDimensions_84f363();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_84f363();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.dxc.hlsl
index bd53d10..0b839e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_84f363() {
+uint textureDimensions_84f363() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_84f363();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_84f363();
+ prevent_dce.Store(0u, asuint(textureDimensions_84f363()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_84f363();
+ prevent_dce.Store(0u, asuint(textureDimensions_84f363()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_84f363();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.fxc.hlsl
index bd53d10..0b839e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_84f363() {
+uint textureDimensions_84f363() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_84f363();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_84f363();
+ prevent_dce.Store(0u, asuint(textureDimensions_84f363()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_84f363();
+ prevent_dce.Store(0u, asuint(textureDimensions_84f363()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_84f363();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.glsl
index 50dac2a..b270078 100644
--- a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_84f363() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_84f363();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_84f363() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_84f363() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_84f363();
+ prevent_dce.inner = textureDimensions_84f363();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_84f363() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_84f363() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_84f363();
+ prevent_dce.inner = textureDimensions_84f363();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_84f363() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_84f363();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.msl
index c6f246a..67ba6ca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_84f363(texture1d<float, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_84f363(texture1d<float, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_84f363(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_84f363(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_84f363(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_84f363(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_84f363(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_84f363(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.spvasm
index 0b4c1cd..a2d0524 100644
--- a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_84f363 "textureDimensions_84f363"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_84f363 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_84f363 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_84f363
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_84f363
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_84f363
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_84f363
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_84f363
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_84f363
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.wgsl
index 8a3fd51..c932f7c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/84f363.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<bgra8unorm, write>;
-fn textureDimensions_84f363() {
+fn textureDimensions_84f363() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_84f363();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_84f363();
+ prevent_dce = textureDimensions_84f363();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_84f363();
+ prevent_dce = textureDimensions_84f363();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_84f363();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl
index 383d63b..1cc1a53 100644
--- a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8snorm, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8snorm, write>) -> vec2<u32>
-fn textureDimensions_867ead() {
+fn textureDimensions_867ead() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_867ead();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_867ead();
+ prevent_dce = textureDimensions_867ead();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_867ead();
+ prevent_dce = textureDimensions_867ead();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_867ead();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.dxc.hlsl
index 5a613e1..d7a8cb8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_867ead() {
+uint2 textureDimensions_867ead() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_867ead();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_867ead();
+ prevent_dce.Store2(0u, asuint(textureDimensions_867ead()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_867ead();
+ prevent_dce.Store2(0u, asuint(textureDimensions_867ead()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_867ead();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.fxc.hlsl
index 5a613e1..d7a8cb8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_867ead() {
+uint2 textureDimensions_867ead() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_867ead();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_867ead();
+ prevent_dce.Store2(0u, asuint(textureDimensions_867ead()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_867ead();
+ prevent_dce.Store2(0u, asuint(textureDimensions_867ead()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_867ead();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.glsl
index c32faa0..78869c6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_867ead() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_867ead();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_867ead() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_867ead() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_867ead();
+ prevent_dce.inner = textureDimensions_867ead();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_867ead() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_867ead() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_867ead();
+ prevent_dce.inner = textureDimensions_867ead();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_867ead() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_867ead();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.msl
index 53c9ef9..3233ada 100644
--- a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_867ead(texture2d_array<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_867ead(texture2d_array<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_867ead(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_867ead(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_867ead(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_867ead(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_867ead(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_867ead(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.spvasm
index d7f86ed..9d27ed8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_867ead "textureDimensions_867ead"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_867ead = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_867ead = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_867ead
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_867ead
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_867ead
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_867ead
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_867ead
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_867ead
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.wgsl
index aa25992..6fe3c09 100644
--- a/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/867ead.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, write>;
-fn textureDimensions_867ead() {
+fn textureDimensions_867ead() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_867ead();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_867ead();
+ prevent_dce = textureDimensions_867ead();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_867ead();
+ prevent_dce = textureDimensions_867ead();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_867ead();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl
index ab991c9..0e5386d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
// fn textureDimensions(texture: texture_cube_array<f32>) -> vec2<u32>
-fn textureDimensions_879b73() {
+fn textureDimensions_879b73() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_879b73();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_879b73();
+ prevent_dce = textureDimensions_879b73();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_879b73();
+ prevent_dce = textureDimensions_879b73();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_879b73();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.dxc.hlsl
index 1461f6a..b8d3508 100644
--- a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
TextureCubeArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_879b73() {
+uint2 textureDimensions_879b73() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_879b73();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_879b73();
+ prevent_dce.Store2(0u, asuint(textureDimensions_879b73()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_879b73();
+ prevent_dce.Store2(0u, asuint(textureDimensions_879b73()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_879b73();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.fxc.hlsl
index 1461f6a..b8d3508 100644
--- a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
TextureCubeArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_879b73() {
+uint2 textureDimensions_879b73() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_879b73();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_879b73();
+ prevent_dce.Store2(0u, asuint(textureDimensions_879b73()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_879b73();
+ prevent_dce.Store2(0u, asuint(textureDimensions_879b73()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_879b73();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.msl
index 99cb052..fbb3e44 100644
--- a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_879b73(texturecube_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_879b73(texturecube_array<float, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_879b73(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_879b73(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_879b73(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_879b73(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_879b73(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_879b73(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.spvasm
index f6f7d49..2651b76 100644
--- a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,76 +21,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_879b73 "textureDimensions_879b73"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %29 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %32 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %34 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %44 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %50 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_879b73 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %29
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v3uint %24 %int_0
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %32 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %33 = OpLoad %v2uint %res
- OpStore %32 %33
+%textureDimensions_879b73 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v3uint %26 %int_0
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %31 = OpLoad %v2uint %res
+ OpReturnValue %31
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %32
+ %35 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_879b73
+ OpStore %38 %39
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
- %36 = OpLabel
- %37 = OpFunctionCall %void %textureDimensions_879b73
- OpReturnValue %5
+%compute_main = OpFunction %void None %32
+ %41 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_879b73
+ OpStore %42 %43
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %40
+%vertex_main_inner = OpFunction %VertexOutput None %44
+ %47 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %50
+ %52 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %52 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_879b73
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %32
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_879b73
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_879b73
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.wgsl
index 1f03510..fbedacd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/879b73.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
-fn textureDimensions_879b73() {
+fn textureDimensions_879b73() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_879b73();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_879b73();
+ prevent_dce = textureDimensions_879b73();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_879b73();
+ prevent_dce = textureDimensions_879b73();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_879b73();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl
index 9b73e1a..5f260e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32uint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32uint, read>) -> vec2<u32>
-fn textureDimensions_87b42d() {
+fn textureDimensions_87b42d() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_87b42d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_87b42d();
+ prevent_dce = textureDimensions_87b42d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_87b42d();
+ prevent_dce = textureDimensions_87b42d();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_87b42d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.dxc.hlsl
index 2f2dc58..6b56a36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_87b42d() {
+uint2 textureDimensions_87b42d() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_87b42d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_87b42d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_87b42d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_87b42d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_87b42d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_87b42d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.fxc.hlsl
index 2f2dc58..6b56a36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_87b42d() {
+uint2 textureDimensions_87b42d() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_87b42d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_87b42d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_87b42d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_87b42d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_87b42d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_87b42d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.glsl
index a94c8e1..f5059fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp readonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_87b42d() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_87b42d();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_87b42d() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_87b42d() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_87b42d();
+ prevent_dce.inner = textureDimensions_87b42d();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_87b42d() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_87b42d() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_87b42d();
+ prevent_dce.inner = textureDimensions_87b42d();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32ui) uniform highp readonly uimage2DArray arg_0;
+uvec2 textureDimensions_87b42d() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_87b42d();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.msl
index 46d061a..b1e1c45 100644
--- a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_87b42d(texture2d_array<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_87b42d(texture2d_array<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_87b42d(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_87b42d(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_87b42d(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_87b42d(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_87b42d(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_87b42d(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.spvasm
index cf3cdf8..a397073 100644
--- a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_87b42d "textureDimensions_87b42d"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_87b42d = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_87b42d = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_87b42d
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_87b42d
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_87b42d
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_87b42d
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_87b42d
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_87b42d
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.wgsl
index 2b85019..afb0532 100644
--- a/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/87b42d.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32uint, read>;
-fn textureDimensions_87b42d() {
+fn textureDimensions_87b42d() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_87b42d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_87b42d();
+ prevent_dce = textureDimensions_87b42d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_87b42d();
+ prevent_dce = textureDimensions_87b42d();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_87b42d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl
index 63671d6..f519406 100644
--- a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8unorm, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8unorm, read>) -> vec2<u32>
-fn textureDimensions_881dd4() {
+fn textureDimensions_881dd4() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_881dd4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_881dd4();
+ prevent_dce = textureDimensions_881dd4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_881dd4();
+ prevent_dce = textureDimensions_881dd4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_881dd4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.dxc.hlsl
index 22bf658..9f540f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_881dd4() {
+uint2 textureDimensions_881dd4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_881dd4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_881dd4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_881dd4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_881dd4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_881dd4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_881dd4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.fxc.hlsl
index 22bf658..9f540f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_881dd4() {
+uint2 textureDimensions_881dd4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_881dd4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_881dd4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_881dd4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_881dd4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_881dd4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_881dd4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.glsl
index 3b1176f..f62bc9b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp readonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_881dd4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_881dd4();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_881dd4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_881dd4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_881dd4();
+ prevent_dce.inner = textureDimensions_881dd4();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_881dd4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_881dd4() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_881dd4();
+ prevent_dce.inner = textureDimensions_881dd4();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_881dd4() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_881dd4();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.msl
index 6e4ea66..b644830 100644
--- a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_881dd4(texture2d_array<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_881dd4(texture2d_array<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_881dd4(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_881dd4(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_881dd4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_881dd4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_881dd4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_881dd4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.spvasm
index 8f3723e..0d7ab89 100644
--- a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_881dd4 "textureDimensions_881dd4"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_881dd4 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_881dd4 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_881dd4
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_881dd4
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_881dd4
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_881dd4
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_881dd4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_881dd4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.wgsl
index b97309a..0534b774 100644
--- a/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/881dd4.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8unorm, read>;
-fn textureDimensions_881dd4() {
+fn textureDimensions_881dd4() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_881dd4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_881dd4();
+ prevent_dce = textureDimensions_881dd4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_881dd4();
+ prevent_dce = textureDimensions_881dd4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_881dd4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl
index df6c228..2f6342d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32sint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba32sint, read_write>) -> u32
-fn textureDimensions_8a2b17() {
+fn textureDimensions_8a2b17() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8a2b17();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_8a2b17();
+ prevent_dce = textureDimensions_8a2b17();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8a2b17();
+ prevent_dce = textureDimensions_8a2b17();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8a2b17();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.dxc.hlsl
index 6517412..c7f2595 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8a2b17() {
+uint textureDimensions_8a2b17() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8a2b17();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8a2b17();
+ prevent_dce.Store(0u, asuint(textureDimensions_8a2b17()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8a2b17();
+ prevent_dce.Store(0u, asuint(textureDimensions_8a2b17()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8a2b17();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.fxc.hlsl
index 6517412..c7f2595 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8a2b17() {
+uint textureDimensions_8a2b17() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8a2b17();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8a2b17();
+ prevent_dce.Store(0u, asuint(textureDimensions_8a2b17()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8a2b17();
+ prevent_dce.Store(0u, asuint(textureDimensions_8a2b17()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8a2b17();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.glsl
index d1d2a28..9347193 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_8a2b17() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_8a2b17();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_8a2b17() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_8a2b17() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_8a2b17();
+ prevent_dce.inner = textureDimensions_8a2b17();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_8a2b17() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_8a2b17() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_8a2b17();
+ prevent_dce.inner = textureDimensions_8a2b17();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_8a2b17() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_8a2b17();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.msl
index 51cb65a..bfc08a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8a2b17(texture1d<int, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_8a2b17(texture1d<int, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_8a2b17(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_8a2b17(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_8a2b17(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8a2b17(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8a2b17(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8a2b17(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.spvasm
index 216e527..19150f0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8a2b17 "textureDimensions_8a2b17"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8a2b17 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_8a2b17 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_8a2b17
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_8a2b17
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_8a2b17
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_8a2b17
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_8a2b17
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_8a2b17
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.wgsl
index 3372682..1dcf978 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a2b17.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read_write>;
-fn textureDimensions_8a2b17() {
+fn textureDimensions_8a2b17() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8a2b17();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_8a2b17();
+ prevent_dce = textureDimensions_8a2b17();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8a2b17();
+ prevent_dce = textureDimensions_8a2b17();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8a2b17();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl
index 49d9210..0daf7b4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32float, write>;
// fn textureDimensions(texture: texture_storage_2d<rg32float, write>) -> vec2<u32>
-fn textureDimensions_8a35f9() {
+fn textureDimensions_8a35f9() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8a35f9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8a35f9();
+ prevent_dce = textureDimensions_8a35f9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8a35f9();
+ prevent_dce = textureDimensions_8a35f9();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8a35f9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.dxc.hlsl
index 651d729..a8601a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8a35f9() {
+uint2 textureDimensions_8a35f9() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8a35f9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8a35f9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8a35f9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8a35f9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8a35f9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8a35f9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.fxc.hlsl
index 651d729..a8601a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8a35f9() {
+uint2 textureDimensions_8a35f9() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8a35f9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8a35f9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8a35f9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8a35f9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8a35f9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8a35f9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.msl
index 6742474..eae579b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8a35f9(texture2d<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_8a35f9(texture2d<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_8a35f9(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_8a35f9(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_8a35f9(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8a35f9(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8a35f9(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8a35f9(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.spvasm
index 2175604..c4a0ee2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8a35f9 "textureDimensions_8a35f9"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8a35f9 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_8a35f9 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_8a35f9
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_8a35f9
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_8a35f9
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_8a35f9
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_8a35f9
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_8a35f9
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.wgsl
index ac32635..35760f9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8a35f9.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, write>;
-fn textureDimensions_8a35f9() {
+fn textureDimensions_8a35f9() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8a35f9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8a35f9();
+ prevent_dce = textureDimensions_8a35f9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8a35f9();
+ prevent_dce = textureDimensions_8a35f9();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8a35f9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl
index b1d858b..8a7c254 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r8unorm, read>;
// fn textureDimensions(texture: texture_storage_2d_array<r8unorm, read>) -> vec2<u32>
-fn textureDimensions_8af728() {
+fn textureDimensions_8af728() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8af728();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8af728();
+ prevent_dce = textureDimensions_8af728();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8af728();
+ prevent_dce = textureDimensions_8af728();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8af728();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.dxc.hlsl
index a057749..4800352 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8af728() {
+uint2 textureDimensions_8af728() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8af728();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8af728();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8af728()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8af728();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8af728()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8af728();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.fxc.hlsl
index a057749..4800352 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8af728() {
+uint2 textureDimensions_8af728() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8af728();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8af728();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8af728()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8af728();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8af728()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8af728();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.msl
index da4be3e..bfdba07 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8af728(texture2d_array<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_8af728(texture2d_array<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_8af728(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_8af728(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_8af728(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8af728(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8af728(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8af728(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.spvasm
index 9864468..d4a0b51 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,75 +21,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8af728 "textureDimensions_8af728"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8af728 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_8af728 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_8af728
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_8af728
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_8af728
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_8af728
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_8af728
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_8af728
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.wgsl
index a4213da..7be68c7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8af728.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r8unorm, read>;
-fn textureDimensions_8af728() {
+fn textureDimensions_8af728() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8af728();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8af728();
+ prevent_dce = textureDimensions_8af728();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8af728();
+ prevent_dce = textureDimensions_8af728();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8af728();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl
index 2e8467c..2dbe6e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8uint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba8uint, read_write>) -> vec3<u32>
-fn textureDimensions_8b9906() {
+fn textureDimensions_8b9906() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8b9906();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8b9906();
+ prevent_dce = textureDimensions_8b9906();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8b9906();
+ prevent_dce = textureDimensions_8b9906();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8b9906();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.dxc.hlsl
index 7ea7200..0ffbdd8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8b9906() {
+uint3 textureDimensions_8b9906() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8b9906();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8b9906();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8b9906()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8b9906();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8b9906()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8b9906();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.fxc.hlsl
index 7ea7200..0ffbdd8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8b9906() {
+uint3 textureDimensions_8b9906() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8b9906();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8b9906();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8b9906()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8b9906();
+ prevent_dce.Store3(0u, asuint(textureDimensions_8b9906()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8b9906();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.glsl
index 7f86988..ed2ec4e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8ui) uniform highp writeonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_8b9906() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_8b9906();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_8b9906() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_8b9906() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_8b9906();
+ prevent_dce.inner = textureDimensions_8b9906();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_8b9906() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_8b9906() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_8b9906();
+ prevent_dce.inner = textureDimensions_8b9906();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_8b9906() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_8b9906();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.msl
index 6e290ec..1775660 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8b9906(texture3d<uint, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_8b9906(texture3d<uint, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_8b9906(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_8b9906(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_8b9906(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8b9906(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8b9906(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8b9906(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.spvasm
index 4eb41e2..e729f4b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8b9906 "textureDimensions_8b9906"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8b9906 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_8b9906 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_8b9906
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_8b9906
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_8b9906
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_8b9906
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_8b9906
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_8b9906
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.wgsl
index d57d855..b1b0112 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8b9906.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, read_write>;
-fn textureDimensions_8b9906() {
+fn textureDimensions_8b9906() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8b9906();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8b9906();
+ prevent_dce = textureDimensions_8b9906();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8b9906();
+ prevent_dce = textureDimensions_8b9906();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8b9906();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl
index 12d446b..c3e0642 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8snorm, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8snorm, read_write>) -> vec2<u32>
-fn textureDimensions_8bd369() {
+fn textureDimensions_8bd369() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8bd369();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8bd369();
+ prevent_dce = textureDimensions_8bd369();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8bd369();
+ prevent_dce = textureDimensions_8bd369();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8bd369();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.dxc.hlsl
index ffd28f4..8c87873 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8bd369() {
+uint2 textureDimensions_8bd369() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8bd369();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8bd369();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8bd369()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8bd369();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8bd369()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8bd369();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.fxc.hlsl
index ffd28f4..8c87873 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8bd369() {
+uint2 textureDimensions_8bd369() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8bd369();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8bd369();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8bd369()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8bd369();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8bd369()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8bd369();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.glsl
index e3f37bf..6f240cc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_8bd369() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_8bd369();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_8bd369() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_8bd369() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_8bd369();
+ prevent_dce.inner = textureDimensions_8bd369();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_8bd369() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_8bd369() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_8bd369();
+ prevent_dce.inner = textureDimensions_8bd369();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8_snorm) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_8bd369() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_8bd369();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.msl
index 5f1af28..34023ae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8bd369(texture2d_array<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_8bd369(texture2d_array<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_8bd369(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_8bd369(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_8bd369(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8bd369(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8bd369(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8bd369(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.spvasm
index ec10b20..2c31319 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8bd369 "textureDimensions_8bd369"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8bd369 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_8bd369 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_8bd369
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_8bd369
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_8bd369
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_8bd369
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_8bd369
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_8bd369
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.wgsl
index ec3e95e..e4d6144 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8bd369.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8snorm, read_write>;
-fn textureDimensions_8bd369() {
+fn textureDimensions_8bd369() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8bd369();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8bd369();
+ prevent_dce = textureDimensions_8bd369();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8bd369();
+ prevent_dce = textureDimensions_8bd369();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8bd369();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl
index ffb2da5..f522243 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32uint, read>;
// fn textureDimensions(texture: texture_storage_2d<rg32uint, read>) -> vec2<u32>
-fn textureDimensions_8e15f4() {
+fn textureDimensions_8e15f4() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8e15f4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8e15f4();
+ prevent_dce = textureDimensions_8e15f4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8e15f4();
+ prevent_dce = textureDimensions_8e15f4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8e15f4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.dxc.hlsl
index 4b9942e..c06c59f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8e15f4() {
+uint2 textureDimensions_8e15f4() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8e15f4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8e15f4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8e15f4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8e15f4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8e15f4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8e15f4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.fxc.hlsl
index 4b9942e..c06c59f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8e15f4() {
+uint2 textureDimensions_8e15f4() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8e15f4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8e15f4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8e15f4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8e15f4();
+ prevent_dce.Store2(0u, asuint(textureDimensions_8e15f4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8e15f4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.msl
index 2a513ab..a28a817 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8e15f4(texture2d<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_8e15f4(texture2d<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_8e15f4(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_8e15f4(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_8e15f4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8e15f4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8e15f4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8e15f4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.spvasm
index ee61a3d..8f7d841 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8e15f4 "textureDimensions_8e15f4"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8e15f4 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_8e15f4 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_8e15f4
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_8e15f4
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_8e15f4
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_8e15f4
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_8e15f4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_8e15f4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.wgsl
index 41c3303..e4e678a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e15f4.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read>;
-fn textureDimensions_8e15f4() {
+fn textureDimensions_8e15f4() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8e15f4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_8e15f4();
+ prevent_dce = textureDimensions_8e15f4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8e15f4();
+ prevent_dce = textureDimensions_8e15f4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8e15f4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl
index 8bed195..bcbb636 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32sint, read>;
// fn textureDimensions(texture: texture_storage_1d<r32sint, read>) -> u32
-fn textureDimensions_8e5de6() {
+fn textureDimensions_8e5de6() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8e5de6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_8e5de6();
+ prevent_dce = textureDimensions_8e5de6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8e5de6();
+ prevent_dce = textureDimensions_8e5de6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8e5de6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.dxc.hlsl
index 381c7f1..181bebc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8e5de6() {
+uint textureDimensions_8e5de6() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8e5de6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8e5de6();
+ prevent_dce.Store(0u, asuint(textureDimensions_8e5de6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8e5de6();
+ prevent_dce.Store(0u, asuint(textureDimensions_8e5de6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8e5de6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.fxc.hlsl
index 381c7f1..181bebc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8e5de6() {
+uint textureDimensions_8e5de6() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8e5de6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8e5de6();
+ prevent_dce.Store(0u, asuint(textureDimensions_8e5de6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8e5de6();
+ prevent_dce.Store(0u, asuint(textureDimensions_8e5de6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8e5de6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.glsl
index a4253ae..2034799 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp readonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_8e5de6() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_8e5de6();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_8e5de6() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_8e5de6() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_8e5de6();
+ prevent_dce.inner = textureDimensions_8e5de6();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_8e5de6() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_8e5de6() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_8e5de6();
+ prevent_dce.inner = textureDimensions_8e5de6();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_8e5de6() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_8e5de6();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.msl
index 10f98b6..d7494e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8e5de6(texture1d<int, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_8e5de6(texture1d<int, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_8e5de6(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_8e5de6(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_8e5de6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8e5de6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8e5de6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8e5de6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.spvasm
index 13ba65c..a9b5597 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8e5de6 "textureDimensions_8e5de6"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 R32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8e5de6 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_8e5de6 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_8e5de6
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_8e5de6
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_8e5de6
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_8e5de6
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_8e5de6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_8e5de6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.wgsl
index 6a5ac68..572a2a0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8e5de6.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32sint, read>;
-fn textureDimensions_8e5de6() {
+fn textureDimensions_8e5de6() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8e5de6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_8e5de6();
+ prevent_dce = textureDimensions_8e5de6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8e5de6();
+ prevent_dce = textureDimensions_8e5de6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8e5de6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl
index 3021b8b..c690618 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32sint, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba32sint, write>) -> u32
-fn textureDimensions_8efd47() {
+fn textureDimensions_8efd47() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8efd47();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_8efd47();
+ prevent_dce = textureDimensions_8efd47();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8efd47();
+ prevent_dce = textureDimensions_8efd47();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8efd47();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.dxc.hlsl
index e890060..5898703 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8efd47() {
+uint textureDimensions_8efd47() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8efd47();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8efd47();
+ prevent_dce.Store(0u, asuint(textureDimensions_8efd47()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8efd47();
+ prevent_dce.Store(0u, asuint(textureDimensions_8efd47()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8efd47();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.fxc.hlsl
index e890060..5898703 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_8efd47() {
+uint textureDimensions_8efd47() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_8efd47();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_8efd47();
+ prevent_dce.Store(0u, asuint(textureDimensions_8efd47()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_8efd47();
+ prevent_dce.Store(0u, asuint(textureDimensions_8efd47()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_8efd47();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.glsl
index 7db2772..8564b03 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_8efd47() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_8efd47();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_8efd47() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_8efd47() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_8efd47();
+ prevent_dce.inner = textureDimensions_8efd47();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_8efd47() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_8efd47() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_8efd47();
+ prevent_dce.inner = textureDimensions_8efd47();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_8efd47() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_8efd47();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.msl
index 2db510c..5ed4fe7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_8efd47(texture1d<int, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_8efd47(texture1d<int, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_8efd47(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_8efd47(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_8efd47(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_8efd47(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_8efd47(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_8efd47(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.spvasm
index 4e710ec..1b3d1ca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_8efd47 "textureDimensions_8efd47"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_8efd47 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_8efd47 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_8efd47
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_8efd47
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_8efd47
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_8efd47
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_8efd47
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_8efd47
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.wgsl
index 4d79064..4bc96cd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/8efd47.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, write>;
-fn textureDimensions_8efd47() {
+fn textureDimensions_8efd47() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_8efd47();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_8efd47();
+ prevent_dce = textureDimensions_8efd47();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_8efd47();
+ prevent_dce = textureDimensions_8efd47();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_8efd47();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl
index 0d44cee..51f7d67 100644
--- a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32float, write>;
// fn textureDimensions(texture: texture_storage_3d<r32float, write>) -> vec3<u32>
-fn textureDimensions_902179() {
+fn textureDimensions_902179() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_902179();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_902179();
+ prevent_dce = textureDimensions_902179();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_902179();
+ prevent_dce = textureDimensions_902179();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_902179();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.dxc.hlsl
index dcbd8c7..52baa84 100644
--- a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_902179() {
+uint3 textureDimensions_902179() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_902179();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_902179();
+ prevent_dce.Store3(0u, asuint(textureDimensions_902179()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_902179();
+ prevent_dce.Store3(0u, asuint(textureDimensions_902179()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_902179();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.fxc.hlsl
index dcbd8c7..52baa84 100644
--- a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_902179() {
+uint3 textureDimensions_902179() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_902179();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_902179();
+ prevent_dce.Store3(0u, asuint(textureDimensions_902179()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_902179();
+ prevent_dce.Store3(0u, asuint(textureDimensions_902179()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_902179();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.glsl
index 44bd150..9d08d87 100644
--- a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32f) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_902179() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_902179();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_902179() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_902179() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_902179();
+ prevent_dce.inner = textureDimensions_902179();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_902179() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_902179() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_902179();
+ prevent_dce.inner = textureDimensions_902179();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_902179() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_902179();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.msl
index 5810dfc..9120402 100644
--- a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_902179(texture3d<float, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_902179(texture3d<float, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_902179(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_902179(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_902179(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_902179(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_902179(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_902179(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.spvasm
index 431b4dc..4ab9c75 100644
--- a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_902179 "textureDimensions_902179"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 R32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_902179 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_902179 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_902179
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_902179
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_902179
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_902179
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_902179
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_902179
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.wgsl
index 96e9ba7..7764539 100644
--- a/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/902179.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32float, write>;
-fn textureDimensions_902179() {
+fn textureDimensions_902179() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_902179();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_902179();
+ prevent_dce = textureDimensions_902179();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_902179();
+ prevent_dce = textureDimensions_902179();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_902179();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl
index 61a8656..9e296b7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16sint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16sint, read>) -> vec2<u32>
-fn textureDimensions_904b0f() {
+fn textureDimensions_904b0f() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_904b0f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_904b0f();
+ prevent_dce = textureDimensions_904b0f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_904b0f();
+ prevent_dce = textureDimensions_904b0f();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_904b0f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.dxc.hlsl
index 5a3a07e..e34af49 100644
--- a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_904b0f() {
+uint2 textureDimensions_904b0f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_904b0f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_904b0f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_904b0f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_904b0f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_904b0f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_904b0f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.fxc.hlsl
index 5a3a07e..e34af49 100644
--- a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_904b0f() {
+uint2 textureDimensions_904b0f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_904b0f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_904b0f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_904b0f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_904b0f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_904b0f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_904b0f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.glsl
index f422cb9..c7f66b6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp readonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_904b0f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_904b0f();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_904b0f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_904b0f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_904b0f();
+ prevent_dce.inner = textureDimensions_904b0f();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_904b0f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_904b0f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_904b0f();
+ prevent_dce.inner = textureDimensions_904b0f();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_904b0f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_904b0f();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.msl
index ec71160..3530cdd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_904b0f(texture2d_array<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_904b0f(texture2d_array<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_904b0f(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_904b0f(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_904b0f(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_904b0f(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_904b0f(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_904b0f(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.spvasm
index 9df5109..2452e68 100644
--- a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_904b0f "textureDimensions_904b0f"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_904b0f = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_904b0f = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_904b0f
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_904b0f
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_904b0f
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_904b0f
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_904b0f
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_904b0f
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.wgsl
index 29bf953..9643cba 100644
--- a/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/904b0f.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, read>;
-fn textureDimensions_904b0f() {
+fn textureDimensions_904b0f() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_904b0f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_904b0f();
+ prevent_dce = textureDimensions_904b0f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_904b0f();
+ prevent_dce = textureDimensions_904b0f();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_904b0f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl
index a9261f7..75acb83 100644
--- a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16sint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16sint, write>) -> vec2<u32>
-fn textureDimensions_90dd74() {
+fn textureDimensions_90dd74() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_90dd74();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_90dd74();
+ prevent_dce = textureDimensions_90dd74();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_90dd74();
+ prevent_dce = textureDimensions_90dd74();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_90dd74();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.dxc.hlsl
index 0c336b5..d6bcf75 100644
--- a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_90dd74() {
+uint2 textureDimensions_90dd74() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_90dd74();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_90dd74();
+ prevent_dce.Store2(0u, asuint(textureDimensions_90dd74()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_90dd74();
+ prevent_dce.Store2(0u, asuint(textureDimensions_90dd74()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_90dd74();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.fxc.hlsl
index 0c336b5..d6bcf75 100644
--- a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_90dd74() {
+uint2 textureDimensions_90dd74() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_90dd74();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_90dd74();
+ prevent_dce.Store2(0u, asuint(textureDimensions_90dd74()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_90dd74();
+ prevent_dce.Store2(0u, asuint(textureDimensions_90dd74()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_90dd74();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.glsl
index b114547..5b04b8b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp writeonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_90dd74() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_90dd74();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_90dd74() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_90dd74() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_90dd74();
+ prevent_dce.inner = textureDimensions_90dd74();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_90dd74() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_90dd74() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_90dd74();
+ prevent_dce.inner = textureDimensions_90dd74();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_90dd74() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_90dd74();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.msl
index 81147f3..0c024af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_90dd74(texture2d_array<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_90dd74(texture2d_array<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_90dd74(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_90dd74(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_90dd74(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_90dd74(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_90dd74(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_90dd74(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.spvasm
index e5b3923..319ba2f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_90dd74 "textureDimensions_90dd74"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_90dd74 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_90dd74 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_90dd74
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_90dd74
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_90dd74
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_90dd74
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_90dd74
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_90dd74
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.wgsl
index acb40dd..4cf5239 100644
--- a/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/90dd74.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16sint, write>;
-fn textureDimensions_90dd74() {
+fn textureDimensions_90dd74() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_90dd74();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_90dd74();
+ prevent_dce = textureDimensions_90dd74();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_90dd74();
+ prevent_dce = textureDimensions_90dd74();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_90dd74();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl
index 86fadf1..5914336 100644
--- a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32sint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rg32sint, read_write>) -> vec3<u32>
-fn textureDimensions_91e3b4() {
+fn textureDimensions_91e3b4() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_91e3b4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_91e3b4();
+ prevent_dce = textureDimensions_91e3b4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_91e3b4();
+ prevent_dce = textureDimensions_91e3b4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_91e3b4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.dxc.hlsl
index b4e70cc..5da5db2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_91e3b4() {
+uint3 textureDimensions_91e3b4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_91e3b4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_91e3b4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_91e3b4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_91e3b4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_91e3b4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_91e3b4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.fxc.hlsl
index b4e70cc..5da5db2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_91e3b4() {
+uint3 textureDimensions_91e3b4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_91e3b4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_91e3b4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_91e3b4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_91e3b4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_91e3b4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_91e3b4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.msl
index 0a14e0c..c747920 100644
--- a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_91e3b4(texture3d<int, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_91e3b4(texture3d<int, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_91e3b4(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_91e3b4(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_91e3b4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_91e3b4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_91e3b4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_91e3b4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.spvasm
index 1a95e52..7188500 100644
--- a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_91e3b4 "textureDimensions_91e3b4"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_91e3b4 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_91e3b4 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_91e3b4
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_91e3b4
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_91e3b4
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_91e3b4
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_91e3b4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_91e3b4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.wgsl
index f008ab6..5cb5d36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/91e3b4.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, read_write>;
-fn textureDimensions_91e3b4() {
+fn textureDimensions_91e3b4() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_91e3b4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_91e3b4();
+ prevent_dce = textureDimensions_91e3b4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_91e3b4();
+ prevent_dce = textureDimensions_91e3b4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_91e3b4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl
index 8d864e9..6845683 100644
--- a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_1d<u32>;
// fn textureDimensions(texture: texture_1d<u32>, level: i32) -> u32
-fn textureDimensions_920006() {
+fn textureDimensions_920006() -> u32{
var arg_1 = 1i;
var res: u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_920006();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_920006();
+ prevent_dce = textureDimensions_920006();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_920006();
+ prevent_dce = textureDimensions_920006();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_920006();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.dxc.hlsl
index f4eb46a..070e8e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_920006() {
+uint textureDimensions_920006() {
int arg_1 = 1;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_920006();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_920006();
+ prevent_dce.Store(0u, asuint(textureDimensions_920006()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_920006();
+ prevent_dce.Store(0u, asuint(textureDimensions_920006()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_920006();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.fxc.hlsl
index f4eb46a..070e8e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_920006() {
+uint textureDimensions_920006() {
int arg_1 = 1;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_920006();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_920006();
+ prevent_dce.Store(0u, asuint(textureDimensions_920006()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_920006();
+ prevent_dce.Store(0u, asuint(textureDimensions_920006()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_920006();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.glsl
index 4374ab9..8f439fd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_920006() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_920006();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2D arg_0_1;
+uint textureDimensions_920006() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_920006() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_920006();
+ prevent_dce.inner = textureDimensions_920006();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usampler2D arg_0_1;
+uint textureDimensions_920006() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_920006() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_920006();
+ prevent_dce.inner = textureDimensions_920006();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp usampler2D arg_0_1;
+uint textureDimensions_920006() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_920006();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.msl
index 2716c97..16935ff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_920006(texture1d<uint, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_920006(texture1d<uint, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_920006(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_920006(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_920006(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_920006(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_920006(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_920006(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.spvasm
index dccc067..f1fa786 100644
--- a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 64
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,78 +22,105 @@
OpName %textureDimensions_920006 "textureDimensions_920006"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %24 = OpConstantNull %int
+ %26 = OpConstantNull %int
%_ptr_Function_uint = OpTypePointer Function %uint
- %30 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_920006 = OpFunction %void None %16
- %19 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %24
- %res = OpVariable %_ptr_Function_uint Function %30
+%textureDimensions_920006 = OpFunction %uint None %19
+ %21 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %26
+ %res = OpVariable %_ptr_Function_uint Function %9
OpStore %arg_1 %int_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %int %arg_1
- %25 = OpImageQuerySizeLod %uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %34 = OpLoad %uint %res
- OpStore %33 %34
+ %28 = OpLoad %15 %arg_0
+ %29 = OpLoad %int %arg_1
+ %27 = OpImageQuerySizeLod %uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %uint %textureDimensions_920006
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_920006
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %uint %textureDimensions_920006
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %55 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %56 = OpFunctionCall %uint %textureDimensions_920006
+ OpStore %55 %56
+ %57 = OpLoad %VertexOutput %out
+ OpReturnValue %57
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %59 = OpLabel
+ %60 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %61 = OpCompositeExtract %v4float %60 0
+ OpStore %pos_1 %61
+ %62 = OpCompositeExtract %uint %60 1
+ OpStore %prevent_dce_1 %62
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_920006
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_920006
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.wgsl
index d64130a..34cfe46 100644
--- a/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/920006.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_1d<u32>;
-fn textureDimensions_920006() {
+fn textureDimensions_920006() -> u32 {
var arg_1 = 1i;
var res : u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_920006();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_920006();
+ prevent_dce = textureDimensions_920006();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_920006();
+ prevent_dce = textureDimensions_920006();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_920006();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl
index feb210d..0c250a0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8sint, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba8sint, write>) -> u32
-fn textureDimensions_92552e() {
+fn textureDimensions_92552e() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_92552e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_92552e();
+ prevent_dce = textureDimensions_92552e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_92552e();
+ prevent_dce = textureDimensions_92552e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_92552e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.dxc.hlsl
index 42a8ccd..afdeacc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_92552e() {
+uint textureDimensions_92552e() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_92552e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_92552e();
+ prevent_dce.Store(0u, asuint(textureDimensions_92552e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_92552e();
+ prevent_dce.Store(0u, asuint(textureDimensions_92552e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_92552e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.fxc.hlsl
index 42a8ccd..afdeacc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_92552e() {
+uint textureDimensions_92552e() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_92552e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_92552e();
+ prevent_dce.Store(0u, asuint(textureDimensions_92552e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_92552e();
+ prevent_dce.Store(0u, asuint(textureDimensions_92552e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_92552e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.glsl
index faaf1a1..e66dfe4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_92552e() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_92552e();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_92552e() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_92552e() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_92552e();
+ prevent_dce.inner = textureDimensions_92552e();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_92552e() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_92552e() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_92552e();
+ prevent_dce.inner = textureDimensions_92552e();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_92552e() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_92552e();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.msl
index 73e3e9e..3841a64 100644
--- a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_92552e(texture1d<int, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_92552e(texture1d<int, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_92552e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_92552e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_92552e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_92552e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_92552e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_92552e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.spvasm
index a003355..598bea9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_92552e "textureDimensions_92552e"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_92552e = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_92552e = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_92552e
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_92552e
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_92552e
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_92552e
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_92552e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_92552e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.wgsl
index ee96d82..7510eea 100644
--- a/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/92552e.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8sint, write>;
-fn textureDimensions_92552e() {
+fn textureDimensions_92552e() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_92552e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_92552e();
+ prevent_dce = textureDimensions_92552e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_92552e();
+ prevent_dce = textureDimensions_92552e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_92552e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl
index d8030e1..d42a92d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32uint, write>;
// fn textureDimensions(texture: texture_storage_2d<rg32uint, write>) -> vec2<u32>
-fn textureDimensions_9573f3() {
+fn textureDimensions_9573f3() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9573f3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9573f3();
+ prevent_dce = textureDimensions_9573f3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9573f3();
+ prevent_dce = textureDimensions_9573f3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9573f3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.dxc.hlsl
index e392b5e..b5ef49e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9573f3() {
+uint2 textureDimensions_9573f3() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9573f3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9573f3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9573f3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9573f3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9573f3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9573f3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.fxc.hlsl
index e392b5e..b5ef49e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9573f3() {
+uint2 textureDimensions_9573f3() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9573f3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9573f3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9573f3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9573f3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9573f3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9573f3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.msl
index fbbfdb4..92dbd40 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9573f3(texture2d<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9573f3(texture2d<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9573f3(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9573f3(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9573f3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9573f3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9573f3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9573f3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.spvasm
index 35533d1..9cddcf0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9573f3 "textureDimensions_9573f3"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9573f3 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_9573f3 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_9573f3
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_9573f3
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_9573f3
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_9573f3
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_9573f3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_9573f3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.wgsl
index db6f380..d0263ed 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9573f3.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, write>;
-fn textureDimensions_9573f3() {
+fn textureDimensions_9573f3() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9573f3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9573f3();
+ prevent_dce = textureDimensions_9573f3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9573f3();
+ prevent_dce = textureDimensions_9573f3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9573f3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl
index 7c13579..cacf390 100644
--- a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_1d<u32>;
// fn textureDimensions(texture: texture_1d<u32>) -> u32
-fn textureDimensions_965645() {
+fn textureDimensions_965645() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_965645();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_965645();
+ prevent_dce = textureDimensions_965645();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_965645();
+ prevent_dce = textureDimensions_965645();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_965645();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.dxc.hlsl
index f09a850..3ba9c36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_965645() {
+uint textureDimensions_965645() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_965645();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_965645();
+ prevent_dce.Store(0u, asuint(textureDimensions_965645()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_965645();
+ prevent_dce.Store(0u, asuint(textureDimensions_965645()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_965645();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.fxc.hlsl
index f09a850..3ba9c36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_965645() {
+uint textureDimensions_965645() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_965645();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_965645();
+ prevent_dce.Store(0u, asuint(textureDimensions_965645()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_965645();
+ prevent_dce.Store(0u, asuint(textureDimensions_965645()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_965645();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.glsl
index 5c73662..11a6898 100644
--- a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp usampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_965645() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_965645();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2D arg_0_1;
+uint textureDimensions_965645() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_965645() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_965645();
+ prevent_dce.inner = textureDimensions_965645();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp usampler2D arg_0_1;
+uint textureDimensions_965645() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_965645() {
- uint res = uvec2(textureSize(arg_0_1, 0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_965645();
+ prevent_dce.inner = textureDimensions_965645();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp usampler2D arg_0_1;
+uint textureDimensions_965645() {
+ uint res = uvec2(textureSize(arg_0_1, 0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_965645();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.msl
index 0a2e55d..39b14638 100644
--- a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_965645(texture1d<uint, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_965645(texture1d<uint, access::sample> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_965645(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_965645(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_965645(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_965645(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_965645(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_965645(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.spvasm
index af4716b..5ddf778 100644
--- a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_965645 "textureDimensions_965645"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_uint = OpTypePointer Function %uint
- %26 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_965645 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %26
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySizeLod %uint %21 %int_0
- OpStore %res %20
- %29 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %30 = OpLoad %uint %res
- OpStore %29 %30
+%textureDimensions_965645 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySizeLod %uint %23 %int_0
+ OpStore %res %22
+ %28 = OpLoad %uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %uint %textureDimensions_965645
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_965645
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %uint %textureDimensions_965645
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %52 = OpFunctionCall %uint %textureDimensions_965645
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_965645
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_965645
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.wgsl
index c05ae26..794984c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/965645.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_1d<u32>;
-fn textureDimensions_965645() {
+fn textureDimensions_965645() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_965645();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_965645();
+ prevent_dce = textureDimensions_965645();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_965645();
+ prevent_dce = textureDimensions_965645();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_965645();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl
index b440210..f21c80a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_cube_array<i32>;
// fn textureDimensions(texture: texture_cube_array<i32>) -> vec2<u32>
-fn textureDimensions_98b2d3() {
+fn textureDimensions_98b2d3() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_98b2d3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_98b2d3();
+ prevent_dce = textureDimensions_98b2d3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_98b2d3();
+ prevent_dce = textureDimensions_98b2d3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_98b2d3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.dxc.hlsl
index b3b68dd..8d5c755 100644
--- a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
TextureCubeArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_98b2d3() {
+uint2 textureDimensions_98b2d3() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_98b2d3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_98b2d3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_98b2d3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_98b2d3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_98b2d3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_98b2d3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.fxc.hlsl
index b3b68dd..8d5c755 100644
--- a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
TextureCubeArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_98b2d3() {
+uint2 textureDimensions_98b2d3() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_98b2d3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_98b2d3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_98b2d3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_98b2d3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_98b2d3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_98b2d3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.msl
index 0f9c39b..0dd7331 100644
--- a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_98b2d3(texturecube_array<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_98b2d3(texturecube_array<int, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_98b2d3(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_98b2d3(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_98b2d3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_98b2d3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_98b2d3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_98b2d3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.spvasm
index 968a038..20a27ef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,76 +21,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_98b2d3 "textureDimensions_98b2d3"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %29 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %32 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %34 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %44 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %50 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_98b2d3 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %29
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySizeLod %v3uint %25 %int_0
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %32 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %33 = OpLoad %v2uint %res
- OpStore %32 %33
+%textureDimensions_98b2d3 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySizeLod %v3uint %27 %int_0
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %31 = OpLoad %v2uint %res
+ OpReturnValue %31
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %32
+ %35 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_98b2d3
+ OpStore %38 %39
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
- %36 = OpLabel
- %37 = OpFunctionCall %void %textureDimensions_98b2d3
- OpReturnValue %5
+%compute_main = OpFunction %void None %32
+ %41 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_98b2d3
+ OpStore %42 %43
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %39 = OpLabel
- %40 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %40
+%vertex_main_inner = OpFunction %VertexOutput None %44
+ %47 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %50
+ %52 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %52 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_98b2d3
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %32
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_98b2d3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_98b2d3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.wgsl
index c6ef29b..80485dd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/98b2d3.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<i32>;
-fn textureDimensions_98b2d3() {
+fn textureDimensions_98b2d3() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_98b2d3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_98b2d3();
+ prevent_dce = textureDimensions_98b2d3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_98b2d3();
+ prevent_dce = textureDimensions_98b2d3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_98b2d3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl
index c392877..b845e90 100644
--- a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_depth_2d;
// fn textureDimensions(texture: texture_depth_2d, level: u32) -> vec2<u32>
-fn textureDimensions_991ea9() {
+fn textureDimensions_991ea9() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_991ea9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_991ea9();
+ prevent_dce = textureDimensions_991ea9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_991ea9();
+ prevent_dce = textureDimensions_991ea9();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_991ea9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.dxc.hlsl
index 932fb4a..46751e0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2D arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_991ea9() {
+uint2 textureDimensions_991ea9() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_991ea9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_991ea9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_991ea9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_991ea9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_991ea9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_991ea9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.fxc.hlsl
index 932fb4a..46751e0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2D arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_991ea9() {
+uint2 textureDimensions_991ea9() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_991ea9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_991ea9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_991ea9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_991ea9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_991ea9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_991ea9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.glsl
index 3e56e87..196976a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_991ea9() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_991ea9();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_991ea9() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_991ea9() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_991ea9();
+ prevent_dce.inner = textureDimensions_991ea9();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_991ea9() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_991ea9() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_991ea9();
+ prevent_dce.inner = textureDimensions_991ea9();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uvec2 textureDimensions_991ea9() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_991ea9();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.msl
index e99ef42..ca5b4fb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_991ea9(depth2d<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_991ea9(depth2d<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depth2d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_991ea9(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depth2d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_991ea9(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depth2d<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_991ea9(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depth2d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_991ea9(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depth2d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depth2d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depth2d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_991ea9(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depth2d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_991ea9(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.spvasm
index 6eec615..93d83a9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,78 +21,104 @@
OpName %textureDimensions_991ea9 "textureDimensions_991ea9"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %30 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_991ea9 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %30
+%textureDimensions_991ea9 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %v2uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %34 = OpLoad %v2uint %res
- OpStore %33 %34
+ %28 = OpLoad %16 %arg_0
+ %29 = OpLoad %uint %arg_1
+ %27 = OpImageQuerySizeLod %v2uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %v2uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_991ea9
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_991ea9
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %v2uint %textureDimensions_991ea9
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_991ea9
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_991ea9
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_991ea9
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.wgsl
index f8434c8..12f4c94 100644
--- a/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/991ea9.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_depth_2d;
-fn textureDimensions_991ea9() {
+fn textureDimensions_991ea9() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_991ea9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_991ea9();
+ prevent_dce = textureDimensions_991ea9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_991ea9();
+ prevent_dce = textureDimensions_991ea9();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_991ea9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl
index eb89af1..40f0380 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32uint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<r32uint, read_write>) -> u32
-fn textureDimensions_9944d5() {
+fn textureDimensions_9944d5() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9944d5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_9944d5();
+ prevent_dce = textureDimensions_9944d5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9944d5();
+ prevent_dce = textureDimensions_9944d5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9944d5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.dxc.hlsl
index 4635cf3..d2610a3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9944d5() {
+uint textureDimensions_9944d5() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9944d5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9944d5();
+ prevent_dce.Store(0u, asuint(textureDimensions_9944d5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9944d5();
+ prevent_dce.Store(0u, asuint(textureDimensions_9944d5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9944d5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.fxc.hlsl
index 4635cf3..d2610a3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9944d5() {
+uint textureDimensions_9944d5() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9944d5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9944d5();
+ prevent_dce.Store(0u, asuint(textureDimensions_9944d5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9944d5();
+ prevent_dce.Store(0u, asuint(textureDimensions_9944d5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9944d5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.glsl
index d3e01c9..87daa8b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_9944d5() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9944d5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp uimage2D arg_0;
+uint textureDimensions_9944d5() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_9944d5() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_9944d5();
+ prevent_dce.inner = textureDimensions_9944d5();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp uimage2D arg_0;
+uint textureDimensions_9944d5() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_9944d5() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_9944d5();
+ prevent_dce.inner = textureDimensions_9944d5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32ui) uniform highp uimage2D arg_0;
+uint textureDimensions_9944d5() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9944d5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.msl
index 4efe153..5f5fea1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9944d5(texture1d<uint, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_9944d5(texture1d<uint, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9944d5(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9944d5(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_9944d5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9944d5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9944d5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9944d5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.spvasm
index 97916d2..6587eea 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9944d5 "textureDimensions_9944d5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9944d5 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_9944d5 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_9944d5
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_9944d5
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_9944d5
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_9944d5
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_9944d5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_9944d5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.wgsl
index 34e8af8..c4d5366 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9944d5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read_write>;
-fn textureDimensions_9944d5() {
+fn textureDimensions_9944d5() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9944d5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_9944d5();
+ prevent_dce = textureDimensions_9944d5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9944d5();
+ prevent_dce = textureDimensions_9944d5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9944d5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl
index 1155116..2bbd80a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<bgra8unorm, read>;
// fn textureDimensions(texture: texture_storage_2d_array<bgra8unorm, read>) -> vec2<u32>
-fn textureDimensions_9b10a0() {
+fn textureDimensions_9b10a0() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9b10a0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9b10a0();
+ prevent_dce = textureDimensions_9b10a0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9b10a0();
+ prevent_dce = textureDimensions_9b10a0();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9b10a0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.dxc.hlsl
index a6aefe8..42919bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9b10a0() {
+uint2 textureDimensions_9b10a0() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9b10a0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9b10a0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9b10a0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9b10a0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9b10a0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9b10a0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.fxc.hlsl
index a6aefe8..42919bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9b10a0() {
+uint2 textureDimensions_9b10a0() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9b10a0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9b10a0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9b10a0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9b10a0();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9b10a0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9b10a0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.glsl
index af66211..1a7bb91 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp readonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_9b10a0() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9b10a0();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_9b10a0() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9b10a0() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_9b10a0();
+ prevent_dce.inner = textureDimensions_9b10a0();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_9b10a0() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9b10a0() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_9b10a0();
+ prevent_dce.inner = textureDimensions_9b10a0();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_9b10a0() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9b10a0();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.msl
index bc2ff2f..a08012e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9b10a0(texture2d_array<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9b10a0(texture2d_array<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9b10a0(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9b10a0(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9b10a0(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9b10a0(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9b10a0(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9b10a0(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.spvasm
index 922dcd2..72421c8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9b10a0 "textureDimensions_9b10a0"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9b10a0 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_9b10a0 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_9b10a0
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_9b10a0
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_9b10a0
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_9b10a0
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_9b10a0
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_9b10a0
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.wgsl
index 343b260..d27aa4f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b10a0.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, read>;
-fn textureDimensions_9b10a0() {
+fn textureDimensions_9b10a0() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9b10a0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9b10a0();
+ prevent_dce = textureDimensions_9b10a0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9b10a0();
+ prevent_dce = textureDimensions_9b10a0();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9b10a0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl
index f7efacc..118cda5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_cube<f32>;
// fn textureDimensions(texture: texture_cube<f32>) -> vec2<u32>
-fn textureDimensions_9b223b() {
+fn textureDimensions_9b223b() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9b223b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9b223b();
+ prevent_dce = textureDimensions_9b223b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9b223b();
+ prevent_dce = textureDimensions_9b223b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9b223b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.dxc.hlsl
index 0992aac..aef0f13 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
TextureCube<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9b223b() {
+uint2 textureDimensions_9b223b() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9b223b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9b223b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9b223b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9b223b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9b223b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9b223b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.fxc.hlsl
index 0992aac..aef0f13 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
TextureCube<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9b223b() {
+uint2 textureDimensions_9b223b() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9b223b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9b223b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9b223b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9b223b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9b223b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9b223b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.glsl
index b456160..8d3ff5f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp samplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_9b223b() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9b223b();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_9b223b() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9b223b() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_9b223b();
+ prevent_dce.inner = textureDimensions_9b223b();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_9b223b() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9b223b() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_9b223b();
+ prevent_dce.inner = textureDimensions_9b223b();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_9b223b() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9b223b();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.msl
index 37f5771..3f6930f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9b223b(texturecube<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9b223b(texturecube<float, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9b223b(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9b223b(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9b223b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9b223b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9b223b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9b223b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.spvasm
index 61b083f..35239d7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9b223b "textureDimensions_9b223b"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9b223b = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %v2uint %22 %int_0
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_9b223b = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySizeLod %v2uint %24 %int_0
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_9b223b
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_9b223b
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_9b223b
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_9b223b
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_9b223b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_9b223b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.wgsl
index c74b7e7..accf6a3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9b223b.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_cube<f32>;
-fn textureDimensions_9b223b() {
+fn textureDimensions_9b223b() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9b223b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9b223b();
+ prevent_dce = textureDimensions_9b223b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9b223b();
+ prevent_dce = textureDimensions_9b223b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9b223b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl
index f415fbd..7b49013 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube<u32>;
// fn textureDimensions(texture: texture_cube<u32>, level: u32) -> vec2<u32>
-fn textureDimensions_9baf27() {
+fn textureDimensions_9baf27() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9baf27();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9baf27();
+ prevent_dce = textureDimensions_9baf27();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9baf27();
+ prevent_dce = textureDimensions_9baf27();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9baf27();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.dxc.hlsl
index 852415f..4812322 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9baf27() {
+uint2 textureDimensions_9baf27() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9baf27();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9baf27();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9baf27()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9baf27();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9baf27()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9baf27();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.fxc.hlsl
index 852415f..4812322 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9baf27() {
+uint2 textureDimensions_9baf27() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9baf27();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9baf27();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9baf27()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9baf27();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9baf27()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9baf27();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.glsl
index c01974d..e410d7b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usamplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_9baf27() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9baf27();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_9baf27() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9baf27() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_9baf27();
+ prevent_dce.inner = textureDimensions_9baf27();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_9baf27() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9baf27() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_9baf27();
+ prevent_dce.inner = textureDimensions_9baf27();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_9baf27() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9baf27();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.msl
index 240c665..22978fd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9baf27(texturecube<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9baf27(texturecube<uint, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9baf27(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9baf27(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9baf27(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9baf27(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9baf27(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9baf27(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.spvasm
index 2ac8bb4..ea410ab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,78 +21,104 @@
OpName %textureDimensions_9baf27 "textureDimensions_9baf27"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %30 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_9baf27 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %30
+%textureDimensions_9baf27 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %v2uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %34 = OpLoad %v2uint %res
- OpStore %33 %34
+ %28 = OpLoad %16 %arg_0
+ %29 = OpLoad %uint %arg_1
+ %27 = OpImageQuerySizeLod %v2uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %v2uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_9baf27
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_9baf27
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %v2uint %textureDimensions_9baf27
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_9baf27
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_9baf27
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_9baf27
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.wgsl
index 1800a6d..1d1adf2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9baf27.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube<u32>;
-fn textureDimensions_9baf27() {
+fn textureDimensions_9baf27() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9baf27();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9baf27();
+ prevent_dce = textureDimensions_9baf27();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9baf27();
+ prevent_dce = textureDimensions_9baf27();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9baf27();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl
index c17895b..991fdd1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_1d<u32>;
// fn textureDimensions(texture: texture_1d<u32>, level: u32) -> u32
-fn textureDimensions_9c7a00() {
+fn textureDimensions_9c7a00() -> u32{
var arg_1 = 1u;
var res: u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9c7a00();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_9c7a00();
+ prevent_dce = textureDimensions_9c7a00();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9c7a00();
+ prevent_dce = textureDimensions_9c7a00();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9c7a00();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.dxc.hlsl
index 3f22fa2..f138b31 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9c7a00() {
+uint textureDimensions_9c7a00() {
uint arg_1 = 1u;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9c7a00();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9c7a00();
+ prevent_dce.Store(0u, asuint(textureDimensions_9c7a00()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9c7a00();
+ prevent_dce.Store(0u, asuint(textureDimensions_9c7a00()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9c7a00();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.fxc.hlsl
index 3f22fa2..f138b31 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9c7a00() {
+uint textureDimensions_9c7a00() {
uint arg_1 = 1u;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9c7a00();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9c7a00();
+ prevent_dce.Store(0u, asuint(textureDimensions_9c7a00()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9c7a00();
+ prevent_dce.Store(0u, asuint(textureDimensions_9c7a00()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9c7a00();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.glsl
index 1bb3946..2f79e19 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_9c7a00() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9c7a00();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2D arg_0_1;
+uint textureDimensions_9c7a00() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_9c7a00() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_9c7a00();
+ prevent_dce.inner = textureDimensions_9c7a00();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usampler2D arg_0_1;
+uint textureDimensions_9c7a00() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_9c7a00() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_9c7a00();
+ prevent_dce.inner = textureDimensions_9c7a00();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp usampler2D arg_0_1;
+uint textureDimensions_9c7a00() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9c7a00();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.msl
index a9d09c0..3794f09 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9c7a00(texture1d<uint, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_9c7a00(texture1d<uint, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9c7a00(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9c7a00(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_9c7a00(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9c7a00(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9c7a00(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9c7a00(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.spvasm
index 77a30ca..3bbefba 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,75 +22,101 @@
OpName %textureDimensions_9c7a00 "textureDimensions_9c7a00"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %23 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_9c7a00 = OpFunction %void None %16
- %19 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %23
- %res = OpVariable %_ptr_Function_uint Function %23
+%textureDimensions_9c7a00 = OpFunction %uint None %19
+ %21 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %9
+ %res = OpVariable %_ptr_Function_uint Function %9
OpStore %arg_1 %uint_1
- %25 = OpLoad %11 %arg_0
- %26 = OpLoad %uint %arg_1
- %24 = OpImageQuerySizeLod %uint %25 %26
- OpStore %res %24
- %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %31 = OpLoad %uint %res
- OpStore %30 %31
+ %26 = OpLoad %15 %arg_0
+ %27 = OpLoad %uint %arg_1
+ %25 = OpImageQuerySizeLod %uint %26 %27
+ OpStore %res %25
+ %29 = OpLoad %uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %uint %textureDimensions_9c7a00
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_9c7a00
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %uint %textureDimensions_9c7a00
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %51 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %52 = OpFunctionCall %uint %textureDimensions_9c7a00
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_9c7a00
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_9c7a00
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.wgsl
index 7d57524..60f4b47 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9c7a00.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_1d<u32>;
-fn textureDimensions_9c7a00() {
+fn textureDimensions_9c7a00() -> u32 {
var arg_1 = 1u;
var res : u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9c7a00();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_9c7a00();
+ prevent_dce = textureDimensions_9c7a00();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9c7a00();
+ prevent_dce = textureDimensions_9c7a00();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9c7a00();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl
index cb50446..48b06ec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube<u32>;
// fn textureDimensions(texture: texture_cube<u32>, level: i32) -> vec2<u32>
-fn textureDimensions_9cd4ca() {
+fn textureDimensions_9cd4ca() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9cd4ca();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9cd4ca();
+ prevent_dce = textureDimensions_9cd4ca();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9cd4ca();
+ prevent_dce = textureDimensions_9cd4ca();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9cd4ca();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.dxc.hlsl
index 32b790a..53a29e4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9cd4ca() {
+uint2 textureDimensions_9cd4ca() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9cd4ca();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9cd4ca();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9cd4ca()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9cd4ca();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9cd4ca()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9cd4ca();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.fxc.hlsl
index 32b790a..53a29e4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9cd4ca() {
+uint2 textureDimensions_9cd4ca() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9cd4ca();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9cd4ca();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9cd4ca()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9cd4ca();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9cd4ca()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9cd4ca();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.glsl
index 9637636..b972031 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usamplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_9cd4ca() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9cd4ca();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_9cd4ca() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9cd4ca() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_9cd4ca();
+ prevent_dce.inner = textureDimensions_9cd4ca();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_9cd4ca() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9cd4ca() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_9cd4ca();
+ prevent_dce.inner = textureDimensions_9cd4ca();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usamplerCube arg_0_1;
+uvec2 textureDimensions_9cd4ca() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9cd4ca();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.msl
index 10b24fe..01b9841 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9cd4ca(texturecube<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9cd4ca(texturecube<uint, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9cd4ca(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9cd4ca(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9cd4ca(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9cd4ca(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9cd4ca(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9cd4ca(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.spvasm
index 776f53d..e462491 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_9cd4ca "textureDimensions_9cd4ca"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9cd4ca = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_9cd4ca = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_9cd4ca
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_9cd4ca
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_9cd4ca
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_9cd4ca
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_9cd4ca
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_9cd4ca
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.wgsl
index 568a73d..f9ea63e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd4ca.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube<u32>;
-fn textureDimensions_9cd4ca() {
+fn textureDimensions_9cd4ca() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9cd4ca();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9cd4ca();
+ prevent_dce = textureDimensions_9cd4ca();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9cd4ca();
+ prevent_dce = textureDimensions_9cd4ca();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9cd4ca();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl
index 38e7754..12257f0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32float, write>;
// fn textureDimensions(texture: texture_storage_3d<rg32float, write>) -> vec3<u32>
-fn textureDimensions_9cd8ad() {
+fn textureDimensions_9cd8ad() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9cd8ad();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9cd8ad();
+ prevent_dce = textureDimensions_9cd8ad();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9cd8ad();
+ prevent_dce = textureDimensions_9cd8ad();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9cd8ad();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.dxc.hlsl
index 411be2e..8687f94 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9cd8ad() {
+uint3 textureDimensions_9cd8ad() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9cd8ad();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9cd8ad();
+ prevent_dce.Store3(0u, asuint(textureDimensions_9cd8ad()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9cd8ad();
+ prevent_dce.Store3(0u, asuint(textureDimensions_9cd8ad()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9cd8ad();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.fxc.hlsl
index 411be2e..8687f94 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9cd8ad() {
+uint3 textureDimensions_9cd8ad() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9cd8ad();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9cd8ad();
+ prevent_dce.Store3(0u, asuint(textureDimensions_9cd8ad()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9cd8ad();
+ prevent_dce.Store3(0u, asuint(textureDimensions_9cd8ad()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9cd8ad();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.msl
index 11a7158..fc27713 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9cd8ad(texture3d<float, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_9cd8ad(texture3d<float, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_9cd8ad(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_9cd8ad(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_9cd8ad(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9cd8ad(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9cd8ad(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9cd8ad(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.spvasm
index 73218ee..2feb3ab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9cd8ad "textureDimensions_9cd8ad"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9cd8ad = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_9cd8ad = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_9cd8ad
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_9cd8ad
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_9cd8ad
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_9cd8ad
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_9cd8ad
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_9cd8ad
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.wgsl
index 42490bf..e5a7e29 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9cd8ad.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, write>;
-fn textureDimensions_9cd8ad() {
+fn textureDimensions_9cd8ad() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9cd8ad();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9cd8ad();
+ prevent_dce = textureDimensions_9cd8ad();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9cd8ad();
+ prevent_dce = textureDimensions_9cd8ad();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9cd8ad();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl
index 17c87e2..1ef50b0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32float, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba32float, read>) -> vec2<u32>
-fn textureDimensions_9d0bac() {
+fn textureDimensions_9d0bac() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9d0bac();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9d0bac();
+ prevent_dce = textureDimensions_9d0bac();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9d0bac();
+ prevent_dce = textureDimensions_9d0bac();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9d0bac();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.dxc.hlsl
index 1daf99e..1b42e37 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9d0bac() {
+uint2 textureDimensions_9d0bac() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9d0bac();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9d0bac();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9d0bac()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9d0bac();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9d0bac()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9d0bac();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.fxc.hlsl
index 1daf99e..1b42e37 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9d0bac() {
+uint2 textureDimensions_9d0bac() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9d0bac();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9d0bac();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9d0bac()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9d0bac();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9d0bac()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9d0bac();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.glsl
index 55b3483..c00d60c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_9d0bac() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9d0bac();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_9d0bac() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9d0bac() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_9d0bac();
+ prevent_dce.inner = textureDimensions_9d0bac();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_9d0bac() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9d0bac() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_9d0bac();
+ prevent_dce.inner = textureDimensions_9d0bac();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32f) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_9d0bac() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9d0bac();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.msl
index 2c37917..ebe3dd6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9d0bac(texture2d<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9d0bac(texture2d<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9d0bac(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9d0bac(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9d0bac(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9d0bac(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9d0bac(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9d0bac(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.spvasm
index df30003..d8b1a89 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9d0bac "textureDimensions_9d0bac"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9d0bac = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_9d0bac = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_9d0bac
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_9d0bac
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_9d0bac
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_9d0bac
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_9d0bac
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_9d0bac
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.wgsl
index bd133d7..f796866 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d0bac.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read>;
-fn textureDimensions_9d0bac() {
+fn textureDimensions_9d0bac() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9d0bac();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9d0bac();
+ prevent_dce = textureDimensions_9d0bac();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9d0bac();
+ prevent_dce = textureDimensions_9d0bac();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9d0bac();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl
index 6e33b08..4c6f85a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8snorm, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba8snorm, read>) -> u32
-fn textureDimensions_9d68b8() {
+fn textureDimensions_9d68b8() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9d68b8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_9d68b8();
+ prevent_dce = textureDimensions_9d68b8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9d68b8();
+ prevent_dce = textureDimensions_9d68b8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9d68b8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.dxc.hlsl
index 51024d0..e7712c2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9d68b8() {
+uint textureDimensions_9d68b8() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9d68b8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9d68b8();
+ prevent_dce.Store(0u, asuint(textureDimensions_9d68b8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9d68b8();
+ prevent_dce.Store(0u, asuint(textureDimensions_9d68b8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9d68b8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.fxc.hlsl
index 51024d0..e7712c2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9d68b8() {
+uint textureDimensions_9d68b8() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9d68b8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9d68b8();
+ prevent_dce.Store(0u, asuint(textureDimensions_9d68b8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9d68b8();
+ prevent_dce.Store(0u, asuint(textureDimensions_9d68b8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9d68b8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.glsl
index 606427a..f669f7a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_9d68b8() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9d68b8();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp readonly image2D arg_0;
+uint textureDimensions_9d68b8() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_9d68b8() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_9d68b8();
+ prevent_dce.inner = textureDimensions_9d68b8();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp readonly image2D arg_0;
+uint textureDimensions_9d68b8() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_9d68b8() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_9d68b8();
+ prevent_dce.inner = textureDimensions_9d68b8();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8_snorm) uniform highp readonly image2D arg_0;
+uint textureDimensions_9d68b8() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9d68b8();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.msl
index e8a81a3..977843a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9d68b8(texture1d<float, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_9d68b8(texture1d<float, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9d68b8(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9d68b8(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_9d68b8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9d68b8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9d68b8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9d68b8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.spvasm
index a7c41bf..902cee6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9d68b8 "textureDimensions_9d68b8"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9d68b8 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_9d68b8 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_9d68b8
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_9d68b8
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_9d68b8
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_9d68b8
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_9d68b8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_9d68b8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.wgsl
index 2362157..9119b63 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9d68b8.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read>;
-fn textureDimensions_9d68b8() {
+fn textureDimensions_9d68b8() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9d68b8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_9d68b8();
+ prevent_dce = textureDimensions_9d68b8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9d68b8();
+ prevent_dce = textureDimensions_9d68b8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9d68b8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl
index a857d47..3d91f99 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32float, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32float, read>) -> vec2<u32>
-fn textureDimensions_9dc27a() {
+fn textureDimensions_9dc27a() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9dc27a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9dc27a();
+ prevent_dce = textureDimensions_9dc27a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9dc27a();
+ prevent_dce = textureDimensions_9dc27a();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9dc27a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.dxc.hlsl
index a97dcc6..74ae3fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9dc27a() {
+uint2 textureDimensions_9dc27a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9dc27a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9dc27a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9dc27a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9dc27a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9dc27a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9dc27a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.fxc.hlsl
index a97dcc6..74ae3fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9dc27a() {
+uint2 textureDimensions_9dc27a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9dc27a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9dc27a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9dc27a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9dc27a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9dc27a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9dc27a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.msl
index ac2aefb..692eb0b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9dc27a(texture2d_array<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9dc27a(texture2d_array<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9dc27a(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9dc27a(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9dc27a(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9dc27a(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9dc27a(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9dc27a(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.spvasm
index c277a29..42e8f28 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,75 +21,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9dc27a "textureDimensions_9dc27a"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9dc27a = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_9dc27a = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_9dc27a
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_9dc27a
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_9dc27a
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_9dc27a
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_9dc27a
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_9dc27a
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.wgsl
index 98a96cc..d6006e7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9dc27a.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32float, read>;
-fn textureDimensions_9dc27a() {
+fn textureDimensions_9dc27a() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9dc27a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9dc27a();
+ prevent_dce = textureDimensions_9dc27a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9dc27a();
+ prevent_dce = textureDimensions_9dc27a();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9dc27a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl
index f0dd9b9..bd6dace 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d_array<u32>;
// fn textureDimensions(texture: texture_2d_array<u32>, level: i32) -> vec2<u32>
-fn textureDimensions_9e0794() {
+fn textureDimensions_9e0794() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9e0794();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9e0794();
+ prevent_dce = textureDimensions_9e0794();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9e0794();
+ prevent_dce = textureDimensions_9e0794();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9e0794();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.dxc.hlsl
index 407da92..8a34884 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9e0794() {
+uint2 textureDimensions_9e0794() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9e0794();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9e0794();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9e0794()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9e0794();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9e0794()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9e0794();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.fxc.hlsl
index 407da92..8a34884 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9e0794() {
+uint2 textureDimensions_9e0794() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9e0794();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9e0794();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9e0794()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9e0794();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9e0794()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9e0794();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.glsl
index 0168a03..82bab0d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_9e0794() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_9e0794();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_9e0794() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9e0794() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_9e0794();
+ prevent_dce.inner = textureDimensions_9e0794();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_9e0794() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_9e0794() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_9e0794();
+ prevent_dce.inner = textureDimensions_9e0794();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usampler2DArray arg_0_1;
+uvec2 textureDimensions_9e0794() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_9e0794();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.msl
index 74b4480..88224ec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9e0794(texture2d_array<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9e0794(texture2d_array<uint, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9e0794(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9e0794(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9e0794(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9e0794(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9e0794(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9e0794(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.spvasm
index ba8abd1..b14e70b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 67
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,81 +21,108 @@
OpName %textureDimensions_9e0794 "textureDimensions_9e0794"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9e0794 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_9e0794 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %int %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %int %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_9e0794
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_9e0794
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_9e0794
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %58 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %59 = OpFunctionCall %v2uint %textureDimensions_9e0794
+ OpStore %58 %59
+ %60 = OpLoad %VertexOutput %out
+ OpReturnValue %60
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %62 = OpLabel
+ %63 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %64 = OpCompositeExtract %v4float %63 0
+ OpStore %pos_1 %64
+ %65 = OpCompositeExtract %v2uint %63 1
+ OpStore %prevent_dce_1 %65
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_9e0794
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_9e0794
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.wgsl
index ebf2ca8..1d4009f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9e0794.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<u32>;
-fn textureDimensions_9e0794() {
+fn textureDimensions_9e0794() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9e0794();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9e0794();
+ prevent_dce = textureDimensions_9e0794();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9e0794();
+ prevent_dce = textureDimensions_9e0794();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9e0794();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl
index 54544d8..ddf22a9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_depth_cube_array;
// fn textureDimensions(texture: texture_depth_cube_array) -> vec2<u32>
-fn textureDimensions_9fcc3b() {
+fn textureDimensions_9fcc3b() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9fcc3b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9fcc3b();
+ prevent_dce = textureDimensions_9fcc3b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9fcc3b();
+ prevent_dce = textureDimensions_9fcc3b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9fcc3b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.dxc.hlsl
index 501e9bd..d788dcc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
TextureCubeArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9fcc3b() {
+uint2 textureDimensions_9fcc3b() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9fcc3b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9fcc3b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9fcc3b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9fcc3b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9fcc3b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9fcc3b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.fxc.hlsl
index 501e9bd..d788dcc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
TextureCubeArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_9fcc3b() {
+uint2 textureDimensions_9fcc3b() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_9fcc3b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_9fcc3b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9fcc3b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_9fcc3b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_9fcc3b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_9fcc3b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.msl
index 83fc78d..5866b4c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_9fcc3b(depthcube_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_9fcc3b(depthcube_array<float, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depthcube_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_9fcc3b(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depthcube_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_9fcc3b(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depthcube_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_9fcc3b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depthcube_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_9fcc3b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depthcube_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depthcube_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depthcube_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_9fcc3b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depthcube_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_9fcc3b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.spvasm
index e7bb90b..8117b86 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,76 +21,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_9fcc3b "textureDimensions_9fcc3b"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %29 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %32 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %34 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %44 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %50 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_9fcc3b = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %29
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v3uint %24 %int_0
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %32 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %33 = OpLoad %v2uint %res
- OpStore %32 %33
+%textureDimensions_9fcc3b = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v3uint %26 %int_0
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %31 = OpLoad %v2uint %res
+ OpReturnValue %31
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %32
+ %35 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_9fcc3b
+ OpStore %38 %39
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
- %36 = OpLabel
- %37 = OpFunctionCall %void %textureDimensions_9fcc3b
- OpReturnValue %5
+%compute_main = OpFunction %void None %32
+ %41 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_9fcc3b
+ OpStore %42 %43
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %40
+%vertex_main_inner = OpFunction %VertexOutput None %44
+ %47 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %50
+ %52 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %52 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_9fcc3b
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %32
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_9fcc3b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_9fcc3b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.wgsl
index bfcab8a..995d390 100644
--- a/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/9fcc3b.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
-fn textureDimensions_9fcc3b() {
+fn textureDimensions_9fcc3b() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_9fcc3b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_9fcc3b();
+ prevent_dce = textureDimensions_9fcc3b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_9fcc3b();
+ prevent_dce = textureDimensions_9fcc3b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_9fcc3b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl
index f705590..81f9eae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32uint, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba32uint, read_write>) -> vec3<u32>
-fn textureDimensions_a105a5() {
+fn textureDimensions_a105a5() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a105a5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a105a5();
+ prevent_dce = textureDimensions_a105a5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a105a5();
+ prevent_dce = textureDimensions_a105a5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a105a5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.dxc.hlsl
index 66acd66..8a52cb6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a105a5() {
+uint3 textureDimensions_a105a5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a105a5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a105a5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a105a5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a105a5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a105a5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a105a5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.fxc.hlsl
index 66acd66..8a52cb6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a105a5() {
+uint3 textureDimensions_a105a5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a105a5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a105a5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a105a5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a105a5();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a105a5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a105a5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.glsl
index 36d07bd..68a1922 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32ui) uniform highp writeonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_a105a5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a105a5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_a105a5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_a105a5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_a105a5();
+ prevent_dce.inner = textureDimensions_a105a5();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_a105a5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_a105a5() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_a105a5();
+ prevent_dce.inner = textureDimensions_a105a5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_a105a5() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a105a5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.msl
index 6f9707d..321c9ba5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a105a5(texture3d<uint, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_a105a5(texture3d<uint, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_a105a5(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_a105a5(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_a105a5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a105a5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a105a5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a105a5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.spvasm
index 1e8255c..7266160 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a105a5 "textureDimensions_a105a5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a105a5 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_a105a5 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_a105a5
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_a105a5
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_a105a5
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_a105a5
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_a105a5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_a105a5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.wgsl
index 81f99bf..eea6b65 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a105a5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32uint, read_write>;
-fn textureDimensions_a105a5() {
+fn textureDimensions_a105a5() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a105a5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a105a5();
+ prevent_dce = textureDimensions_a105a5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a105a5();
+ prevent_dce = textureDimensions_a105a5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a105a5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl
index 90bba94..376e0f2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16float, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba16float, read_write>) -> vec2<u32>
-fn textureDimensions_a14386() {
+fn textureDimensions_a14386() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a14386();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a14386();
+ prevent_dce = textureDimensions_a14386();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a14386();
+ prevent_dce = textureDimensions_a14386();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a14386();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.dxc.hlsl
index df2277b..e74b745 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a14386() {
+uint2 textureDimensions_a14386() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a14386();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a14386();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a14386()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a14386();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a14386()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a14386();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.fxc.hlsl
index df2277b..e74b745 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a14386() {
+uint2 textureDimensions_a14386() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a14386();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a14386();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a14386()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a14386();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a14386()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a14386();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.glsl
index 05f3368..37943e0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_a14386() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a14386();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_a14386() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a14386() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_a14386();
+ prevent_dce.inner = textureDimensions_a14386();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_a14386() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a14386() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_a14386();
+ prevent_dce.inner = textureDimensions_a14386();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_a14386() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a14386();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.msl
index 4154898..63e8906 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a14386(texture2d<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_a14386(texture2d<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_a14386(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_a14386(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_a14386(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a14386(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a14386(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a14386(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.spvasm
index a0b3c44..5101658 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a14386 "textureDimensions_a14386"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a14386 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_a14386 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_a14386
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_a14386
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_a14386
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_a14386
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_a14386
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_a14386
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.wgsl
index dcffd34..c502580 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a14386.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16float, read_write>;
-fn textureDimensions_a14386() {
+fn textureDimensions_a14386() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a14386();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a14386();
+ prevent_dce = textureDimensions_a14386();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a14386();
+ prevent_dce = textureDimensions_a14386();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a14386();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl
index fffc6ce..a6e9c63 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_cube_array<u32>;
// fn textureDimensions(texture: texture_cube_array<u32>) -> vec2<u32>
-fn textureDimensions_a1598a() {
+fn textureDimensions_a1598a() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a1598a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a1598a();
+ prevent_dce = textureDimensions_a1598a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a1598a();
+ prevent_dce = textureDimensions_a1598a();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a1598a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.dxc.hlsl
index fec0480..ce8d913 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
TextureCubeArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a1598a() {
+uint2 textureDimensions_a1598a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a1598a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a1598a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a1598a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a1598a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a1598a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a1598a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.fxc.hlsl
index fec0480..ce8d913 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
TextureCubeArray<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a1598a() {
+uint2 textureDimensions_a1598a() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a1598a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a1598a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a1598a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a1598a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a1598a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a1598a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.msl
index d32e662..ab612cd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a1598a(texturecube_array<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_a1598a(texturecube_array<uint, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_a1598a(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_a1598a(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_a1598a(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a1598a(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a1598a(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a1598a(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.spvasm
index 9aba6f2..fbd517c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,76 +21,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a1598a "textureDimensions_a1598a"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %29 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %32 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %34 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %44 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %50 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a1598a = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %29
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v3uint %24 %int_0
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %32 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %33 = OpLoad %v2uint %res
- OpStore %32 %33
+%textureDimensions_a1598a = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v3uint %26 %int_0
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %31 = OpLoad %v2uint %res
+ OpReturnValue %31
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %32
+ %35 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_a1598a
+ OpStore %38 %39
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
- %36 = OpLabel
- %37 = OpFunctionCall %void %textureDimensions_a1598a
- OpReturnValue %5
+%compute_main = OpFunction %void None %32
+ %41 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_a1598a
+ OpStore %42 %43
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %40
+%vertex_main_inner = OpFunction %VertexOutput None %44
+ %47 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %50
+ %52 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %52 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_a1598a
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %32
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_a1598a
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_a1598a
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.wgsl
index 94245b7..6019484 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a1598a.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<u32>;
-fn textureDimensions_a1598a() {
+fn textureDimensions_a1598a() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a1598a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a1598a();
+ prevent_dce = textureDimensions_a1598a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a1598a();
+ prevent_dce = textureDimensions_a1598a();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a1598a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl
index f59767e..114b7e5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r8unorm, write>;
// fn textureDimensions(texture: texture_storage_3d<r8unorm, write>) -> vec3<u32>
-fn textureDimensions_a20ba2() {
+fn textureDimensions_a20ba2() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a20ba2();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a20ba2();
+ prevent_dce = textureDimensions_a20ba2();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a20ba2();
+ prevent_dce = textureDimensions_a20ba2();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a20ba2();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.dxc.hlsl
index 205a438..056cc58 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a20ba2() {
+uint3 textureDimensions_a20ba2() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a20ba2();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a20ba2();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a20ba2()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a20ba2();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a20ba2()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a20ba2();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.fxc.hlsl
index 205a438..056cc58 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a20ba2() {
+uint3 textureDimensions_a20ba2() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a20ba2();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a20ba2();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a20ba2()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a20ba2();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a20ba2()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a20ba2();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.msl
index 87cfc47..bd6518a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a20ba2(texture3d<float, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_a20ba2(texture3d<float, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_a20ba2(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_a20ba2(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_a20ba2(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a20ba2(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a20ba2(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a20ba2(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.spvasm
index cddc7bd..7226ee5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a20ba2 "textureDimensions_a20ba2"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 R8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a20ba2 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_a20ba2 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_a20ba2
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_a20ba2
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_a20ba2
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_a20ba2
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_a20ba2
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_a20ba2
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.wgsl
index e5b4bb5..3385fd5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a20ba2.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r8unorm, write>;
-fn textureDimensions_a20ba2() {
+fn textureDimensions_a20ba2() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a20ba2();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a20ba2();
+ prevent_dce = textureDimensions_a20ba2();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a20ba2();
+ prevent_dce = textureDimensions_a20ba2();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a20ba2();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl
index 8008af1..416084e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8unorm, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba8unorm, read>) -> vec3<u32>
-fn textureDimensions_a25d9b() {
+fn textureDimensions_a25d9b() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a25d9b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a25d9b();
+ prevent_dce = textureDimensions_a25d9b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a25d9b();
+ prevent_dce = textureDimensions_a25d9b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a25d9b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.dxc.hlsl
index de8b046..5b28495 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a25d9b() {
+uint3 textureDimensions_a25d9b() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a25d9b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a25d9b();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a25d9b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a25d9b();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a25d9b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a25d9b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.fxc.hlsl
index de8b046..5b28495 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a25d9b() {
+uint3 textureDimensions_a25d9b() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a25d9b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a25d9b();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a25d9b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a25d9b();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a25d9b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a25d9b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.glsl
index 4a28a66..a359a59 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8) uniform highp readonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_a25d9b() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a25d9b();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_a25d9b() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_a25d9b() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_a25d9b();
+ prevent_dce.inner = textureDimensions_a25d9b();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_a25d9b() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_a25d9b() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_a25d9b();
+ prevent_dce.inner = textureDimensions_a25d9b();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_a25d9b() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a25d9b();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.msl
index df1ac0f..25dc598 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a25d9b(texture3d<float, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_a25d9b(texture3d<float, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_a25d9b(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_a25d9b(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_a25d9b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a25d9b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a25d9b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a25d9b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.spvasm
index 3d0abc9..3f76b58 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a25d9b "textureDimensions_a25d9b"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a25d9b = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_a25d9b = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_a25d9b
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_a25d9b
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_a25d9b
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_a25d9b
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_a25d9b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_a25d9b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.wgsl
index 9c4eb99..54bf8b4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a25d9b.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8unorm, read>;
-fn textureDimensions_a25d9b() {
+fn textureDimensions_a25d9b() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a25d9b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a25d9b();
+ prevent_dce = textureDimensions_a25d9b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a25d9b();
+ prevent_dce = textureDimensions_a25d9b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a25d9b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl
index 2b44c0e..f3d7a8a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube<i32>;
// fn textureDimensions(texture: texture_cube<i32>, level: i32) -> vec2<u32>
-fn textureDimensions_a2ba5e() {
+fn textureDimensions_a2ba5e() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a2ba5e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a2ba5e();
+ prevent_dce = textureDimensions_a2ba5e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a2ba5e();
+ prevent_dce = textureDimensions_a2ba5e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a2ba5e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.dxc.hlsl
index ba9a499..952a6c8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a2ba5e() {
+uint2 textureDimensions_a2ba5e() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a2ba5e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a2ba5e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a2ba5e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a2ba5e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a2ba5e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a2ba5e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.fxc.hlsl
index ba9a499..952a6c8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCube<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a2ba5e() {
+uint2 textureDimensions_a2ba5e() {
int arg_1 = 1;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a2ba5e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a2ba5e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a2ba5e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a2ba5e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a2ba5e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a2ba5e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.glsl
index 9e9d10f..55c0be5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isamplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_a2ba5e() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a2ba5e();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_a2ba5e() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a2ba5e() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_a2ba5e();
+ prevent_dce.inner = textureDimensions_a2ba5e();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_a2ba5e() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a2ba5e() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_a2ba5e();
+ prevent_dce.inner = textureDimensions_a2ba5e();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_a2ba5e() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a2ba5e();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.msl
index 48fa657..23499a6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a2ba5e(texturecube<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_a2ba5e(texturecube<int, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_a2ba5e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_a2ba5e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_a2ba5e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a2ba5e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a2ba5e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a2ba5e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.spvasm
index 3e7549b..7b828b3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_a2ba5e "textureDimensions_a2ba5e"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a2ba5e = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_a2ba5e = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_a2ba5e
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_a2ba5e
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_a2ba5e
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_a2ba5e
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_a2ba5e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_a2ba5e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.wgsl
index 8e65fcb..a6e2876 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a2ba5e.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube<i32>;
-fn textureDimensions_a2ba5e() {
+fn textureDimensions_a2ba5e() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a2ba5e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a2ba5e();
+ prevent_dce = textureDimensions_a2ba5e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a2ba5e();
+ prevent_dce = textureDimensions_a2ba5e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a2ba5e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl
index 1eab903..9ddb140 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16float, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba16float, read>) -> vec3<u32>
-fn textureDimensions_a3ea91() {
+fn textureDimensions_a3ea91() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a3ea91();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a3ea91();
+ prevent_dce = textureDimensions_a3ea91();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a3ea91();
+ prevent_dce = textureDimensions_a3ea91();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a3ea91();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.dxc.hlsl
index 503338f..f536ed2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a3ea91() {
+uint3 textureDimensions_a3ea91() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a3ea91();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a3ea91();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a3ea91()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a3ea91();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a3ea91()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a3ea91();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.fxc.hlsl
index 503338f..f536ed2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a3ea91() {
+uint3 textureDimensions_a3ea91() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a3ea91();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a3ea91();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a3ea91()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a3ea91();
+ prevent_dce.Store3(0u, asuint(textureDimensions_a3ea91()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a3ea91();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.glsl
index 147f3a3..7ac7d69 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16f) uniform highp readonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_a3ea91() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a3ea91();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_a3ea91() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_a3ea91() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_a3ea91();
+ prevent_dce.inner = textureDimensions_a3ea91();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_a3ea91() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_a3ea91() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_a3ea91();
+ prevent_dce.inner = textureDimensions_a3ea91();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_a3ea91() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a3ea91();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.msl
index d161824..874b272 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a3ea91(texture3d<float, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_a3ea91(texture3d<float, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_a3ea91(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_a3ea91(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_a3ea91(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a3ea91(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a3ea91(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a3ea91(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.spvasm
index d34788b..07ca8ad 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a3ea91 "textureDimensions_a3ea91"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a3ea91 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_a3ea91 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_a3ea91
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_a3ea91
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_a3ea91
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_a3ea91
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_a3ea91
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_a3ea91
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.wgsl
index 836f39f..39ead80 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a3ea91.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read>;
-fn textureDimensions_a3ea91() {
+fn textureDimensions_a3ea91() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a3ea91();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a3ea91();
+ prevent_dce = textureDimensions_a3ea91();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a3ea91();
+ prevent_dce = textureDimensions_a3ea91();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a3ea91();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl
index 987bc88..22798dc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d<i32>;
// fn textureDimensions(texture: texture_2d<i32>, level: u32) -> vec2<u32>
-fn textureDimensions_a48049() {
+fn textureDimensions_a48049() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a48049();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a48049();
+ prevent_dce = textureDimensions_a48049();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a48049();
+ prevent_dce = textureDimensions_a48049();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a48049();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.dxc.hlsl
index 52650d5..6e1a8cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a48049() {
+uint2 textureDimensions_a48049() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a48049();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a48049();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a48049()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a48049();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a48049()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a48049();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.fxc.hlsl
index 52650d5..6e1a8cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a48049() {
+uint2 textureDimensions_a48049() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a48049();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a48049();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a48049()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a48049();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a48049()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a48049();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.glsl
index f152fe5..92aca12 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_a48049() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a48049();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_a48049() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a48049() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_a48049();
+ prevent_dce.inner = textureDimensions_a48049();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_a48049() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a48049() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_a48049();
+ prevent_dce.inner = textureDimensions_a48049();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_a48049() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a48049();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.msl
index 4e383e6..b363763 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a48049(texture2d<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_a48049(texture2d<int, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_a48049(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_a48049(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_a48049(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a48049(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a48049(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a48049(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.spvasm
index f26c041..62f8de5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 64
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,105 @@
OpName %textureDimensions_a48049 "textureDimensions_a48049"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %27 = OpConstantNull %uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %31 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_a48049 = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %31
+%textureDimensions_a48049 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v2uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %35 = OpLoad %v2uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v2uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v2uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_a48049
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_a48049
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v2uint %textureDimensions_a48049
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %55 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %56 = OpFunctionCall %v2uint %textureDimensions_a48049
+ OpStore %55 %56
+ %57 = OpLoad %VertexOutput %out
+ OpReturnValue %57
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %59 = OpLabel
+ %60 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %61 = OpCompositeExtract %v4float %60 0
+ OpStore %pos_1 %61
+ %62 = OpCompositeExtract %v2uint %60 1
+ OpStore %prevent_dce_1 %62
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_a48049
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_a48049
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.wgsl
index 7c309cd..588cab6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a48049.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d<i32>;
-fn textureDimensions_a48049() {
+fn textureDimensions_a48049() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a48049();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a48049();
+ prevent_dce = textureDimensions_a48049();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a48049();
+ prevent_dce = textureDimensions_a48049();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a48049();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl
index 9523a6d..236ea65 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_depth_2d_array;
// fn textureDimensions(texture: texture_depth_2d_array) -> vec2<u32>
-fn textureDimensions_a4cd56() {
+fn textureDimensions_a4cd56() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a4cd56();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a4cd56();
+ prevent_dce = textureDimensions_a4cd56();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a4cd56();
+ prevent_dce = textureDimensions_a4cd56();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a4cd56();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.dxc.hlsl
index 367aa08..4d17222 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a4cd56() {
+uint2 textureDimensions_a4cd56() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a4cd56();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a4cd56();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a4cd56()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a4cd56();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a4cd56()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a4cd56();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.fxc.hlsl
index 367aa08..4d17222 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a4cd56() {
+uint2 textureDimensions_a4cd56() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a4cd56();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a4cd56();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a4cd56()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a4cd56();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a4cd56()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a4cd56();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.glsl
index 6825de2..1610652 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp sampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_a4cd56() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a4cd56();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_a4cd56() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a4cd56() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_a4cd56();
+ prevent_dce.inner = textureDimensions_a4cd56();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_a4cd56() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a4cd56() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_a4cd56();
+ prevent_dce.inner = textureDimensions_a4cd56();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_a4cd56() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a4cd56();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.msl
index 8d4b437..0b4378f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a4cd56(depth2d_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_a4cd56(depth2d_array<float, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depth2d_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_a4cd56(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depth2d_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_a4cd56(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depth2d_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_a4cd56(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depth2d_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a4cd56(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depth2d_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depth2d_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depth2d_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a4cd56(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depth2d_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a4cd56(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.spvasm
index 5c981bd..3d9d5ff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a4cd56 "textureDimensions_a4cd56"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %29 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %32 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %34 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %44 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %50 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a4cd56 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %29
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v3uint %24 %int_0
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %32 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %33 = OpLoad %v2uint %res
- OpStore %32 %33
+%textureDimensions_a4cd56 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v3uint %26 %int_0
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %31 = OpLoad %v2uint %res
+ OpReturnValue %31
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %32
+ %35 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_a4cd56
+ OpStore %38 %39
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
- %36 = OpLabel
- %37 = OpFunctionCall %void %textureDimensions_a4cd56
- OpReturnValue %5
+%compute_main = OpFunction %void None %32
+ %41 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_a4cd56
+ OpStore %42 %43
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %40
+%vertex_main_inner = OpFunction %VertexOutput None %44
+ %47 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %50
+ %52 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %52 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_a4cd56
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %32
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_a4cd56
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_a4cd56
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.wgsl
index e59960e..d878e53 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a4cd56.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
-fn textureDimensions_a4cd56() {
+fn textureDimensions_a4cd56() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a4cd56();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a4cd56();
+ prevent_dce = textureDimensions_a4cd56();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a4cd56();
+ prevent_dce = textureDimensions_a4cd56();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a4cd56();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl
index 1b31b45..c54d957 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16sint, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba16sint, read>) -> vec2<u32>
-fn textureDimensions_a65776() {
+fn textureDimensions_a65776() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a65776();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a65776();
+ prevent_dce = textureDimensions_a65776();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a65776();
+ prevent_dce = textureDimensions_a65776();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a65776();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.dxc.hlsl
index 46c6a77..49a3575 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a65776() {
+uint2 textureDimensions_a65776() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a65776();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a65776();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a65776()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a65776();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a65776()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a65776();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.fxc.hlsl
index 46c6a77..49a3575 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a65776() {
+uint2 textureDimensions_a65776() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a65776();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a65776();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a65776()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a65776();
+ prevent_dce.Store2(0u, asuint(textureDimensions_a65776()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a65776();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.glsl
index 4666480..47ed1ba 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp readonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_a65776() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a65776();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_a65776() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a65776() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_a65776();
+ prevent_dce.inner = textureDimensions_a65776();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_a65776() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_a65776() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_a65776();
+ prevent_dce.inner = textureDimensions_a65776();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_a65776() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a65776();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.msl
index eedd1cd..36053a3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a65776(texture2d<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_a65776(texture2d<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_a65776(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_a65776(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_a65776(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a65776(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a65776(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a65776(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.spvasm
index e07651b..792ac59 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a65776 "textureDimensions_a65776"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a65776 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_a65776 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_a65776
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_a65776
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_a65776
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_a65776
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_a65776
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_a65776
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.wgsl
index 3edcf284..685ee79 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a65776.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read>;
-fn textureDimensions_a65776() {
+fn textureDimensions_a65776() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a65776();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_a65776();
+ prevent_dce = textureDimensions_a65776();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a65776();
+ prevent_dce = textureDimensions_a65776();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a65776();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl
index 2d0089b..4fb4691 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8snorm, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba8snorm, read_write>) -> u32
-fn textureDimensions_a7ae4c() {
+fn textureDimensions_a7ae4c() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a7ae4c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_a7ae4c();
+ prevent_dce = textureDimensions_a7ae4c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a7ae4c();
+ prevent_dce = textureDimensions_a7ae4c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a7ae4c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.dxc.hlsl
index 7f590d8..9908b1a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a7ae4c() {
+uint textureDimensions_a7ae4c() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a7ae4c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a7ae4c();
+ prevent_dce.Store(0u, asuint(textureDimensions_a7ae4c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a7ae4c();
+ prevent_dce.Store(0u, asuint(textureDimensions_a7ae4c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a7ae4c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.fxc.hlsl
index 7f590d8..9908b1a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_a7ae4c() {
+uint textureDimensions_a7ae4c() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_a7ae4c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_a7ae4c();
+ prevent_dce.Store(0u, asuint(textureDimensions_a7ae4c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_a7ae4c();
+ prevent_dce.Store(0u, asuint(textureDimensions_a7ae4c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_a7ae4c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.glsl
index eb4cd4e..59e3915 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_a7ae4c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_a7ae4c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uint textureDimensions_a7ae4c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_a7ae4c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_a7ae4c();
+ prevent_dce.inner = textureDimensions_a7ae4c();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uint textureDimensions_a7ae4c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_a7ae4c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_a7ae4c();
+ prevent_dce.inner = textureDimensions_a7ae4c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uint textureDimensions_a7ae4c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_a7ae4c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.msl
index ed8d1a5..72fe4cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_a7ae4c(texture1d<float, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_a7ae4c(texture1d<float, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_a7ae4c(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_a7ae4c(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_a7ae4c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_a7ae4c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_a7ae4c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_a7ae4c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.spvasm
index 5b8e97a..d8f96aa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_a7ae4c "textureDimensions_a7ae4c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_a7ae4c = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_a7ae4c = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_a7ae4c
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_a7ae4c
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_a7ae4c
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_a7ae4c
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_a7ae4c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_a7ae4c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.wgsl
index 8681511..cc643af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/a7ae4c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, read_write>;
-fn textureDimensions_a7ae4c() {
+fn textureDimensions_a7ae4c() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_a7ae4c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_a7ae4c();
+ prevent_dce = textureDimensions_a7ae4c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_a7ae4c();
+ prevent_dce = textureDimensions_a7ae4c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_a7ae4c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl
index e9d6b96..034b243 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32sint, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba32sint, write>) -> vec2<u32>
-fn textureDimensions_aa4353() {
+fn textureDimensions_aa4353() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_aa4353();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_aa4353();
+ prevent_dce = textureDimensions_aa4353();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_aa4353();
+ prevent_dce = textureDimensions_aa4353();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_aa4353();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.dxc.hlsl
index edc2683..5b38798 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_aa4353() {
+uint2 textureDimensions_aa4353() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_aa4353();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_aa4353();
+ prevent_dce.Store2(0u, asuint(textureDimensions_aa4353()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_aa4353();
+ prevent_dce.Store2(0u, asuint(textureDimensions_aa4353()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_aa4353();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.fxc.hlsl
index edc2683..5b38798 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_aa4353() {
+uint2 textureDimensions_aa4353() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_aa4353();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_aa4353();
+ prevent_dce.Store2(0u, asuint(textureDimensions_aa4353()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_aa4353();
+ prevent_dce.Store2(0u, asuint(textureDimensions_aa4353()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_aa4353();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.glsl
index c03e503..7ab6c18 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_aa4353() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_aa4353();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_aa4353() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_aa4353() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_aa4353();
+ prevent_dce.inner = textureDimensions_aa4353();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_aa4353() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_aa4353() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_aa4353();
+ prevent_dce.inner = textureDimensions_aa4353();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_aa4353() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_aa4353();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.msl
index 10c4286..9609718 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_aa4353(texture2d<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_aa4353(texture2d<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_aa4353(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_aa4353(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_aa4353(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_aa4353(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_aa4353(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_aa4353(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.spvasm
index 950004e..7a79b78 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_aa4353 "textureDimensions_aa4353"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_aa4353 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_aa4353 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_aa4353
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_aa4353
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_aa4353
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_aa4353
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_aa4353
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_aa4353
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.wgsl
index 3d4a4fc..c075a28 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aa4353.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, write>;
-fn textureDimensions_aa4353() {
+fn textureDimensions_aa4353() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_aa4353();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_aa4353();
+ prevent_dce = textureDimensions_aa4353();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_aa4353();
+ prevent_dce = textureDimensions_aa4353();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_aa4353();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl
index 2c7a205..999377c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_1d<f32>;
// fn textureDimensions(texture: texture_1d<f32>, level: u32) -> u32
-fn textureDimensions_aac604() {
+fn textureDimensions_aac604() -> u32{
var arg_1 = 1u;
var res: u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_aac604();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_aac604();
+ prevent_dce = textureDimensions_aac604();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_aac604();
+ prevent_dce = textureDimensions_aac604();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_aac604();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.dxc.hlsl
index 4cd137b..60d5dd1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_aac604() {
+uint textureDimensions_aac604() {
uint arg_1 = 1u;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_aac604();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_aac604();
+ prevent_dce.Store(0u, asuint(textureDimensions_aac604()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_aac604();
+ prevent_dce.Store(0u, asuint(textureDimensions_aac604()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_aac604();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.fxc.hlsl
index 4cd137b..60d5dd1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_aac604() {
+uint textureDimensions_aac604() {
uint arg_1 = 1u;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_aac604();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_aac604();
+ prevent_dce.Store(0u, asuint(textureDimensions_aac604()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_aac604();
+ prevent_dce.Store(0u, asuint(textureDimensions_aac604()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_aac604();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.glsl
index 1bd5a3a..f018dfe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_aac604() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_aac604();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uint textureDimensions_aac604() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_aac604() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_aac604();
+ prevent_dce.inner = textureDimensions_aac604();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uint textureDimensions_aac604() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_aac604() {
- uint arg_1 = 1u;
- uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_aac604();
+ prevent_dce.inner = textureDimensions_aac604();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uint textureDimensions_aac604() {
+ uint arg_1 = 1u;
+ uint res = uvec2(textureSize(arg_0_1, int(arg_1))).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_aac604();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.msl
index 5a169d0..2c6ee66 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_aac604(texture1d<float, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_aac604(texture1d<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_aac604(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_aac604(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_aac604(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_aac604(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_aac604(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_aac604(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.spvasm
index 246ec84..69ebdf5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,75 +22,101 @@
OpName %textureDimensions_aac604 "textureDimensions_aac604"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %23 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_aac604 = OpFunction %void None %16
- %19 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %23
- %res = OpVariable %_ptr_Function_uint Function %23
+%textureDimensions_aac604 = OpFunction %uint None %19
+ %21 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %9
+ %res = OpVariable %_ptr_Function_uint Function %9
OpStore %arg_1 %uint_1
- %25 = OpLoad %11 %arg_0
- %26 = OpLoad %uint %arg_1
- %24 = OpImageQuerySizeLod %uint %25 %26
- OpStore %res %24
- %30 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %31 = OpLoad %uint %res
- OpStore %30 %31
+ %26 = OpLoad %15 %arg_0
+ %27 = OpLoad %uint %arg_1
+ %25 = OpImageQuerySizeLod %uint %26 %27
+ OpStore %res %25
+ %29 = OpLoad %uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %uint %textureDimensions_aac604
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_aac604
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %uint %textureDimensions_aac604
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %51 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %52 = OpFunctionCall %uint %textureDimensions_aac604
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_aac604
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_aac604
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.wgsl
index a17627b..9b8456e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/aac604.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_1d<f32>;
-fn textureDimensions_aac604() {
+fn textureDimensions_aac604() -> u32 {
var arg_1 = 1u;
var res : u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_aac604();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_aac604();
+ prevent_dce = textureDimensions_aac604();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_aac604();
+ prevent_dce = textureDimensions_aac604();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_aac604();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl
index bcb80b7..29d5337 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8uint, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba8uint, write>) -> u32
-fn textureDimensions_ad7d3b() {
+fn textureDimensions_ad7d3b() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ad7d3b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_ad7d3b();
+ prevent_dce = textureDimensions_ad7d3b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ad7d3b();
+ prevent_dce = textureDimensions_ad7d3b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ad7d3b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.dxc.hlsl
index 392ca6b..45d54fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ad7d3b() {
+uint textureDimensions_ad7d3b() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ad7d3b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ad7d3b();
+ prevent_dce.Store(0u, asuint(textureDimensions_ad7d3b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ad7d3b();
+ prevent_dce.Store(0u, asuint(textureDimensions_ad7d3b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ad7d3b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.fxc.hlsl
index 392ca6b..45d54fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ad7d3b() {
+uint textureDimensions_ad7d3b() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ad7d3b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ad7d3b();
+ prevent_dce.Store(0u, asuint(textureDimensions_ad7d3b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ad7d3b();
+ prevent_dce.Store(0u, asuint(textureDimensions_ad7d3b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ad7d3b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.glsl
index 2935395..6efb560 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_ad7d3b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_ad7d3b();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_ad7d3b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_ad7d3b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_ad7d3b();
+ prevent_dce.inner = textureDimensions_ad7d3b();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_ad7d3b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_ad7d3b() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_ad7d3b();
+ prevent_dce.inner = textureDimensions_ad7d3b();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_ad7d3b() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_ad7d3b();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.msl
index 496ffa5..53612f6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_ad7d3b(texture1d<uint, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_ad7d3b(texture1d<uint, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_ad7d3b(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_ad7d3b(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_ad7d3b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_ad7d3b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_ad7d3b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_ad7d3b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.spvasm
index 971ee8a..622246f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_ad7d3b "textureDimensions_ad7d3b"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_ad7d3b = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_ad7d3b = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_ad7d3b
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_ad7d3b
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_ad7d3b
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_ad7d3b
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_ad7d3b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_ad7d3b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.wgsl
index 4e887c3..7bf9f0a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ad7d3b.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8uint, write>;
-fn textureDimensions_ad7d3b() {
+fn textureDimensions_ad7d3b() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ad7d3b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_ad7d3b();
+ prevent_dce = textureDimensions_ad7d3b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ad7d3b();
+ prevent_dce = textureDimensions_ad7d3b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ad7d3b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl
index 5ac048f..9382189 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32float, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rg32float, read_write>) -> vec3<u32>
-fn textureDimensions_ae4595() {
+fn textureDimensions_ae4595() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ae4595();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_ae4595();
+ prevent_dce = textureDimensions_ae4595();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ae4595();
+ prevent_dce = textureDimensions_ae4595();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ae4595();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.dxc.hlsl
index 711201a..ffa363f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ae4595() {
+uint3 textureDimensions_ae4595() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ae4595();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ae4595();
+ prevent_dce.Store3(0u, asuint(textureDimensions_ae4595()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ae4595();
+ prevent_dce.Store3(0u, asuint(textureDimensions_ae4595()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ae4595();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.fxc.hlsl
index 711201a..ffa363f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ae4595() {
+uint3 textureDimensions_ae4595() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ae4595();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ae4595();
+ prevent_dce.Store3(0u, asuint(textureDimensions_ae4595()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ae4595();
+ prevent_dce.Store3(0u, asuint(textureDimensions_ae4595()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ae4595();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.msl
index eeb3cce..9f76096 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_ae4595(texture3d<float, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_ae4595(texture3d<float, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_ae4595(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_ae4595(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_ae4595(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_ae4595(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_ae4595(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_ae4595(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.spvasm
index b708736..9b707a7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_ae4595 "textureDimensions_ae4595"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_ae4595 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_ae4595 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_ae4595
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_ae4595
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_ae4595
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_ae4595
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_ae4595
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_ae4595
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.wgsl
index 2ed99f0..19499a1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae4595.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32float, read_write>;
-fn textureDimensions_ae4595() {
+fn textureDimensions_ae4595() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ae4595();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_ae4595();
+ prevent_dce = textureDimensions_ae4595();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ae4595();
+ prevent_dce = textureDimensions_ae4595();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ae4595();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl
index afcaaff..7328074 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16uint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba16uint, read_write>) -> u32
-fn textureDimensions_ae75a7() {
+fn textureDimensions_ae75a7() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ae75a7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_ae75a7();
+ prevent_dce = textureDimensions_ae75a7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ae75a7();
+ prevent_dce = textureDimensions_ae75a7();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ae75a7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.dxc.hlsl
index 5012542..d63ae7e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ae75a7() {
+uint textureDimensions_ae75a7() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ae75a7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ae75a7();
+ prevent_dce.Store(0u, asuint(textureDimensions_ae75a7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ae75a7();
+ prevent_dce.Store(0u, asuint(textureDimensions_ae75a7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ae75a7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.fxc.hlsl
index 5012542..d63ae7e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ae75a7() {
+uint textureDimensions_ae75a7() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ae75a7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ae75a7();
+ prevent_dce.Store(0u, asuint(textureDimensions_ae75a7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ae75a7();
+ prevent_dce.Store(0u, asuint(textureDimensions_ae75a7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ae75a7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.glsl
index 33ffa2e..0dd2b10 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_ae75a7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_ae75a7();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_ae75a7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_ae75a7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_ae75a7();
+ prevent_dce.inner = textureDimensions_ae75a7();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_ae75a7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_ae75a7() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_ae75a7();
+ prevent_dce.inner = textureDimensions_ae75a7();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_ae75a7() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_ae75a7();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.msl
index 6952278..bb3fe7d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_ae75a7(texture1d<uint, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_ae75a7(texture1d<uint, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_ae75a7(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_ae75a7(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_ae75a7(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_ae75a7(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_ae75a7(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_ae75a7(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.spvasm
index f45a6ba..2fe304e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_ae75a7 "textureDimensions_ae75a7"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_ae75a7 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_ae75a7 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_ae75a7
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_ae75a7
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_ae75a7
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_ae75a7
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_ae75a7
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_ae75a7
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.wgsl
index cf27394..e3b4e71 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ae75a7.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16uint, read_write>;
-fn textureDimensions_ae75a7() {
+fn textureDimensions_ae75a7() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ae75a7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_ae75a7();
+ prevent_dce = textureDimensions_ae75a7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ae75a7();
+ prevent_dce = textureDimensions_ae75a7();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ae75a7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl
index ce6338c..7eae86e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32sint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32sint, write>) -> vec2<u32>
-fn textureDimensions_af46ab() {
+fn textureDimensions_af46ab() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_af46ab();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_af46ab();
+ prevent_dce = textureDimensions_af46ab();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_af46ab();
+ prevent_dce = textureDimensions_af46ab();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_af46ab();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.dxc.hlsl
index d2c7015..8a79cad 100644
--- a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_af46ab() {
+uint2 textureDimensions_af46ab() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_af46ab();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_af46ab();
+ prevent_dce.Store2(0u, asuint(textureDimensions_af46ab()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_af46ab();
+ prevent_dce.Store2(0u, asuint(textureDimensions_af46ab()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_af46ab();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.fxc.hlsl
index d2c7015..8a79cad 100644
--- a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_af46ab() {
+uint2 textureDimensions_af46ab() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_af46ab();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_af46ab();
+ prevent_dce.Store2(0u, asuint(textureDimensions_af46ab()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_af46ab();
+ prevent_dce.Store2(0u, asuint(textureDimensions_af46ab()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_af46ab();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.msl
index 98dd440..54b28a1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_af46ab(texture2d_array<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_af46ab(texture2d_array<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_af46ab(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_af46ab(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_af46ab(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_af46ab(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_af46ab(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_af46ab(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.spvasm
index 253712e..d88b6377 100644
--- a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,76 +21,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_af46ab "textureDimensions_af46ab"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_af46ab = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_af46ab = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_af46ab
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_af46ab
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_af46ab
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_af46ab
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_af46ab
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_af46ab
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.wgsl
index b01989a..fba624d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/af46ab.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, write>;
-fn textureDimensions_af46ab() {
+fn textureDimensions_af46ab() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_af46ab();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_af46ab();
+ prevent_dce = textureDimensions_af46ab();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_af46ab();
+ prevent_dce = textureDimensions_af46ab();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_af46ab();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl
index 90a8e61..6465c72 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba16sint, read_write>) -> vec2<u32>
-fn textureDimensions_b16352() {
+fn textureDimensions_b16352() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b16352();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b16352();
+ prevent_dce = textureDimensions_b16352();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b16352();
+ prevent_dce = textureDimensions_b16352();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b16352();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.dxc.hlsl
index e3850fc..30d3948 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b16352() {
+uint2 textureDimensions_b16352() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b16352();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b16352();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b16352()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b16352();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b16352()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b16352();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.fxc.hlsl
index e3850fc..30d3948 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b16352() {
+uint2 textureDimensions_b16352() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b16352();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b16352();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b16352()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b16352();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b16352()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b16352();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.glsl
index 70c71a4..21a6161 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_b16352() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b16352();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_b16352() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b16352() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_b16352();
+ prevent_dce.inner = textureDimensions_b16352();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_b16352() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b16352() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_b16352();
+ prevent_dce.inner = textureDimensions_b16352();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_b16352() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b16352();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.msl
index 3835ab0..d65c464 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b16352(texture2d<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_b16352(texture2d<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b16352(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b16352(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_b16352(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b16352(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b16352(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b16352(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.spvasm
index 9cab36f..e1e1ce7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b16352 "textureDimensions_b16352"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b16352 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_b16352 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_b16352
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_b16352
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_b16352
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_b16352
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_b16352
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_b16352
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.wgsl
index 3db99da..ae60012 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b16352.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16sint, read_write>;
-fn textureDimensions_b16352() {
+fn textureDimensions_b16352() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b16352();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b16352();
+ prevent_dce = textureDimensions_b16352();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b16352();
+ prevent_dce = textureDimensions_b16352();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b16352();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl
index b3a4d64..8158689 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba8sint, read_write>) -> vec2<u32>
-fn textureDimensions_b284b8() {
+fn textureDimensions_b284b8() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b284b8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b284b8();
+ prevent_dce = textureDimensions_b284b8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b284b8();
+ prevent_dce = textureDimensions_b284b8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b284b8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.dxc.hlsl
index de726e2..f5f119b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b284b8() {
+uint2 textureDimensions_b284b8() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b284b8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b284b8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b284b8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b284b8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b284b8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b284b8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.fxc.hlsl
index de726e2..f5f119b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b284b8() {
+uint2 textureDimensions_b284b8() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b284b8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b284b8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b284b8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b284b8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b284b8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b284b8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.glsl
index ac03184..a50f60c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_b284b8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b284b8();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_b284b8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b284b8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_b284b8();
+ prevent_dce.inner = textureDimensions_b284b8();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_b284b8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b284b8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_b284b8();
+ prevent_dce.inner = textureDimensions_b284b8();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_b284b8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b284b8();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.msl
index a04c751..3463d19 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b284b8(texture2d<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_b284b8(texture2d<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b284b8(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b284b8(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_b284b8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b284b8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b284b8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b284b8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.spvasm
index 3b3ae51..1ff9f0c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b284b8 "textureDimensions_b284b8"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b284b8 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_b284b8 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_b284b8
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_b284b8
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_b284b8
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_b284b8
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_b284b8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_b284b8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.wgsl
index 82895bf..03e360d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b284b8.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8sint, read_write>;
-fn textureDimensions_b284b8() {
+fn textureDimensions_b284b8() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b284b8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b284b8();
+ prevent_dce = textureDimensions_b284b8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b284b8();
+ prevent_dce = textureDimensions_b284b8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b284b8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl
index 1f47c9e..6278bb1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
// fn textureDimensions(texture: texture_cube_array<f32>, level: i32) -> vec2<u32>
-fn textureDimensions_b3ab5e() {
+fn textureDimensions_b3ab5e() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b3ab5e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b3ab5e();
+ prevent_dce = textureDimensions_b3ab5e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b3ab5e();
+ prevent_dce = textureDimensions_b3ab5e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b3ab5e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.dxc.hlsl
index f23f00f..c056a7d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b3ab5e() {
+uint2 textureDimensions_b3ab5e() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b3ab5e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b3ab5e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b3ab5e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b3ab5e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b3ab5e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b3ab5e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.fxc.hlsl
index f23f00f..c056a7d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b3ab5e() {
+uint2 textureDimensions_b3ab5e() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b3ab5e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b3ab5e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b3ab5e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b3ab5e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b3ab5e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b3ab5e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.msl
index 20a6b96..e798c05 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b3ab5e(texturecube_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_b3ab5e(texturecube_array<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b3ab5e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b3ab5e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_b3ab5e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b3ab5e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b3ab5e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b3ab5e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.spvasm
index ca3f4c5..77a21f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 67
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,81 +22,108 @@
OpName %textureDimensions_b3ab5e "textureDimensions_b3ab5e"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b3ab5e = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_b3ab5e = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %int %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %int %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_b3ab5e
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_b3ab5e
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_b3ab5e
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %58 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %59 = OpFunctionCall %v2uint %textureDimensions_b3ab5e
+ OpStore %58 %59
+ %60 = OpLoad %VertexOutput %out
+ OpReturnValue %60
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %62 = OpLabel
+ %63 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %64 = OpCompositeExtract %v4float %63 0
+ OpStore %pos_1 %64
+ %65 = OpCompositeExtract %v2uint %63 1
+ OpStore %prevent_dce_1 %65
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_b3ab5e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_b3ab5e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.wgsl
index ed0e9c3..a9539ef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b3ab5e.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
-fn textureDimensions_b3ab5e() {
+fn textureDimensions_b3ab5e() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b3ab5e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b3ab5e();
+ prevent_dce = textureDimensions_b3ab5e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b3ab5e();
+ prevent_dce = textureDimensions_b3ab5e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b3ab5e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl
index c5c11d3..6e15d1c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_1d<i32>;
// fn textureDimensions(texture: texture_1d<i32>, level: i32) -> u32
-fn textureDimensions_b46d97() {
+fn textureDimensions_b46d97() -> u32{
var arg_1 = 1i;
var res: u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b46d97();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_b46d97();
+ prevent_dce = textureDimensions_b46d97();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b46d97();
+ prevent_dce = textureDimensions_b46d97();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b46d97();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.dxc.hlsl
index 4add3de..93faa77 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b46d97() {
+uint textureDimensions_b46d97() {
int arg_1 = 1;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b46d97();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b46d97();
+ prevent_dce.Store(0u, asuint(textureDimensions_b46d97()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b46d97();
+ prevent_dce.Store(0u, asuint(textureDimensions_b46d97()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b46d97();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.fxc.hlsl
index 4add3de..93faa77 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b46d97() {
+uint textureDimensions_b46d97() {
int arg_1 = 1;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b46d97();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b46d97();
+ prevent_dce.Store(0u, asuint(textureDimensions_b46d97()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b46d97();
+ prevent_dce.Store(0u, asuint(textureDimensions_b46d97()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b46d97();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.glsl
index 02a72ac..6c599f8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_b46d97() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b46d97();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2D arg_0_1;
+uint textureDimensions_b46d97() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_b46d97() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_b46d97();
+ prevent_dce.inner = textureDimensions_b46d97();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isampler2D arg_0_1;
+uint textureDimensions_b46d97() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_b46d97() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_b46d97();
+ prevent_dce.inner = textureDimensions_b46d97();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp isampler2D arg_0_1;
+uint textureDimensions_b46d97() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b46d97();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.msl
index e15df18..918ad9c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b46d97(texture1d<int, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_b46d97(texture1d<int, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b46d97(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b46d97(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_b46d97(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b46d97(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b46d97(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b46d97(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.spvasm
index 87415e5..d726b80 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 64
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,78 +22,105 @@
OpName %textureDimensions_b46d97 "textureDimensions_b46d97"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %24 = OpConstantNull %int
+ %26 = OpConstantNull %int
%_ptr_Function_uint = OpTypePointer Function %uint
- %30 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b46d97 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %24
- %res = OpVariable %_ptr_Function_uint Function %30
+%textureDimensions_b46d97 = OpFunction %uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %26
+ %res = OpVariable %_ptr_Function_uint Function %9
OpStore %arg_1 %int_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %int %arg_1
- %25 = OpImageQuerySizeLod %uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %34 = OpLoad %uint %res
- OpStore %33 %34
+ %28 = OpLoad %15 %arg_0
+ %29 = OpLoad %int %arg_1
+ %27 = OpImageQuerySizeLod %uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %uint %textureDimensions_b46d97
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_b46d97
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %uint %textureDimensions_b46d97
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %55 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %56 = OpFunctionCall %uint %textureDimensions_b46d97
+ OpStore %55 %56
+ %57 = OpLoad %VertexOutput %out
+ OpReturnValue %57
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %59 = OpLabel
+ %60 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %61 = OpCompositeExtract %v4float %60 0
+ OpStore %pos_1 %61
+ %62 = OpCompositeExtract %uint %60 1
+ OpStore %prevent_dce_1 %62
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_b46d97
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_b46d97
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.wgsl
index b623537..0c06896 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b46d97.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_1d<i32>;
-fn textureDimensions_b46d97() {
+fn textureDimensions_b46d97() -> u32 {
var arg_1 = 1i;
var res : u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b46d97();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_b46d97();
+ prevent_dce = textureDimensions_b46d97();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b46d97();
+ prevent_dce = textureDimensions_b46d97();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b46d97();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl
index 7116a32..d1a2b98 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32float, write>;
// fn textureDimensions(texture: texture_storage_1d<rg32float, write>) -> u32
-fn textureDimensions_b51345() {
+fn textureDimensions_b51345() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b51345();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_b51345();
+ prevent_dce = textureDimensions_b51345();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b51345();
+ prevent_dce = textureDimensions_b51345();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b51345();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.dxc.hlsl
index 1c06d8b..4f888a6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b51345() {
+uint textureDimensions_b51345() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b51345();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b51345();
+ prevent_dce.Store(0u, asuint(textureDimensions_b51345()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b51345();
+ prevent_dce.Store(0u, asuint(textureDimensions_b51345()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b51345();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.fxc.hlsl
index 1c06d8b..4f888a6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b51345() {
+uint textureDimensions_b51345() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b51345();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b51345();
+ prevent_dce.Store(0u, asuint(textureDimensions_b51345()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b51345();
+ prevent_dce.Store(0u, asuint(textureDimensions_b51345()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b51345();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.msl
index 2fe576c..9daecb1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b51345(texture1d<float, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_b51345(texture1d<float, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b51345(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b51345(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_b51345(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b51345(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b51345(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b51345(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.spvasm
index 8776968..e4e48d4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,72 +22,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b51345 "textureDimensions_b51345"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b51345 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_b51345 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_b51345
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_b51345
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_b51345
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_b51345
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_b51345
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_b51345
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.wgsl
index 7eab351..a735f3d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b51345.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, write>;
-fn textureDimensions_b51345() {
+fn textureDimensions_b51345() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b51345();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_b51345();
+ prevent_dce = textureDimensions_b51345();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b51345();
+ prevent_dce = textureDimensions_b51345();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b51345();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl
index bbcddfb..16ab593 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32uint, read>;
// fn textureDimensions(texture: texture_storage_2d<r32uint, read>) -> vec2<u32>
-fn textureDimensions_b56112() {
+fn textureDimensions_b56112() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b56112();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b56112();
+ prevent_dce = textureDimensions_b56112();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b56112();
+ prevent_dce = textureDimensions_b56112();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b56112();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.dxc.hlsl
index 85cfaff..a5209b9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b56112() {
+uint2 textureDimensions_b56112() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b56112();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b56112();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b56112()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b56112();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b56112()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b56112();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.fxc.hlsl
index 85cfaff..a5209b9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b56112() {
+uint2 textureDimensions_b56112() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b56112();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b56112();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b56112()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b56112();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b56112()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b56112();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.glsl
index bd93954..f7e084d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp readonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_b56112() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b56112();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_b56112() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b56112() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_b56112();
+ prevent_dce.inner = textureDimensions_b56112();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_b56112() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b56112() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_b56112();
+ prevent_dce.inner = textureDimensions_b56112();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_b56112() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b56112();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.msl
index 067fa80..be75edc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b56112(texture2d<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_b56112(texture2d<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b56112(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b56112(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_b56112(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b56112(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b56112(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b56112(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.spvasm
index 293c96a..af31023 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b56112 "textureDimensions_b56112"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b56112 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_b56112 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_b56112
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_b56112
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_b56112
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_b56112
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_b56112
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_b56112
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.wgsl
index 8e3e9a3..8f8ec3d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b56112.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read>;
-fn textureDimensions_b56112() {
+fn textureDimensions_b56112() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b56112();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b56112();
+ prevent_dce = textureDimensions_b56112();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b56112();
+ prevent_dce = textureDimensions_b56112();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b56112();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl
index 7d65af6..b70f0bc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16float, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba16float, read>) -> u32
-fn textureDimensions_b5ba03() {
+fn textureDimensions_b5ba03() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b5ba03();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_b5ba03();
+ prevent_dce = textureDimensions_b5ba03();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b5ba03();
+ prevent_dce = textureDimensions_b5ba03();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b5ba03();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.dxc.hlsl
index faf4823..55f85a3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b5ba03() {
+uint textureDimensions_b5ba03() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b5ba03();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b5ba03();
+ prevent_dce.Store(0u, asuint(textureDimensions_b5ba03()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b5ba03();
+ prevent_dce.Store(0u, asuint(textureDimensions_b5ba03()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b5ba03();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.fxc.hlsl
index faf4823..55f85a3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b5ba03() {
+uint textureDimensions_b5ba03() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b5ba03();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b5ba03();
+ prevent_dce.Store(0u, asuint(textureDimensions_b5ba03()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b5ba03();
+ prevent_dce.Store(0u, asuint(textureDimensions_b5ba03()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b5ba03();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.glsl
index c7f42ba..c6959a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_b5ba03() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b5ba03();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp readonly image2D arg_0;
+uint textureDimensions_b5ba03() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_b5ba03() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_b5ba03();
+ prevent_dce.inner = textureDimensions_b5ba03();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp readonly image2D arg_0;
+uint textureDimensions_b5ba03() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_b5ba03() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_b5ba03();
+ prevent_dce.inner = textureDimensions_b5ba03();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16f) uniform highp readonly image2D arg_0;
+uint textureDimensions_b5ba03() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b5ba03();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.msl
index 392cd4c..b907d22 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b5ba03(texture1d<float, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_b5ba03(texture1d<float, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b5ba03(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b5ba03(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_b5ba03(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b5ba03(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b5ba03(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b5ba03(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.spvasm
index 2a37dd6..6ba9b16 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b5ba03 "textureDimensions_b5ba03"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b5ba03 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_b5ba03 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_b5ba03
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_b5ba03
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_b5ba03
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_b5ba03
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_b5ba03
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_b5ba03
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.wgsl
index f96913d..212f1fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5ba03.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16float, read>;
-fn textureDimensions_b5ba03() {
+fn textureDimensions_b5ba03() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b5ba03();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_b5ba03();
+ prevent_dce = textureDimensions_b5ba03();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b5ba03();
+ prevent_dce = textureDimensions_b5ba03();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b5ba03();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl
index 4f0f528..018a921 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32sint, read_write>) -> vec2<u32>
-fn textureDimensions_b5d68e() {
+fn textureDimensions_b5d68e() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b5d68e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b5d68e();
+ prevent_dce = textureDimensions_b5d68e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b5d68e();
+ prevent_dce = textureDimensions_b5d68e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b5d68e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.dxc.hlsl
index ba37cdb..90a390f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b5d68e() {
+uint2 textureDimensions_b5d68e() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b5d68e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b5d68e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b5d68e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b5d68e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b5d68e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b5d68e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.fxc.hlsl
index ba37cdb..90a390f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b5d68e() {
+uint2 textureDimensions_b5d68e() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b5d68e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b5d68e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b5d68e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b5d68e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b5d68e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b5d68e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.glsl
index fb36057..d13e7b5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp writeonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_b5d68e() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b5d68e();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_b5d68e() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b5d68e() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_b5d68e();
+ prevent_dce.inner = textureDimensions_b5d68e();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_b5d68e() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b5d68e() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_b5d68e();
+ prevent_dce.inner = textureDimensions_b5d68e();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_b5d68e() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b5d68e();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.msl
index d422966..0c1c456 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b5d68e(texture2d_array<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_b5d68e(texture2d_array<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b5d68e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b5d68e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_b5d68e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b5d68e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b5d68e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b5d68e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.spvasm
index d3a8712..1f5aa8a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b5d68e "textureDimensions_b5d68e"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b5d68e = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_b5d68e = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_b5d68e
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_b5d68e
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_b5d68e
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_b5d68e
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_b5d68e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_b5d68e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.wgsl
index f696948..ca10716 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b5d68e.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read_write>;
-fn textureDimensions_b5d68e() {
+fn textureDimensions_b5d68e() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b5d68e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b5d68e();
+ prevent_dce = textureDimensions_b5d68e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b5d68e();
+ prevent_dce = textureDimensions_b5d68e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b5d68e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl
index 3878ea8..720bc99 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16uint, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba16uint, read>) -> vec3<u32>
-fn textureDimensions_b6bbf4() {
+fn textureDimensions_b6bbf4() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b6bbf4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b6bbf4();
+ prevent_dce = textureDimensions_b6bbf4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b6bbf4();
+ prevent_dce = textureDimensions_b6bbf4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b6bbf4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.dxc.hlsl
index 868598f..4864daf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b6bbf4() {
+uint3 textureDimensions_b6bbf4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b6bbf4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b6bbf4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_b6bbf4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b6bbf4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_b6bbf4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b6bbf4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.fxc.hlsl
index 868598f..4864daf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b6bbf4() {
+uint3 textureDimensions_b6bbf4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b6bbf4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b6bbf4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_b6bbf4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b6bbf4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_b6bbf4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b6bbf4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.glsl
index 5dd68da..2ccf33a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16ui) uniform highp readonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_b6bbf4() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b6bbf4();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_b6bbf4() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_b6bbf4() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_b6bbf4();
+ prevent_dce.inner = textureDimensions_b6bbf4();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_b6bbf4() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_b6bbf4() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_b6bbf4();
+ prevent_dce.inner = textureDimensions_b6bbf4();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16ui) uniform highp readonly uimage3D arg_0;
+uvec3 textureDimensions_b6bbf4() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b6bbf4();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.msl
index 6657c2e..a63eaa5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b6bbf4(texture3d<uint, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_b6bbf4(texture3d<uint, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_b6bbf4(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_b6bbf4(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_b6bbf4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b6bbf4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b6bbf4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b6bbf4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.spvasm
index f935538..402ab99 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b6bbf4 "textureDimensions_b6bbf4"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b6bbf4 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_b6bbf4 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_b6bbf4
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_b6bbf4
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_b6bbf4
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_b6bbf4
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_b6bbf4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_b6bbf4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.wgsl
index 5c03612..1dedd3f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b6bbf4.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16uint, read>;
-fn textureDimensions_b6bbf4() {
+fn textureDimensions_b6bbf4() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b6bbf4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b6bbf4();
+ prevent_dce = textureDimensions_b6bbf4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b6bbf4();
+ prevent_dce = textureDimensions_b6bbf4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b6bbf4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl
index bfa33eb..22fb142 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<r32uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<r32uint, read_write>) -> vec2<u32>
-fn textureDimensions_b8287f() {
+fn textureDimensions_b8287f() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b8287f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b8287f();
+ prevent_dce = textureDimensions_b8287f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b8287f();
+ prevent_dce = textureDimensions_b8287f();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b8287f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.dxc.hlsl
index 31926ef..7ed1371 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b8287f() {
+uint2 textureDimensions_b8287f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b8287f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b8287f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b8287f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b8287f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b8287f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b8287f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.fxc.hlsl
index 31926ef..7ed1371 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b8287f() {
+uint2 textureDimensions_b8287f() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b8287f();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b8287f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b8287f()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b8287f();
+ prevent_dce.Store2(0u, asuint(textureDimensions_b8287f()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b8287f();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.glsl
index 29623d6..ddbf20e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_b8287f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b8287f();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp uimage2DArray arg_0;
+uvec2 textureDimensions_b8287f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b8287f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_b8287f();
+ prevent_dce.inner = textureDimensions_b8287f();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp uimage2DArray arg_0;
+uvec2 textureDimensions_b8287f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_b8287f() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_b8287f();
+ prevent_dce.inner = textureDimensions_b8287f();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32ui) uniform highp uimage2DArray arg_0;
+uvec2 textureDimensions_b8287f() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b8287f();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.msl
index 7cfb66e..63546f5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b8287f(texture2d_array<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_b8287f(texture2d_array<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b8287f(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b8287f(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_b8287f(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b8287f(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b8287f(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b8287f(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.spvasm
index c4921d3..58aa65f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b8287f "textureDimensions_b8287f"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b8287f = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_b8287f = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_b8287f
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_b8287f
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_b8287f
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_b8287f
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_b8287f
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_b8287f
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.wgsl
index b2131d9..984907c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b8287f.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<r32uint, read_write>;
-fn textureDimensions_b8287f() {
+fn textureDimensions_b8287f() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b8287f();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_b8287f();
+ prevent_dce = textureDimensions_b8287f();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b8287f();
+ prevent_dce = textureDimensions_b8287f();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b8287f();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl
index 3109ba8..5ea02b2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32sint, read>;
// fn textureDimensions(texture: texture_storage_1d<rgba32sint, read>) -> u32
-fn textureDimensions_b9e7ef() {
+fn textureDimensions_b9e7ef() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b9e7ef();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_b9e7ef();
+ prevent_dce = textureDimensions_b9e7ef();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b9e7ef();
+ prevent_dce = textureDimensions_b9e7ef();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b9e7ef();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.dxc.hlsl
index 4389a3f..1637a11 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b9e7ef() {
+uint textureDimensions_b9e7ef() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b9e7ef();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b9e7ef();
+ prevent_dce.Store(0u, asuint(textureDimensions_b9e7ef()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b9e7ef();
+ prevent_dce.Store(0u, asuint(textureDimensions_b9e7ef()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b9e7ef();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.fxc.hlsl
index 4389a3f..1637a11 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_b9e7ef() {
+uint textureDimensions_b9e7ef() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_b9e7ef();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_b9e7ef();
+ prevent_dce.Store(0u, asuint(textureDimensions_b9e7ef()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_b9e7ef();
+ prevent_dce.Store(0u, asuint(textureDimensions_b9e7ef()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_b9e7ef();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.glsl
index 75b4efd..e7c3ada 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp readonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_b9e7ef() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_b9e7ef();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_b9e7ef() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_b9e7ef() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_b9e7ef();
+ prevent_dce.inner = textureDimensions_b9e7ef();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_b9e7ef() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_b9e7ef() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_b9e7ef();
+ prevent_dce.inner = textureDimensions_b9e7ef();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32i) uniform highp readonly iimage2D arg_0;
+uint textureDimensions_b9e7ef() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_b9e7ef();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.msl
index 8cce255..67abca3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_b9e7ef(texture1d<int, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_b9e7ef(texture1d<int, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_b9e7ef(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_b9e7ef(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_b9e7ef(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_b9e7ef(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_b9e7ef(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_b9e7ef(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.spvasm
index 993d90cc..824f653 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_b9e7ef "textureDimensions_b9e7ef"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_b9e7ef = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_b9e7ef = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_b9e7ef
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_b9e7ef
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_b9e7ef
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_b9e7ef
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_b9e7ef
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_b9e7ef
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.wgsl
index a734a13..ddaa760 100644
--- a/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/b9e7ef.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32sint, read>;
-fn textureDimensions_b9e7ef() {
+fn textureDimensions_b9e7ef() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_b9e7ef();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_b9e7ef();
+ prevent_dce = textureDimensions_b9e7ef();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_b9e7ef();
+ prevent_dce = textureDimensions_b9e7ef();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_b9e7ef();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl
index 9e96006..2ee7392 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_3d<f32>;
// fn textureDimensions(texture: texture_3d<f32>) -> vec3<u32>
-fn textureDimensions_bb95d9() {
+fn textureDimensions_bb95d9() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bb95d9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bb95d9();
+ prevent_dce = textureDimensions_bb95d9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bb95d9();
+ prevent_dce = textureDimensions_bb95d9();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bb95d9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.dxc.hlsl
index 1e1408e..8fdb963 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bb95d9() {
+uint3 textureDimensions_bb95d9() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bb95d9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bb95d9();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bb95d9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bb95d9();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bb95d9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bb95d9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.fxc.hlsl
index 1e1408e..8fdb963 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bb95d9() {
+uint3 textureDimensions_bb95d9() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bb95d9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bb95d9();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bb95d9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bb95d9();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bb95d9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bb95d9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.glsl
index 56eb05f..54d4730 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_bb95d9() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_bb95d9();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_bb95d9() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_bb95d9() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_bb95d9();
+ prevent_dce.inner = textureDimensions_bb95d9();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_bb95d9() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_bb95d9() {
- uvec3 res = uvec3(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_bb95d9();
+ prevent_dce.inner = textureDimensions_bb95d9();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp sampler3D arg_0_1;
+uvec3 textureDimensions_bb95d9() {
+ uvec3 res = uvec3(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_bb95d9();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.msl
index a39c356..8114480 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_bb95d9(texture3d<float, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_bb95d9(texture3d<float, access::sample> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_bb95d9(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_bb95d9(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_bb95d9(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_bb95d9(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_bb95d9(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_bb95d9(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.spvasm
index 2f322c4..385cdcd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_bb95d9 "textureDimensions_bb95d9"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %27 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_bb95d9 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %27
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %v3uint %22 %int_0
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %31 = OpLoad %v3uint %res
- OpStore %30 %31
+%textureDimensions_bb95d9 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySizeLod %v3uint %24 %int_0
+ OpStore %res %23
+ %29 = OpLoad %v3uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v3uint %textureDimensions_bb95d9
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_bb95d9
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v3uint %textureDimensions_bb95d9
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %53 = OpFunctionCall %v3uint %textureDimensions_bb95d9
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v3uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_bb95d9
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_bb95d9
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.wgsl
index 24f70f1..e685c44 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bb95d9.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_3d<f32>;
-fn textureDimensions_bb95d9() {
+fn textureDimensions_bb95d9() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bb95d9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bb95d9();
+ prevent_dce = textureDimensions_bb95d9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bb95d9();
+ prevent_dce = textureDimensions_bb95d9();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bb95d9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl
index 8c83042..4febcfa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8sint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8sint, write>) -> vec2<u32>
-fn textureDimensions_bbe285() {
+fn textureDimensions_bbe285() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bbe285();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bbe285();
+ prevent_dce = textureDimensions_bbe285();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bbe285();
+ prevent_dce = textureDimensions_bbe285();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bbe285();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.dxc.hlsl
index 6c878d7..e982eb5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bbe285() {
+uint2 textureDimensions_bbe285() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bbe285();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bbe285();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bbe285()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bbe285();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bbe285()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bbe285();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.fxc.hlsl
index 6c878d7..e982eb5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bbe285() {
+uint2 textureDimensions_bbe285() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bbe285();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bbe285();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bbe285()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bbe285();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bbe285()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bbe285();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.glsl
index 5aef035..923608d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp writeonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_bbe285() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_bbe285();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_bbe285() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_bbe285() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_bbe285();
+ prevent_dce.inner = textureDimensions_bbe285();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_bbe285() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_bbe285() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_bbe285();
+ prevent_dce.inner = textureDimensions_bbe285();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_bbe285() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_bbe285();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.msl
index 28efec6..e3ff6af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_bbe285(texture2d_array<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_bbe285(texture2d_array<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_bbe285(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_bbe285(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_bbe285(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_bbe285(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_bbe285(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_bbe285(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.spvasm
index 104e650..7ae7c4a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_bbe285 "textureDimensions_bbe285"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_bbe285 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_bbe285 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_bbe285
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_bbe285
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_bbe285
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_bbe285
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_bbe285
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_bbe285
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.wgsl
index e36a21b..7a91c6a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bbe285.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, write>;
-fn textureDimensions_bbe285() {
+fn textureDimensions_bbe285() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bbe285();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bbe285();
+ prevent_dce = textureDimensions_bbe285();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bbe285();
+ prevent_dce = textureDimensions_bbe285();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bbe285();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl
index a05d5cb..53de9dc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32float, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32float, read_write>) -> vec2<u32>
-fn textureDimensions_bc96f6() {
+fn textureDimensions_bc96f6() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bc96f6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bc96f6();
+ prevent_dce = textureDimensions_bc96f6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bc96f6();
+ prevent_dce = textureDimensions_bc96f6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bc96f6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.dxc.hlsl
index b53f8cb..6fba9b1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bc96f6() {
+uint2 textureDimensions_bc96f6() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bc96f6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bc96f6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bc96f6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bc96f6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bc96f6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bc96f6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.fxc.hlsl
index b53f8cb..6fba9b1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bc96f6() {
+uint2 textureDimensions_bc96f6() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bc96f6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bc96f6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bc96f6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bc96f6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bc96f6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bc96f6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.glsl
index 6f6533b..f489171 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_bc96f6() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_bc96f6();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_bc96f6() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_bc96f6() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_bc96f6();
+ prevent_dce.inner = textureDimensions_bc96f6();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_bc96f6() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_bc96f6() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_bc96f6();
+ prevent_dce.inner = textureDimensions_bc96f6();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_bc96f6() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_bc96f6();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.msl
index 4f7f09a..cfc550c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_bc96f6(texture2d_array<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_bc96f6(texture2d_array<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_bc96f6(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_bc96f6(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_bc96f6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_bc96f6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_bc96f6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_bc96f6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.spvasm
index 4a831ab..be7339f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_bc96f6 "textureDimensions_bc96f6"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_bc96f6 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_bc96f6 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_bc96f6
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_bc96f6
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_bc96f6
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_bc96f6
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_bc96f6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_bc96f6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.wgsl
index ae4b880..fa6f32f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bc96f6.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read_write>;
-fn textureDimensions_bc96f6() {
+fn textureDimensions_bc96f6() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bc96f6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bc96f6();
+ prevent_dce = textureDimensions_bc96f6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bc96f6();
+ prevent_dce = textureDimensions_bc96f6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bc96f6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl
index b7f6cc2..9fcf659 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_depth_cube_array;
// fn textureDimensions(texture: texture_depth_cube_array, level: u32) -> vec2<u32>
-fn textureDimensions_bd94c8() {
+fn textureDimensions_bd94c8() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bd94c8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bd94c8();
+ prevent_dce = textureDimensions_bd94c8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bd94c8();
+ prevent_dce = textureDimensions_bd94c8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bd94c8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.dxc.hlsl
index e280cb8..97f6eaa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bd94c8() {
+uint2 textureDimensions_bd94c8() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bd94c8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bd94c8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bd94c8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bd94c8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bd94c8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bd94c8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.fxc.hlsl
index e280cb8..97f6eaa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bd94c8() {
+uint2 textureDimensions_bd94c8() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bd94c8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bd94c8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bd94c8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bd94c8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_bd94c8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bd94c8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.msl
index 23f52ba..ebdc7a5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_bd94c8(depthcube_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_bd94c8(depthcube_array<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depthcube_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_bd94c8(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depthcube_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_bd94c8(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depthcube_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_bd94c8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depthcube_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_bd94c8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depthcube_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depthcube_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depthcube_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_bd94c8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depthcube_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_bd94c8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.spvasm
index 14baf0e..58005d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 51
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,80 +22,106 @@
OpName %textureDimensions_bd94c8 "textureDimensions_bd94c8"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %32 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %35 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %37 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %47 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %53 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_bd94c8 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %32
+%textureDimensions_bd94c8 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %28 = OpLoad %11 %arg_0
- %29 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v3uint %28 %29
- %25 = OpVectorShuffle %v2uint %26 %26 0 1
- OpStore %res %25
- %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %36 = OpLoad %v2uint %res
- OpStore %35 %36
+ %30 = OpLoad %16 %arg_0
+ %31 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %30 %31
+ %27 = OpVectorShuffle %v2uint %28 %28 0 1
+ OpStore %res %27
+ %34 = OpLoad %v2uint %res
+ OpReturnValue %34
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %35
+ %38 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_bd94c8
+ OpStore %41 %42
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %37
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_bd94c8
- OpReturnValue %5
+%compute_main = OpFunction %void None %35
+ %44 = OpLabel
+ %45 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %46 = OpFunctionCall %v2uint %textureDimensions_bd94c8
+ OpStore %45 %46
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %43
+%vertex_main_inner = OpFunction %VertexOutput None %47
+ %50 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %53
+ %55 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %55 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_bd94c8
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %35
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_bd94c8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %49 = OpLabel
- %50 = OpFunctionCall %void %textureDimensions_bd94c8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.wgsl
index 3a14b19..2f17808 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bd94c8.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_depth_cube_array;
-fn textureDimensions_bd94c8() {
+fn textureDimensions_bd94c8() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bd94c8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bd94c8();
+ prevent_dce = textureDimensions_bd94c8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bd94c8();
+ prevent_dce = textureDimensions_bd94c8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bd94c8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl
index a9db6c9..df2f060 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32float, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba32float, read>) -> vec3<u32>
-fn textureDimensions_bec716() {
+fn textureDimensions_bec716() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bec716();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bec716();
+ prevent_dce = textureDimensions_bec716();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bec716();
+ prevent_dce = textureDimensions_bec716();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bec716();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.dxc.hlsl
index cf7d9fd6..8a55bbc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bec716() {
+uint3 textureDimensions_bec716() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bec716();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bec716();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bec716()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bec716();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bec716()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bec716();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.fxc.hlsl
index cf7d9fd6..8a55bbc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bec716() {
+uint3 textureDimensions_bec716() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bec716();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bec716();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bec716()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bec716();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bec716()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bec716();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.glsl
index 7114686..ae15a5a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32f) uniform highp readonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_bec716() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_bec716();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_bec716() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_bec716() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_bec716();
+ prevent_dce.inner = textureDimensions_bec716();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_bec716() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_bec716() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_bec716();
+ prevent_dce.inner = textureDimensions_bec716();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32f) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_bec716() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_bec716();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.msl
index 72b86e6..55e3c19 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_bec716(texture3d<float, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_bec716(texture3d<float, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_bec716(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_bec716(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_bec716(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_bec716(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_bec716(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_bec716(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.spvasm
index 2cb96d6..751a9f1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_bec716 "textureDimensions_bec716"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_bec716 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_bec716 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_bec716
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_bec716
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_bec716
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_bec716
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_bec716
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_bec716
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.wgsl
index 3394d9f..e4876b6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bec716.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read>;
-fn textureDimensions_bec716() {
+fn textureDimensions_bec716() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bec716();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bec716();
+ prevent_dce = textureDimensions_bec716();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bec716();
+ prevent_dce = textureDimensions_bec716();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bec716();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl
index 9fb8889..326d50d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8snorm, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba8snorm, read>) -> vec3<u32>
-fn textureDimensions_bf9170() {
+fn textureDimensions_bf9170() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bf9170();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bf9170();
+ prevent_dce = textureDimensions_bf9170();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bf9170();
+ prevent_dce = textureDimensions_bf9170();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bf9170();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.dxc.hlsl
index b713de1..70a9f94 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bf9170() {
+uint3 textureDimensions_bf9170() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bf9170();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bf9170();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bf9170()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bf9170();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bf9170()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bf9170();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.fxc.hlsl
index b713de1..70a9f94 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_bf9170() {
+uint3 textureDimensions_bf9170() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_bf9170();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_bf9170();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bf9170()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_bf9170();
+ prevent_dce.Store3(0u, asuint(textureDimensions_bf9170()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_bf9170();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.glsl
index f3e198f..b71400b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp readonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_bf9170() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_bf9170();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_bf9170() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_bf9170() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_bf9170();
+ prevent_dce.inner = textureDimensions_bf9170();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8_snorm) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_bf9170() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_bf9170() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_bf9170();
+ prevent_dce.inner = textureDimensions_bf9170();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8_snorm) uniform highp readonly image3D arg_0;
+uvec3 textureDimensions_bf9170() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_bf9170();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.msl
index f3ea6c8..d300568 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_bf9170(texture3d<float, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_bf9170(texture3d<float, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_bf9170(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_bf9170(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_bf9170(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_bf9170(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_bf9170(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_bf9170(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.spvasm
index 51cfbb8..6c2f73b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_bf9170 "textureDimensions_bf9170"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_bf9170 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_bf9170 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_bf9170
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_bf9170
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_bf9170
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_bf9170
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_bf9170
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_bf9170
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.wgsl
index 9388c5a..f4f68ac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/bf9170.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read>;
-fn textureDimensions_bf9170() {
+fn textureDimensions_bf9170() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_bf9170();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_bf9170();
+ prevent_dce = textureDimensions_bf9170();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_bf9170();
+ prevent_dce = textureDimensions_bf9170();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_bf9170();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl
index a2e6c0b..6caea5a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32float, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32float, read>) -> vec2<u32>
-fn textureDimensions_c1189e() {
+fn textureDimensions_c1189e() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c1189e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c1189e();
+ prevent_dce = textureDimensions_c1189e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c1189e();
+ prevent_dce = textureDimensions_c1189e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c1189e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.dxc.hlsl
index a0ca033..0c0d8cf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c1189e() {
+uint2 textureDimensions_c1189e() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c1189e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c1189e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c1189e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c1189e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c1189e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c1189e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.fxc.hlsl
index a0ca033..0c0d8cf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c1189e() {
+uint2 textureDimensions_c1189e() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c1189e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c1189e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c1189e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c1189e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c1189e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c1189e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.glsl
index d0dab38..b383ee9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp readonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_c1189e() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_c1189e();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_c1189e() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c1189e() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_c1189e();
+ prevent_dce.inner = textureDimensions_c1189e();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_c1189e() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c1189e() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_c1189e();
+ prevent_dce.inner = textureDimensions_c1189e();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_c1189e() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_c1189e();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.msl
index d72929a..af31020 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c1189e(texture2d_array<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_c1189e(texture2d_array<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c1189e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c1189e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_c1189e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c1189e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c1189e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c1189e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.spvasm
index b1cdd1f..82a91e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c1189e "textureDimensions_c1189e"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c1189e = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_c1189e = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_c1189e
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_c1189e
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_c1189e
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_c1189e
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_c1189e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_c1189e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.wgsl
index e1d57db..75947d5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1189e.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, read>;
-fn textureDimensions_c1189e() {
+fn textureDimensions_c1189e() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c1189e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c1189e();
+ prevent_dce = textureDimensions_c1189e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c1189e();
+ prevent_dce = textureDimensions_c1189e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c1189e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl
index 458a1d2..81f8509 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8uint, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba8uint, write>) -> vec2<u32>
-fn textureDimensions_c1dbf6() {
+fn textureDimensions_c1dbf6() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c1dbf6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c1dbf6();
+ prevent_dce = textureDimensions_c1dbf6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c1dbf6();
+ prevent_dce = textureDimensions_c1dbf6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c1dbf6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.dxc.hlsl
index ed45ef3..4a3f8da 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c1dbf6() {
+uint2 textureDimensions_c1dbf6() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c1dbf6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c1dbf6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c1dbf6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c1dbf6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c1dbf6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c1dbf6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.fxc.hlsl
index ed45ef3..4a3f8da 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c1dbf6() {
+uint2 textureDimensions_c1dbf6() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c1dbf6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c1dbf6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c1dbf6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c1dbf6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c1dbf6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c1dbf6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.glsl
index 2df02fa..da8ef19 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_c1dbf6() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_c1dbf6();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_c1dbf6() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c1dbf6() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_c1dbf6();
+ prevent_dce.inner = textureDimensions_c1dbf6();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_c1dbf6() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c1dbf6() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_c1dbf6();
+ prevent_dce.inner = textureDimensions_c1dbf6();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_c1dbf6() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_c1dbf6();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.msl
index 6aaebf5..f7f6ea1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c1dbf6(texture2d<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_c1dbf6(texture2d<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c1dbf6(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c1dbf6(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_c1dbf6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c1dbf6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c1dbf6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c1dbf6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.spvasm
index 8b74255..b805010 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c1dbf6 "textureDimensions_c1dbf6"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c1dbf6 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_c1dbf6 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_c1dbf6
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_c1dbf6
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_c1dbf6
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_c1dbf6
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_c1dbf6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_c1dbf6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.wgsl
index fd010a3..a4d8eb8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c1dbf6.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, write>;
-fn textureDimensions_c1dbf6() {
+fn textureDimensions_c1dbf6() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c1dbf6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c1dbf6();
+ prevent_dce = textureDimensions_c1dbf6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c1dbf6();
+ prevent_dce = textureDimensions_c1dbf6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c1dbf6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl
index 653b2b0..1a04080 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16sint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba16sint, read_write>) -> u32
-fn textureDimensions_c27466() {
+fn textureDimensions_c27466() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c27466();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_c27466();
+ prevent_dce = textureDimensions_c27466();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c27466();
+ prevent_dce = textureDimensions_c27466();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c27466();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.dxc.hlsl
index ff52a78..d70ce55 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c27466() {
+uint textureDimensions_c27466() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c27466();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c27466();
+ prevent_dce.Store(0u, asuint(textureDimensions_c27466()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c27466();
+ prevent_dce.Store(0u, asuint(textureDimensions_c27466()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c27466();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.fxc.hlsl
index ff52a78..d70ce55 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c27466() {
+uint textureDimensions_c27466() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c27466();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c27466();
+ prevent_dce.Store(0u, asuint(textureDimensions_c27466()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c27466();
+ prevent_dce.Store(0u, asuint(textureDimensions_c27466()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c27466();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.glsl
index 9981db8..6e4bd34 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_c27466() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_c27466();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_c27466() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_c27466() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_c27466();
+ prevent_dce.inner = textureDimensions_c27466();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_c27466() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_c27466() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_c27466();
+ prevent_dce.inner = textureDimensions_c27466();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_c27466() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_c27466();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.msl
index 45d5138..9a6dd13 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c27466(texture1d<int, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_c27466(texture1d<int, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c27466(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c27466(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_c27466(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c27466(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c27466(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c27466(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.spvasm
index bca14d4..e931f68 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c27466 "textureDimensions_c27466"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c27466 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_c27466 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_c27466
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_c27466
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_c27466
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_c27466
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_c27466
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_c27466
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.wgsl
index e1288c7..4835acf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c27466.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, read_write>;
-fn textureDimensions_c27466() {
+fn textureDimensions_c27466() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c27466();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_c27466();
+ prevent_dce = textureDimensions_c27466();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c27466();
+ prevent_dce = textureDimensions_c27466();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c27466();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl
index b7fb6ed..e9beab1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_depth_multisampled_2d;
// fn textureDimensions(texture: texture_depth_multisampled_2d) -> vec2<u32>
-fn textureDimensions_c2cdd3() {
+fn textureDimensions_c2cdd3() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c2cdd3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c2cdd3();
+ prevent_dce = textureDimensions_c2cdd3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c2cdd3();
+ prevent_dce = textureDimensions_c2cdd3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c2cdd3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.dxc.hlsl
index fb25c3a..9372bdb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DMS<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c2cdd3() {
+uint2 textureDimensions_c2cdd3() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c2cdd3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c2cdd3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c2cdd3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c2cdd3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c2cdd3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c2cdd3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.fxc.hlsl
index fb25c3a..9372bdb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DMS<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c2cdd3() {
+uint2 textureDimensions_c2cdd3() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c2cdd3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c2cdd3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c2cdd3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c2cdd3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c2cdd3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c2cdd3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.glsl
index dde29ab..a0387eb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp sampler2DMS arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_c2cdd3() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_c2cdd3();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2DMS arg_0_1;
+uvec2 textureDimensions_c2cdd3() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c2cdd3() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_c2cdd3();
+ prevent_dce.inner = textureDimensions_c2cdd3();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp sampler2DMS arg_0_1;
+uvec2 textureDimensions_c2cdd3() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c2cdd3() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_c2cdd3();
+ prevent_dce.inner = textureDimensions_c2cdd3();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2DMS arg_0_1;
+uvec2 textureDimensions_c2cdd3() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_c2cdd3();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.msl
index 10160db..8aa2982 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c2cdd3(depth2d_ms<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_c2cdd3(depth2d_ms<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depth2d_ms<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c2cdd3(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depth2d_ms<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c2cdd3(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depth2d_ms<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_c2cdd3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depth2d_ms<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c2cdd3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depth2d_ms<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depth2d_ms<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depth2d_ms<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c2cdd3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depth2d_ms<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c2cdd3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.spvasm
index 48a456f..1fbe702 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c2cdd3 "textureDimensions_c2cdd3"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 1 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c2cdd3 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_c2cdd3 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_c2cdd3
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_c2cdd3
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_c2cdd3
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_c2cdd3
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_c2cdd3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_c2cdd3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.wgsl
index 264ca2c..5c7b343 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c2cdd3.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_depth_multisampled_2d;
-fn textureDimensions_c2cdd3() {
+fn textureDimensions_c2cdd3() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c2cdd3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c2cdd3();
+ prevent_dce = textureDimensions_c2cdd3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c2cdd3();
+ prevent_dce = textureDimensions_c2cdd3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c2cdd3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl
index e8e1dfa..04dde37 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32sint, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32sint, write>) -> vec2<u32>
-fn textureDimensions_c44fc1() {
+fn textureDimensions_c44fc1() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c44fc1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c44fc1();
+ prevent_dce = textureDimensions_c44fc1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c44fc1();
+ prevent_dce = textureDimensions_c44fc1();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c44fc1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.dxc.hlsl
index 3587093..bc3439e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c44fc1() {
+uint2 textureDimensions_c44fc1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c44fc1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c44fc1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c44fc1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c44fc1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c44fc1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c44fc1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.fxc.hlsl
index 3587093..bc3439e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c44fc1() {
+uint2 textureDimensions_c44fc1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c44fc1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c44fc1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c44fc1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c44fc1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c44fc1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c44fc1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.glsl
index 2cf79da..656bd2b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp writeonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_c44fc1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_c44fc1();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_c44fc1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c44fc1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_c44fc1();
+ prevent_dce.inner = textureDimensions_c44fc1();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_c44fc1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c44fc1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_c44fc1();
+ prevent_dce.inner = textureDimensions_c44fc1();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_c44fc1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_c44fc1();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.msl
index 71e0c37..ceb785e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c44fc1(texture2d_array<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_c44fc1(texture2d_array<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c44fc1(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c44fc1(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_c44fc1(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c44fc1(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c44fc1(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c44fc1(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.spvasm
index f20713f..ff23cb5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c44fc1 "textureDimensions_c44fc1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c44fc1 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_c44fc1 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_c44fc1
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_c44fc1
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_c44fc1
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_c44fc1
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_c44fc1
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_c44fc1
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.wgsl
index 6078ed8..055252f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c44fc1.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, write>;
-fn textureDimensions_c44fc1() {
+fn textureDimensions_c44fc1() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c44fc1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c44fc1();
+ prevent_dce = textureDimensions_c44fc1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c44fc1();
+ prevent_dce = textureDimensions_c44fc1();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c44fc1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl
index 728084e..c9f7ecc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_depth_cube;
// fn textureDimensions(texture: texture_depth_cube) -> vec2<u32>
-fn textureDimensions_c5a36e() {
+fn textureDimensions_c5a36e() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c5a36e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c5a36e();
+ prevent_dce = textureDimensions_c5a36e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c5a36e();
+ prevent_dce = textureDimensions_c5a36e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c5a36e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.dxc.hlsl
index f034830..93c587d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
TextureCube arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c5a36e() {
+uint2 textureDimensions_c5a36e() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c5a36e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c5a36e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c5a36e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c5a36e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c5a36e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c5a36e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.fxc.hlsl
index f034830..93c587d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
TextureCube arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c5a36e() {
+uint2 textureDimensions_c5a36e() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c5a36e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c5a36e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c5a36e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c5a36e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c5a36e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c5a36e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.glsl
index 11fc5d3..a0cdf58 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp samplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_c5a36e() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_c5a36e();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_c5a36e() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c5a36e() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_c5a36e();
+ prevent_dce.inner = textureDimensions_c5a36e();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_c5a36e() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c5a36e() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_c5a36e();
+ prevent_dce.inner = textureDimensions_c5a36e();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_c5a36e() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_c5a36e();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.msl
index 80d9aa2..da44c46 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c5a36e(depthcube<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_c5a36e(depthcube<float, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depthcube<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c5a36e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depthcube<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c5a36e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depthcube<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_c5a36e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depthcube<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c5a36e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depthcube<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depthcube<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depthcube<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c5a36e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depthcube<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c5a36e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.spvasm
index 1c34fe9..61e8300 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c5a36e "textureDimensions_c5a36e"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c5a36e = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySizeLod %v2uint %22 %int_0
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_c5a36e = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySizeLod %v2uint %24 %int_0
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_c5a36e
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_c5a36e
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_c5a36e
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_c5a36e
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_c5a36e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_c5a36e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.wgsl
index 570a9bd..0818250 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c5a36e.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_depth_cube;
-fn textureDimensions_c5a36e() {
+fn textureDimensions_c5a36e() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c5a36e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c5a36e();
+ prevent_dce = textureDimensions_c5a36e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c5a36e();
+ prevent_dce = textureDimensions_c5a36e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c5a36e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl
index c50e18f..4746cd2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<r32sint, read_write>) -> vec2<u32>
-fn textureDimensions_c6b44c() {
+fn textureDimensions_c6b44c() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c6b44c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c6b44c();
+ prevent_dce = textureDimensions_c6b44c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c6b44c();
+ prevent_dce = textureDimensions_c6b44c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c6b44c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.dxc.hlsl
index 01d8ee5..79c0f65 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c6b44c() {
+uint2 textureDimensions_c6b44c() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c6b44c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c6b44c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c6b44c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c6b44c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c6b44c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c6b44c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.fxc.hlsl
index 01d8ee5..79c0f65 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c6b44c() {
+uint2 textureDimensions_c6b44c() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c6b44c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c6b44c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c6b44c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c6b44c();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c6b44c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c6b44c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.glsl
index 53b69e3..49668e3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_c6b44c() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_c6b44c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp iimage2D arg_0;
+uvec2 textureDimensions_c6b44c() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c6b44c() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_c6b44c();
+ prevent_dce.inner = textureDimensions_c6b44c();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp iimage2D arg_0;
+uvec2 textureDimensions_c6b44c() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_c6b44c() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_c6b44c();
+ prevent_dce.inner = textureDimensions_c6b44c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32i) uniform highp iimage2D arg_0;
+uvec2 textureDimensions_c6b44c() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_c6b44c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.msl
index 3a3f6ef..12ac573 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c6b44c(texture2d<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_c6b44c(texture2d<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c6b44c(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c6b44c(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_c6b44c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c6b44c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c6b44c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c6b44c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.spvasm
index d38cdae..45916da 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c6b44c "textureDimensions_c6b44c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c6b44c = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_c6b44c = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_c6b44c
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_c6b44c
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_c6b44c
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_c6b44c
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_c6b44c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_c6b44c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.wgsl
index 430e44a..3b65ffa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b44c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read_write>;
-fn textureDimensions_c6b44c() {
+fn textureDimensions_c6b44c() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c6b44c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c6b44c();
+ prevent_dce = textureDimensions_c6b44c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c6b44c();
+ prevent_dce = textureDimensions_c6b44c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c6b44c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl
index d1ba650..b2d0a94 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_1d<r8unorm, read_write>) -> u32
-fn textureDimensions_c6b985() {
+fn textureDimensions_c6b985() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c6b985();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_c6b985();
+ prevent_dce = textureDimensions_c6b985();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c6b985();
+ prevent_dce = textureDimensions_c6b985();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c6b985();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.dxc.hlsl
index 753cf17..c45d87c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c6b985() {
+uint textureDimensions_c6b985() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c6b985();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c6b985();
+ prevent_dce.Store(0u, asuint(textureDimensions_c6b985()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c6b985();
+ prevent_dce.Store(0u, asuint(textureDimensions_c6b985()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c6b985();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.fxc.hlsl
index 753cf17..c45d87c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c6b985() {
+uint textureDimensions_c6b985() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c6b985();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c6b985();
+ prevent_dce.Store(0u, asuint(textureDimensions_c6b985()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c6b985();
+ prevent_dce.Store(0u, asuint(textureDimensions_c6b985()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c6b985();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.msl
index b0a6fb9..e7f0baf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c6b985(texture1d<float, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_c6b985(texture1d<float, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c6b985(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c6b985(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_c6b985(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c6b985(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c6b985(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c6b985(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.spvasm
index 3de8c99..ce38051 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,71 +22,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c6b985 "textureDimensions_c6b985"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 R8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c6b985 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_c6b985 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_c6b985
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_c6b985
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_c6b985
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_c6b985
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_c6b985
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_c6b985
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.wgsl
index 5c45f89..c6d84c7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c6b985.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r8unorm, read_write>;
-fn textureDimensions_c6b985() {
+fn textureDimensions_c6b985() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c6b985();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_c6b985();
+ prevent_dce = textureDimensions_c6b985();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c6b985();
+ prevent_dce = textureDimensions_c6b985();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c6b985();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl
index 7cd767b..26f1b394 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32float, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rg32float, read_write>) -> u32
-fn textureDimensions_c7ea63() {
+fn textureDimensions_c7ea63() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c7ea63();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_c7ea63();
+ prevent_dce = textureDimensions_c7ea63();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c7ea63();
+ prevent_dce = textureDimensions_c7ea63();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c7ea63();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.dxc.hlsl
index e6ab0ba..094ac27 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c7ea63() {
+uint textureDimensions_c7ea63() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c7ea63();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c7ea63();
+ prevent_dce.Store(0u, asuint(textureDimensions_c7ea63()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c7ea63();
+ prevent_dce.Store(0u, asuint(textureDimensions_c7ea63()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c7ea63();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.fxc.hlsl
index e6ab0ba..094ac27 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c7ea63() {
+uint textureDimensions_c7ea63() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c7ea63();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c7ea63();
+ prevent_dce.Store(0u, asuint(textureDimensions_c7ea63()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c7ea63();
+ prevent_dce.Store(0u, asuint(textureDimensions_c7ea63()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c7ea63();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.msl
index b21b53e..03e8141 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c7ea63(texture1d<float, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_c7ea63(texture1d<float, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c7ea63(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c7ea63(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_c7ea63(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c7ea63(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c7ea63(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c7ea63(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.spvasm
index 27def32..d8fd854 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,71 +22,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c7ea63 "textureDimensions_c7ea63"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c7ea63 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_c7ea63 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_c7ea63
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_c7ea63
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_c7ea63
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_c7ea63
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_c7ea63
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_c7ea63
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.wgsl
index 8e1d75a..859c201 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c7ea63.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32float, read_write>;
-fn textureDimensions_c7ea63() {
+fn textureDimensions_c7ea63() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c7ea63();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_c7ea63();
+ prevent_dce = textureDimensions_c7ea63();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c7ea63();
+ prevent_dce = textureDimensions_c7ea63();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c7ea63();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl
index bfaf33d..c591f34 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rg32uint, read_write>) -> vec2<u32>
-fn textureDimensions_c82420() {
+fn textureDimensions_c82420() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c82420();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c82420();
+ prevent_dce = textureDimensions_c82420();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c82420();
+ prevent_dce = textureDimensions_c82420();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c82420();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.dxc.hlsl
index 7ee2238..d489640 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c82420() {
+uint2 textureDimensions_c82420() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c82420();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c82420();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c82420()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c82420();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c82420()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c82420();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.fxc.hlsl
index 7ee2238..d489640 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c82420() {
+uint2 textureDimensions_c82420() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c82420();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c82420();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c82420()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c82420();
+ prevent_dce.Store2(0u, asuint(textureDimensions_c82420()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c82420();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.msl
index 4197b49..7980481 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c82420(texture2d<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_c82420(texture2d<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_c82420(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_c82420(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_c82420(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c82420(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c82420(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c82420(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.spvasm
index 7a321b6..fa17a6a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_c82420 "textureDimensions_c82420"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_c82420 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_c82420 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_c82420
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_c82420
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_c82420
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_c82420
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_c82420
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_c82420
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.wgsl
index a380918..04ac8b7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c82420.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32uint, read_write>;
-fn textureDimensions_c82420() {
+fn textureDimensions_c82420() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c82420();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c82420();
+ prevent_dce = textureDimensions_c82420();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c82420();
+ prevent_dce = textureDimensions_c82420();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c82420();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl
index 0502820..412dde6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_3d<i32>;
// fn textureDimensions(texture: texture_3d<i32>, level: u32) -> vec3<u32>
-fn textureDimensions_c871f3() {
+fn textureDimensions_c871f3() -> vec3<u32>{
var arg_1 = 1u;
var res: vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c871f3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c871f3();
+ prevent_dce = textureDimensions_c871f3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c871f3();
+ prevent_dce = textureDimensions_c871f3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c871f3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.dxc.hlsl
index 772d682..31999c6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c871f3() {
+uint3 textureDimensions_c871f3() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c871f3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c871f3();
+ prevent_dce.Store3(0u, asuint(textureDimensions_c871f3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c871f3();
+ prevent_dce.Store3(0u, asuint(textureDimensions_c871f3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c871f3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.fxc.hlsl
index 772d682..31999c6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_c871f3() {
+uint3 textureDimensions_c871f3() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_c871f3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_c871f3();
+ prevent_dce.Store3(0u, asuint(textureDimensions_c871f3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_c871f3();
+ prevent_dce.Store3(0u, asuint(textureDimensions_c871f3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_c871f3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.glsl
index 87fd624..b419bb2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.glsl
@@ -1,48 +1,26 @@
#version 310 es
-
-uniform highp isampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_c871f3() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_c871f3();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_c871f3() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_c871f3() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_c871f3();
+ prevent_dce.inner = textureDimensions_c871f3();
}
void main() {
@@ -52,19 +30,24 @@
#version 310 es
uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_c871f3() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_c871f3() {
- uint arg_1 = 1u;
- uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_c871f3();
+ prevent_dce.inner = textureDimensions_c871f3();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -72,3 +55,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp isampler3D arg_0_1;
+uvec3 textureDimensions_c871f3() {
+ uint arg_1 = 1u;
+ uvec3 res = uvec3(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_c871f3();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.msl
index 16c8e01..46b00dd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_c871f3(texture3d<int, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_c871f3(texture3d<int, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint3 res = uint3(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1), tint_symbol_1.get_depth(arg_1));
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_c871f3(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_c871f3(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_c871f3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_c871f3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_c871f3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_c871f3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.spvasm
index 2668008..b482d29 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 64
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,105 @@
OpName %textureDimensions_c871f3 "textureDimensions_c871f3"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %27 = OpConstantNull %uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %31 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_c871f3 = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %25
- %res = OpVariable %_ptr_Function_v3uint Function %31
+%textureDimensions_c871f3 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %27
+ %res = OpVariable %_ptr_Function_v3uint Function %10
OpStore %arg_1 %uint_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v3uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %35 = OpLoad %v3uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v3uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v3uint %textureDimensions_c871f3
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_c871f3
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v3uint %textureDimensions_c871f3
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %55 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %56 = OpFunctionCall %v3uint %textureDimensions_c871f3
+ OpStore %55 %56
+ %57 = OpLoad %VertexOutput %out
+ OpReturnValue %57
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %59 = OpLabel
+ %60 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %61 = OpCompositeExtract %v4float %60 0
+ OpStore %pos_1 %61
+ %62 = OpCompositeExtract %v3uint %60 1
+ OpStore %prevent_dce_1 %62
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_c871f3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_c871f3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.wgsl
index b423864..f072b28 100644
--- a/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/c871f3.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_3d<i32>;
-fn textureDimensions_c871f3() {
+fn textureDimensions_c871f3() -> vec3<u32> {
var arg_1 = 1u;
var res : vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_c871f3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_c871f3();
+ prevent_dce = textureDimensions_c871f3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_c871f3();
+ prevent_dce = textureDimensions_c871f3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_c871f3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl
index 536d7b9..f8e58df 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8uint, read_write>) -> vec2<u32>
-fn textureDimensions_ca10cc() {
+fn textureDimensions_ca10cc() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ca10cc();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_ca10cc();
+ prevent_dce = textureDimensions_ca10cc();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ca10cc();
+ prevent_dce = textureDimensions_ca10cc();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ca10cc();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.dxc.hlsl
index a834adb..9178c32 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ca10cc() {
+uint2 textureDimensions_ca10cc() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ca10cc();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ca10cc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_ca10cc()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ca10cc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_ca10cc()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ca10cc();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.fxc.hlsl
index a834adb..9178c32 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ca10cc() {
+uint2 textureDimensions_ca10cc() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ca10cc();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ca10cc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_ca10cc()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ca10cc();
+ prevent_dce.Store2(0u, asuint(textureDimensions_ca10cc()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ca10cc();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.glsl
index 4586b97..2e8d68d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_ca10cc() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_ca10cc();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_ca10cc() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_ca10cc() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_ca10cc();
+ prevent_dce.inner = textureDimensions_ca10cc();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_ca10cc() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_ca10cc() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_ca10cc();
+ prevent_dce.inner = textureDimensions_ca10cc();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8ui) uniform highp writeonly uimage2DArray arg_0;
+uvec2 textureDimensions_ca10cc() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_ca10cc();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.msl
index 2eb79f9..3ae1dff 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_ca10cc(texture2d_array<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_ca10cc(texture2d_array<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_ca10cc(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_ca10cc(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_ca10cc(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_ca10cc(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_ca10cc(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_ca10cc(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.spvasm
index 312ee4c..f8655a6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_ca10cc "textureDimensions_ca10cc"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_ca10cc = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_ca10cc = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_ca10cc
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_ca10cc
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_ca10cc
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_ca10cc
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_ca10cc
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_ca10cc
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.wgsl
index 5004c88..3b93855 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ca10cc.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8uint, read_write>;
-fn textureDimensions_ca10cc() {
+fn textureDimensions_ca10cc() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ca10cc();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_ca10cc();
+ prevent_dce = textureDimensions_ca10cc();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ca10cc();
+ prevent_dce = textureDimensions_ca10cc();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ca10cc();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl
index 2073133..85ea5e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32sint, write>;
// fn textureDimensions(texture: texture_storage_2d<r32sint, write>) -> vec2<u32>
-fn textureDimensions_cad3b7() {
+fn textureDimensions_cad3b7() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cad3b7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cad3b7();
+ prevent_dce = textureDimensions_cad3b7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cad3b7();
+ prevent_dce = textureDimensions_cad3b7();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cad3b7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.dxc.hlsl
index ec45c05..d2c5a02 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cad3b7() {
+uint2 textureDimensions_cad3b7() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cad3b7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cad3b7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cad3b7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cad3b7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cad3b7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cad3b7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.fxc.hlsl
index ec45c05..d2c5a02 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cad3b7() {
+uint2 textureDimensions_cad3b7() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cad3b7();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cad3b7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cad3b7()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cad3b7();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cad3b7()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cad3b7();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.glsl
index e9cde90..60bad3d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_cad3b7() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_cad3b7();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_cad3b7() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_cad3b7() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_cad3b7();
+ prevent_dce.inner = textureDimensions_cad3b7();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_cad3b7() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_cad3b7() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_cad3b7();
+ prevent_dce.inner = textureDimensions_cad3b7();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32i) uniform highp writeonly iimage2D arg_0;
+uvec2 textureDimensions_cad3b7() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_cad3b7();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.msl
index 2242261..bb4b811 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_cad3b7(texture2d<int, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_cad3b7(texture2d<int, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_cad3b7(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_cad3b7(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_cad3b7(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_cad3b7(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_cad3b7(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_cad3b7(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.spvasm
index a4eb0f0..e5a4b0a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_cad3b7 "textureDimensions_cad3b7"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_cad3b7 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_cad3b7 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_cad3b7
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_cad3b7
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_cad3b7
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_cad3b7
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_cad3b7
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_cad3b7
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.wgsl
index c73c1ca..53388d5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cad3b7.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, write>;
-fn textureDimensions_cad3b7() {
+fn textureDimensions_cad3b7() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cad3b7();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cad3b7();
+ prevent_dce = textureDimensions_cad3b7();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cad3b7();
+ prevent_dce = textureDimensions_cad3b7();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cad3b7();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl
index bb98294..24aa0e4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8snorm, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba8snorm, write>) -> vec3<u32>
-fn textureDimensions_cc947b() {
+fn textureDimensions_cc947b() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cc947b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cc947b();
+ prevent_dce = textureDimensions_cc947b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cc947b();
+ prevent_dce = textureDimensions_cc947b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cc947b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.dxc.hlsl
index c31b931..445c176 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cc947b() {
+uint3 textureDimensions_cc947b() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cc947b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cc947b();
+ prevent_dce.Store3(0u, asuint(textureDimensions_cc947b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cc947b();
+ prevent_dce.Store3(0u, asuint(textureDimensions_cc947b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cc947b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.fxc.hlsl
index c31b931..445c176 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cc947b() {
+uint3 textureDimensions_cc947b() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cc947b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cc947b();
+ prevent_dce.Store3(0u, asuint(textureDimensions_cc947b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cc947b();
+ prevent_dce.Store3(0u, asuint(textureDimensions_cc947b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cc947b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.glsl
index c30e042..582a37c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_cc947b() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_cc947b();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_cc947b() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_cc947b() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_cc947b();
+ prevent_dce.inner = textureDimensions_cc947b();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8_snorm) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_cc947b() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_cc947b() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_cc947b();
+ prevent_dce.inner = textureDimensions_cc947b();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8_snorm) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_cc947b() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_cc947b();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.msl
index f811166..99980fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_cc947b(texture3d<float, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_cc947b(texture3d<float, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_cc947b(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_cc947b(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_cc947b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_cc947b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_cc947b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_cc947b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.spvasm
index 80a4f88..f4eb9e2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_cc947b "textureDimensions_cc947b"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_cc947b = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_cc947b = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_cc947b
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_cc947b
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_cc947b
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_cc947b
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_cc947b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_cc947b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.wgsl
index 98d645a..f5aa850 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cc947b.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, write>;
-fn textureDimensions_cc947b() {
+fn textureDimensions_cc947b() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cc947b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cc947b();
+ prevent_dce = textureDimensions_cc947b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cc947b();
+ prevent_dce = textureDimensions_cc947b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cc947b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl
index 9cf6032..34872d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32sint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32sint, read>) -> vec2<u32>
-fn textureDimensions_cd3033() {
+fn textureDimensions_cd3033() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cd3033();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cd3033();
+ prevent_dce = textureDimensions_cd3033();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cd3033();
+ prevent_dce = textureDimensions_cd3033();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cd3033();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.dxc.hlsl
index f236a40..5769061 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cd3033() {
+uint2 textureDimensions_cd3033() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cd3033();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cd3033();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cd3033()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cd3033();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cd3033()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cd3033();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.fxc.hlsl
index f236a40..5769061 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cd3033() {
+uint2 textureDimensions_cd3033() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cd3033();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cd3033();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cd3033()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cd3033();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cd3033()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cd3033();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.msl
index cde806f..2174038 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_cd3033(texture2d_array<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_cd3033(texture2d_array<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_cd3033(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_cd3033(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_cd3033(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_cd3033(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_cd3033(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_cd3033(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.spvasm
index d9c55ad..99336ef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,76 +21,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_cd3033 "textureDimensions_cd3033"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_cd3033 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_cd3033 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_cd3033
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_cd3033
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_cd3033
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_cd3033
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_cd3033
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_cd3033
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.wgsl
index 2d26cbe..5e73e07 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cd3033.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32sint, read>;
-fn textureDimensions_cd3033() {
+fn textureDimensions_cd3033() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cd3033();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cd3033();
+ prevent_dce = textureDimensions_cd3033();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cd3033();
+ prevent_dce = textureDimensions_cd3033();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cd3033();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl
index 995400e..3491e02 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_external;
// fn textureDimensions(texture: texture_external) -> vec2<u32>
-fn textureDimensions_cdc6c9() {
+fn textureDimensions_cdc6c9() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cdc6c9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cdc6c9();
+ prevent_dce = textureDimensions_cdc6c9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cdc6c9();
+ prevent_dce = textureDimensions_cdc6c9();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cdc6c9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.dxc.hlsl
index b45ca2b..b610d05 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.dxc.hlsl
@@ -4,36 +4,44 @@
};
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-
-void textureDimensions_cdc6c9() {
+uint2 textureDimensions_cdc6c9() {
uint2 res = (ext_tex_params[16].xy + (1u).xx);
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cdc6c9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cdc6c9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cdc6c9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cdc6c9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cdc6c9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cdc6c9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.fxc.hlsl
index b45ca2b..b610d05 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.fxc.hlsl
@@ -4,36 +4,44 @@
};
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-
-void textureDimensions_cdc6c9() {
+uint2 textureDimensions_cdc6c9() {
uint2 res = (ext_tex_params[16].xy + (1u).xx);
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cdc6c9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cdc6c9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cdc6c9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cdc6c9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cdc6c9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cdc6c9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.glsl
index 95c24ec..0bb96d5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.glsl
@@ -1,85 +1,4 @@
#version 310 es
-
-struct GammaTransferParams {
- float G;
- float A;
- float B;
- float C;
- float D;
- float E;
- float F;
- uint padding;
-};
-
-struct ExternalTextureParams {
- uint numPlanes;
- uint doYuvToRgbConversionOnly;
- uint pad;
- uint pad_1;
- mat3x4 yuvToRgbConversionMatrix;
- GammaTransferParams gammaDecodeParams;
- GammaTransferParams gammaEncodeParams;
- mat3 gamutConversionMatrix;
- mat3x2 sampleTransform;
- mat3x2 loadTransform;
- vec2 samplePlane0RectMin;
- vec2 samplePlane0RectMax;
- vec2 samplePlane1RectMin;
- vec2 samplePlane1RectMax;
- uvec2 visibleSize;
- vec2 plane1CoordFactor;
-};
-
-struct ExternalTextureParams_std140 {
- uint numPlanes;
- uint doYuvToRgbConversionOnly;
- uint pad;
- uint pad_1;
- mat3x4 yuvToRgbConversionMatrix;
- GammaTransferParams gammaDecodeParams;
- GammaTransferParams gammaEncodeParams;
- mat3 gamutConversionMatrix;
- vec2 sampleTransform_0;
- vec2 sampleTransform_1;
- vec2 sampleTransform_2;
- vec2 loadTransform_0;
- vec2 loadTransform_1;
- vec2 loadTransform_2;
- vec2 samplePlane0RectMin;
- vec2 samplePlane0RectMax;
- vec2 samplePlane1RectMin;
- vec2 samplePlane1RectMax;
- uvec2 visibleSize;
- vec2 plane1CoordFactor;
-};
-
-layout(binding = 2, std140) uniform ext_tex_params_block_std140_ubo {
- ExternalTextureParams_std140 inner;
-} ext_tex_params;
-
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_cdc6c9() {
- uvec2 res = (ext_tex_params.inner.visibleSize + uvec2(1u));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_cdc6c9();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
@@ -140,17 +59,22 @@
ExternalTextureParams_std140 inner;
} ext_tex_params;
+uvec2 textureDimensions_cdc6c9() {
+ uvec2 res = (ext_tex_params.inner.visibleSize + uvec2(1u));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_cdc6c9() {
- uvec2 res = (ext_tex_params.inner.visibleSize + uvec2(1u));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_cdc6c9();
+ prevent_dce.inner = textureDimensions_cdc6c9();
}
void main() {
@@ -216,17 +140,22 @@
ExternalTextureParams_std140 inner;
} ext_tex_params;
+uvec2 textureDimensions_cdc6c9() {
+ uvec2 res = (ext_tex_params.inner.visibleSize + uvec2(1u));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_cdc6c9() {
- uvec2 res = (ext_tex_params.inner.visibleSize + uvec2(1u));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_cdc6c9();
+ prevent_dce.inner = textureDimensions_cdc6c9();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -234,3 +163,89 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+struct GammaTransferParams {
+ float G;
+ float A;
+ float B;
+ float C;
+ float D;
+ float E;
+ float F;
+ uint padding;
+};
+
+struct ExternalTextureParams {
+ uint numPlanes;
+ uint doYuvToRgbConversionOnly;
+ uint pad;
+ uint pad_1;
+ mat3x4 yuvToRgbConversionMatrix;
+ GammaTransferParams gammaDecodeParams;
+ GammaTransferParams gammaEncodeParams;
+ mat3 gamutConversionMatrix;
+ mat3x2 sampleTransform;
+ mat3x2 loadTransform;
+ vec2 samplePlane0RectMin;
+ vec2 samplePlane0RectMax;
+ vec2 samplePlane1RectMin;
+ vec2 samplePlane1RectMax;
+ uvec2 visibleSize;
+ vec2 plane1CoordFactor;
+};
+
+struct ExternalTextureParams_std140 {
+ uint numPlanes;
+ uint doYuvToRgbConversionOnly;
+ uint pad;
+ uint pad_1;
+ mat3x4 yuvToRgbConversionMatrix;
+ GammaTransferParams gammaDecodeParams;
+ GammaTransferParams gammaEncodeParams;
+ mat3 gamutConversionMatrix;
+ vec2 sampleTransform_0;
+ vec2 sampleTransform_1;
+ vec2 sampleTransform_2;
+ vec2 loadTransform_0;
+ vec2 loadTransform_1;
+ vec2 loadTransform_2;
+ vec2 samplePlane0RectMin;
+ vec2 samplePlane0RectMax;
+ vec2 samplePlane1RectMin;
+ vec2 samplePlane1RectMax;
+ uvec2 visibleSize;
+ vec2 plane1CoordFactor;
+};
+
+layout(binding = 2, std140) uniform ext_tex_params_block_std140_ubo {
+ ExternalTextureParams_std140 inner;
+} ext_tex_params;
+
+uvec2 textureDimensions_cdc6c9() {
+ uvec2 res = (ext_tex_params.inner.visibleSize + uvec2(1u));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_cdc6c9();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.msl
index 85ac3a3..2c9ae7d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.msl
@@ -65,34 +65,43 @@
float2 plane1CoordFactor;
};
-void textureDimensions_cdc6c9(const constant ExternalTextureParams_tint_packed_vec3* const tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_cdc6c9(const constant ExternalTextureParams_tint_packed_vec3* const tint_symbol_1) {
uint2 res = ((*(tint_symbol_1)).visibleSize + uint2(1u));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], const constant ExternalTextureParams_tint_packed_vec3* tint_symbol_3 [[buffer(2)]]) {
+ *(tint_symbol_2) = textureDimensions_cdc6c9(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], const constant ExternalTextureParams_tint_packed_vec3* tint_symbol_5 [[buffer(2)]]) {
+ *(tint_symbol_4) = textureDimensions_cdc6c9(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(const constant ExternalTextureParams_tint_packed_vec3* const tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_cdc6c9(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(const constant ExternalTextureParams_tint_packed_vec3* const tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_cdc6c9(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(const constant ExternalTextureParams_tint_packed_vec3* tint_symbol_5 [[buffer(2)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(const constant ExternalTextureParams_tint_packed_vec3* tint_symbol_7 [[buffer(2)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(const constant ExternalTextureParams_tint_packed_vec3* tint_symbol_7 [[buffer(2)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_cdc6c9(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(const constant ExternalTextureParams_tint_packed_vec3* tint_symbol_9 [[buffer(2)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_cdc6c9(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.spvasm
index 3dc25d5..8d711e5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.spvasm
@@ -1,16 +1,17 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 59
+; Bound: 73
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %ext_tex_plane_1 "ext_tex_plane_1"
OpName %ext_tex_params_block_std140 "ext_tex_params_block_std140"
@@ -50,11 +51,17 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_cdc6c9 "textureDimensions_cdc6c9"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %ext_tex_plane_1 DescriptorSet 1
OpDecorate %ext_tex_plane_1 Binding 1
@@ -97,77 +104,97 @@
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
-%ext_tex_plane_1 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+ %v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+%ext_tex_plane_1 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%mat3v4float = OpTypeMatrix %v4float 3
%GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint
%v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3
%v2float = OpTypeVector %float 2
- %v2uint = OpTypeVector %uint 2
%ExternalTextureParams_std140 = OpTypeStruct %uint %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float %v2float %v2float %v2float %v2float %v2float %v2float %v2float %v2float %v2float %v2float %v2uint %v2float
%ext_tex_params_block_std140 = OpTypeStruct %ExternalTextureParams_std140
%_ptr_Uniform_ext_tex_params_block_std140 = OpTypePointer Uniform %ext_tex_params_block_std140
%ext_tex_params = OpVariable %_ptr_Uniform_ext_tex_params_block_std140 Uniform
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %27 = OpTypeFunction %void
+ %30 = OpTypeFunction %v2uint
%uint_0 = OpConstant %uint 0
%uint_16 = OpConstant %uint 16
%_ptr_Uniform_v2uint = OpTypePointer Uniform %v2uint
%uint_1 = OpConstant %uint 1
- %37 = OpConstantComposite %v2uint %uint_1 %uint_1
+ %39 = OpConstantComposite %v2uint %uint_1 %uint_1
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %41 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %44 = OpTypeFunction %void
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %45 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %55 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %61 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_cdc6c9 = OpFunction %void None %27
- %30 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %41
- %34 = OpAccessChain %_ptr_Uniform_v2uint %ext_tex_params %uint_0 %uint_16
- %35 = OpLoad %v2uint %34
- %38 = OpIAdd %v2uint %35 %37
- OpStore %res %38
- %43 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %44 = OpLoad %v2uint %res
- OpStore %43 %44
- OpReturn
+%textureDimensions_cdc6c9 = OpFunction %v2uint None %30
+ %32 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %36 = OpAccessChain %_ptr_Uniform_v2uint %ext_tex_params %uint_0 %uint_16
+ %37 = OpLoad %v2uint %36
+ %40 = OpIAdd %v2uint %37 %39
+ OpStore %res %40
+ %43 = OpLoad %v2uint %res
+ OpReturnValue %43
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %45
+%fragment_main = OpFunction %void None %44
%47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_cdc6c9
- OpReturnValue %5
+ %49 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %50 = OpFunctionCall %v2uint %textureDimensions_cdc6c9
+ OpStore %49 %50
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %27
- %50 = OpLabel
- %51 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %51
+%compute_main = OpFunction %void None %44
+ %52 = OpLabel
+ %53 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %54 = OpFunctionCall %v2uint %textureDimensions_cdc6c9
+ OpStore %53 %54
+ OpReturn
+ OpFunctionEnd
+%vertex_main_inner = OpFunction %VertexOutput None %55
+ %58 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %61
+ %63 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %63 %5
+ %64 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %65 = OpFunctionCall %v2uint %textureDimensions_cdc6c9
+ OpStore %64 %65
+ %66 = OpLoad %VertexOutput %out
+ OpReturnValue %66
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %44
+ %68 = OpLabel
+ %69 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %70 = OpCompositeExtract %v4float %69 0
+ OpStore %pos_1 %70
+ %71 = OpCompositeExtract %v2uint %69 1
+ OpStore %prevent_dce_1 %71
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %27
- %54 = OpLabel
- %55 = OpFunctionCall %void %textureDimensions_cdc6c9
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %27
- %57 = OpLabel
- %58 = OpFunctionCall %void %textureDimensions_cdc6c9
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.wgsl
index fddb5e2..096744d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cdc6c9.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_external;
-fn textureDimensions_cdc6c9() {
+fn textureDimensions_cdc6c9() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cdc6c9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cdc6c9();
+ prevent_dce = textureDimensions_cdc6c9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cdc6c9();
+ prevent_dce = textureDimensions_cdc6c9();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cdc6c9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl
index b81579e..eba76d4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32sint, read>;
// fn textureDimensions(texture: texture_storage_1d<rg32sint, read>) -> u32
-fn textureDimensions_cedabd() {
+fn textureDimensions_cedabd() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cedabd();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_cedabd();
+ prevent_dce = textureDimensions_cedabd();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cedabd();
+ prevent_dce = textureDimensions_cedabd();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cedabd();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.dxc.hlsl
index 076c805..78ead58 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cedabd() {
+uint textureDimensions_cedabd() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cedabd();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cedabd();
+ prevent_dce.Store(0u, asuint(textureDimensions_cedabd()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cedabd();
+ prevent_dce.Store(0u, asuint(textureDimensions_cedabd()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cedabd();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.fxc.hlsl
index 076c805..78ead58 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cedabd() {
+uint textureDimensions_cedabd() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cedabd();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cedabd();
+ prevent_dce.Store(0u, asuint(textureDimensions_cedabd()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cedabd();
+ prevent_dce.Store(0u, asuint(textureDimensions_cedabd()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cedabd();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.msl
index ee5c6f6..c15a2ce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_cedabd(texture1d<int, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_cedabd(texture1d<int, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_cedabd(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_cedabd(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_cedabd(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_cedabd(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_cedabd(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_cedabd(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.spvasm
index 5d9f510..a77c277 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,73 +22,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_cedabd "textureDimensions_cedabd"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_cedabd = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_cedabd = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_cedabd
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_cedabd
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_cedabd
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_cedabd
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_cedabd
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_cedabd
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.wgsl
index 4a24f85..413f80b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cedabd.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, read>;
-fn textureDimensions_cedabd() {
+fn textureDimensions_cedabd() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cedabd();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_cedabd();
+ prevent_dce = textureDimensions_cedabd();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cedabd();
+ prevent_dce = textureDimensions_cedabd();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cedabd();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl
index afc1694..bbc1724 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_cube_array<f32>;
// fn textureDimensions(texture: texture_cube_array<f32>, level: u32) -> vec2<u32>
-fn textureDimensions_cf2b50() {
+fn textureDimensions_cf2b50() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cf2b50();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cf2b50();
+ prevent_dce = textureDimensions_cf2b50();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cf2b50();
+ prevent_dce = textureDimensions_cf2b50();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cf2b50();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.dxc.hlsl
index 902eae0..ee3e138 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cf2b50() {
+uint2 textureDimensions_cf2b50() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cf2b50();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cf2b50();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cf2b50()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cf2b50();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cf2b50()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cf2b50();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.fxc.hlsl
index 902eae0..ee3e138 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCubeArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_cf2b50() {
+uint2 textureDimensions_cf2b50() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_cf2b50();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_cf2b50();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cf2b50()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_cf2b50();
+ prevent_dce.Store2(0u, asuint(textureDimensions_cf2b50()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_cf2b50();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.msl
index aa72617..e9903cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_cf2b50(texturecube_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_cf2b50(texturecube_array<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_cf2b50(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_cf2b50(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_cf2b50(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_cf2b50(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_cf2b50(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_cf2b50(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.spvasm
index a8b9101..32586f0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 51
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability SampledCubeArray
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,80 +22,106 @@
OpName %textureDimensions_cf2b50 "textureDimensions_cf2b50"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %32 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %35 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %37 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %47 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %53 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_cf2b50 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %32
+%textureDimensions_cf2b50 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %28 = OpLoad %11 %arg_0
- %29 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v3uint %28 %29
- %25 = OpVectorShuffle %v2uint %26 %26 0 1
- OpStore %res %25
- %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %36 = OpLoad %v2uint %res
- OpStore %35 %36
+ %30 = OpLoad %16 %arg_0
+ %31 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %30 %31
+ %27 = OpVectorShuffle %v2uint %28 %28 0 1
+ OpStore %res %27
+ %34 = OpLoad %v2uint %res
+ OpReturnValue %34
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %35
+ %38 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_cf2b50
+ OpStore %41 %42
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %37
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_cf2b50
- OpReturnValue %5
+%compute_main = OpFunction %void None %35
+ %44 = OpLabel
+ %45 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %46 = OpFunctionCall %v2uint %textureDimensions_cf2b50
+ OpStore %45 %46
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %43
+%vertex_main_inner = OpFunction %VertexOutput None %47
+ %50 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %53
+ %55 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %55 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_cf2b50
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %35
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_cf2b50
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %49 = OpLabel
- %50 = OpFunctionCall %void %textureDimensions_cf2b50
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.wgsl
index 681d13a..d32433b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/cf2b50.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_cube_array<f32>;
-fn textureDimensions_cf2b50() {
+fn textureDimensions_cf2b50() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_cf2b50();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_cf2b50();
+ prevent_dce = textureDimensions_cf2b50();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_cf2b50();
+ prevent_dce = textureDimensions_cf2b50();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_cf2b50();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl
index cff0f12..dd5c386 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32uint, read>;
// fn textureDimensions(texture: texture_storage_3d<rg32uint, read>) -> vec3<u32>
-fn textureDimensions_d0778e() {
+fn textureDimensions_d0778e() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d0778e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d0778e();
+ prevent_dce = textureDimensions_d0778e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d0778e();
+ prevent_dce = textureDimensions_d0778e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d0778e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.dxc.hlsl
index b9a0be5..ca5d8ac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d0778e() {
+uint3 textureDimensions_d0778e() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d0778e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d0778e();
+ prevent_dce.Store3(0u, asuint(textureDimensions_d0778e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d0778e();
+ prevent_dce.Store3(0u, asuint(textureDimensions_d0778e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d0778e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.fxc.hlsl
index b9a0be5..ca5d8ac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d0778e() {
+uint3 textureDimensions_d0778e() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d0778e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d0778e();
+ prevent_dce.Store3(0u, asuint(textureDimensions_d0778e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d0778e();
+ prevent_dce.Store3(0u, asuint(textureDimensions_d0778e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d0778e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.msl
index ba21125..d0c353b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d0778e(texture3d<uint, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_d0778e(texture3d<uint, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_d0778e(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_d0778e(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_d0778e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d0778e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d0778e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d0778e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.spvasm
index c32348d..f680ca8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d0778e "textureDimensions_d0778e"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d0778e = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_d0778e = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_d0778e
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_d0778e
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_d0778e
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_d0778e
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_d0778e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_d0778e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.wgsl
index 2abf5a7..a10ba76 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d0778e.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32uint, read>;
-fn textureDimensions_d0778e() {
+fn textureDimensions_d0778e() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d0778e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d0778e();
+ prevent_dce = textureDimensions_d0778e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d0778e();
+ prevent_dce = textureDimensions_d0778e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d0778e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl
index 822d2ed..b9dbe265 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba16sint, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba16sint, write>) -> u32
-fn textureDimensions_d08a94() {
+fn textureDimensions_d08a94() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d08a94();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_d08a94();
+ prevent_dce = textureDimensions_d08a94();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d08a94();
+ prevent_dce = textureDimensions_d08a94();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d08a94();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.dxc.hlsl
index f5931df..31182b0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d08a94() {
+uint textureDimensions_d08a94() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d08a94();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d08a94();
+ prevent_dce.Store(0u, asuint(textureDimensions_d08a94()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d08a94();
+ prevent_dce.Store(0u, asuint(textureDimensions_d08a94()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d08a94();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.fxc.hlsl
index f5931df..31182b0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d08a94() {
+uint textureDimensions_d08a94() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d08a94();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d08a94();
+ prevent_dce.Store(0u, asuint(textureDimensions_d08a94()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d08a94();
+ prevent_dce.Store(0u, asuint(textureDimensions_d08a94()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d08a94();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.glsl
index 3bda1a4..9cd4764 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16i) uniform highp writeonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_d08a94() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d08a94();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_d08a94() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_d08a94() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_d08a94();
+ prevent_dce.inner = textureDimensions_d08a94();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_d08a94() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_d08a94() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_d08a94();
+ prevent_dce.inner = textureDimensions_d08a94();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba16i) uniform highp writeonly iimage2D arg_0;
+uint textureDimensions_d08a94() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d08a94();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.msl
index 82f0a35..8258f0b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d08a94(texture1d<int, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_d08a94(texture1d<int, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_d08a94(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_d08a94(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_d08a94(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d08a94(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d08a94(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d08a94(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.spvasm
index 6093d3d..ac45bef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,73 +21,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d08a94 "textureDimensions_d08a94"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rgba16i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d08a94 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_d08a94 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_d08a94
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_d08a94
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_d08a94
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_d08a94
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_d08a94
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_d08a94
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.wgsl
index 0cac636..888c538 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d08a94.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba16sint, write>;
-fn textureDimensions_d08a94() {
+fn textureDimensions_d08a94() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d08a94();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_d08a94();
+ prevent_dce = textureDimensions_d08a94();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d08a94();
+ prevent_dce = textureDimensions_d08a94();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d08a94();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl
index 1279967..1fe56eb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<bgra8unorm, write>;
// fn textureDimensions(texture: texture_storage_2d_array<bgra8unorm, write>) -> vec2<u32>
-fn textureDimensions_d1b882() {
+fn textureDimensions_d1b882() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d1b882();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d1b882();
+ prevent_dce = textureDimensions_d1b882();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d1b882();
+ prevent_dce = textureDimensions_d1b882();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d1b882();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.dxc.hlsl
index ff86087..de29f86 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d1b882() {
+uint2 textureDimensions_d1b882() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d1b882();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d1b882();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d1b882()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d1b882();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d1b882()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d1b882();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.fxc.hlsl
index ff86087..de29f86 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d1b882() {
+uint2 textureDimensions_d1b882() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d1b882();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d1b882();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d1b882()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d1b882();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d1b882()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d1b882();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.glsl
index 64d0136..78480cb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_d1b882() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d1b882();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_d1b882() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d1b882() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_d1b882();
+ prevent_dce.inner = textureDimensions_d1b882();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_d1b882() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d1b882() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_d1b882();
+ prevent_dce.inner = textureDimensions_d1b882();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_d1b882() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d1b882();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.msl
index b1c60ce..07710f9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d1b882(texture2d_array<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_d1b882(texture2d_array<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_d1b882(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_d1b882(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_d1b882(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d1b882(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d1b882(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d1b882(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.spvasm
index 2bd4feb..23e91c7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d1b882 "textureDimensions_d1b882"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d1b882 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_d1b882 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_d1b882
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_d1b882
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_d1b882
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_d1b882
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_d1b882
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_d1b882
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.wgsl
index 12ace7e..232b617 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d1b882.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<bgra8unorm, write>;
-fn textureDimensions_d1b882() {
+fn textureDimensions_d1b882() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d1b882();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d1b882();
+ prevent_dce = textureDimensions_d1b882();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d1b882();
+ prevent_dce = textureDimensions_d1b882();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d1b882();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl
index 48a45ba..aa6062e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_depth_cube;
// fn textureDimensions(texture: texture_depth_cube, level: u32) -> vec2<u32>
-fn textureDimensions_d3accd() {
+fn textureDimensions_d3accd() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d3accd();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d3accd();
+ prevent_dce = textureDimensions_d3accd();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d3accd();
+ prevent_dce = textureDimensions_d3accd();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d3accd();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.dxc.hlsl
index 3fe9782..14362e8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
TextureCube arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d3accd() {
+uint2 textureDimensions_d3accd() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d3accd();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d3accd();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d3accd()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d3accd();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d3accd()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d3accd();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.fxc.hlsl
index 3fe9782..14362e8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
TextureCube arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d3accd() {
+uint2 textureDimensions_d3accd() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d3accd();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d3accd();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d3accd()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d3accd();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d3accd()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d3accd();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.glsl
index 09c662c..ea5ebd0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp samplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_d3accd() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d3accd();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_d3accd() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d3accd() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_d3accd();
+ prevent_dce.inner = textureDimensions_d3accd();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_d3accd() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d3accd() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_d3accd();
+ prevent_dce.inner = textureDimensions_d3accd();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp samplerCube arg_0_1;
+uvec2 textureDimensions_d3accd() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d3accd();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.msl
index 072f4ca..7661dfe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d3accd(depthcube<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_d3accd(depthcube<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depthcube<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_d3accd(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depthcube<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_d3accd(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depthcube<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_d3accd(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depthcube<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d3accd(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depthcube<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depthcube<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depthcube<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d3accd(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depthcube<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d3accd(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.spvasm
index 0c89a99..ea61f75 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,78 +21,104 @@
OpName %textureDimensions_d3accd "textureDimensions_d3accd"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %30 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_d3accd = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %30
+%textureDimensions_d3accd = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %v2uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %34 = OpLoad %v2uint %res
- OpStore %33 %34
+ %28 = OpLoad %16 %arg_0
+ %29 = OpLoad %uint %arg_1
+ %27 = OpImageQuerySizeLod %v2uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %v2uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_d3accd
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_d3accd
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %v2uint %textureDimensions_d3accd
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_d3accd
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_d3accd
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_d3accd
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.wgsl
index 0c02ac3..2be50fa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d3accd.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_depth_cube;
-fn textureDimensions_d3accd() {
+fn textureDimensions_d3accd() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d3accd();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d3accd();
+ prevent_dce = textureDimensions_d3accd();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d3accd();
+ prevent_dce = textureDimensions_d3accd();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d3accd();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl
index ad4ac26..52333f6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<bgra8unorm, read>;
// fn textureDimensions(texture: texture_storage_2d<bgra8unorm, read>) -> vec2<u32>
-fn textureDimensions_d44ac3() {
+fn textureDimensions_d44ac3() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d44ac3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d44ac3();
+ prevent_dce = textureDimensions_d44ac3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d44ac3();
+ prevent_dce = textureDimensions_d44ac3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d44ac3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.dxc.hlsl
index 08130cb..64a92d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d44ac3() {
+uint2 textureDimensions_d44ac3() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d44ac3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d44ac3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d44ac3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d44ac3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d44ac3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d44ac3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.fxc.hlsl
index 08130cb..64a92d2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d44ac3() {
+uint2 textureDimensions_d44ac3() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d44ac3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d44ac3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d44ac3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d44ac3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d44ac3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d44ac3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.glsl
index 325e43d..76e1323 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp readonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_d44ac3() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d44ac3();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_d44ac3() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d44ac3() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_d44ac3();
+ prevent_dce.inner = textureDimensions_d44ac3();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_d44ac3() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d44ac3() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_d44ac3();
+ prevent_dce.inner = textureDimensions_d44ac3();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp readonly image2D arg_0;
+uvec2 textureDimensions_d44ac3() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d44ac3();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.msl
index e11f740..2c854ac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d44ac3(texture2d<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_d44ac3(texture2d<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_d44ac3(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_d44ac3(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_d44ac3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d44ac3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d44ac3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d44ac3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.spvasm
index 66b60c7..ce6e0d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d44ac3 "textureDimensions_d44ac3"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d44ac3 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_d44ac3 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_d44ac3
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_d44ac3
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_d44ac3
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_d44ac3
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_d44ac3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_d44ac3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.wgsl
index f969d73..65cd17b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44ac3.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, read>;
-fn textureDimensions_d44ac3() {
+fn textureDimensions_d44ac3() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d44ac3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d44ac3();
+ prevent_dce = textureDimensions_d44ac3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d44ac3();
+ prevent_dce = textureDimensions_d44ac3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d44ac3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl
index db203a9..662404f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16uint, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba16uint, read>) -> vec2<u32>
-fn textureDimensions_d44dd1() {
+fn textureDimensions_d44dd1() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d44dd1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d44dd1();
+ prevent_dce = textureDimensions_d44dd1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d44dd1();
+ prevent_dce = textureDimensions_d44dd1();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d44dd1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.dxc.hlsl
index 33a6956..b3f51e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d44dd1() {
+uint2 textureDimensions_d44dd1() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d44dd1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d44dd1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d44dd1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d44dd1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d44dd1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d44dd1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.fxc.hlsl
index 33a6956..b3f51e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d44dd1() {
+uint2 textureDimensions_d44dd1() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d44dd1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d44dd1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d44dd1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d44dd1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d44dd1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d44dd1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.glsl
index f1f086b..ccbb3ae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp readonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_d44dd1() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d44dd1();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_d44dd1() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d44dd1() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_d44dd1();
+ prevent_dce.inner = textureDimensions_d44dd1();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_d44dd1() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d44dd1() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_d44dd1();
+ prevent_dce.inner = textureDimensions_d44dd1();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16ui) uniform highp readonly uimage2D arg_0;
+uvec2 textureDimensions_d44dd1() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d44dd1();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.msl
index a323bd4..1ad301c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d44dd1(texture2d<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_d44dd1(texture2d<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_d44dd1(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_d44dd1(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_d44dd1(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d44dd1(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d44dd1(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d44dd1(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.spvasm
index a027eff..8a0486a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d44dd1 "textureDimensions_d44dd1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d44dd1 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_d44dd1 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_d44dd1
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_d44dd1
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_d44dd1
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_d44dd1
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_d44dd1
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_d44dd1
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.wgsl
index fabe0a8..86898b6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d44dd1.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, read>;
-fn textureDimensions_d44dd1() {
+fn textureDimensions_d44dd1() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d44dd1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d44dd1();
+ prevent_dce = textureDimensions_d44dd1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d44dd1();
+ prevent_dce = textureDimensions_d44dd1();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d44dd1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl
index 0d7b053..b44940f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32float, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32float, write>) -> vec2<u32>
-fn textureDimensions_d63c28() {
+fn textureDimensions_d63c28() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d63c28();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d63c28();
+ prevent_dce = textureDimensions_d63c28();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d63c28();
+ prevent_dce = textureDimensions_d63c28();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d63c28();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.dxc.hlsl
index ad62aaa..412ee2d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d63c28() {
+uint2 textureDimensions_d63c28() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d63c28();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d63c28();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d63c28()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d63c28();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d63c28()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d63c28();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.fxc.hlsl
index ad62aaa..412ee2d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d63c28() {
+uint2 textureDimensions_d63c28() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d63c28();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d63c28();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d63c28()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d63c28();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d63c28()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d63c28();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.glsl
index 654471d..dc81af5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_d63c28() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d63c28();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_d63c28() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d63c28() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_d63c28();
+ prevent_dce.inner = textureDimensions_d63c28();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_d63c28() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d63c28() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_d63c28();
+ prevent_dce.inner = textureDimensions_d63c28();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_d63c28() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d63c28();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.msl
index c224f98..41eec67 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d63c28(texture2d_array<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_d63c28(texture2d_array<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_d63c28(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_d63c28(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_d63c28(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d63c28(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d63c28(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d63c28(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.spvasm
index b8bafbb..4e0b61b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d63c28 "textureDimensions_d63c28"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d63c28 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_d63c28 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_d63c28
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_d63c28
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_d63c28
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_d63c28
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_d63c28
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_d63c28
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.wgsl
index 591ab9c..7808717 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d63c28.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32float, write>;
-fn textureDimensions_d63c28() {
+fn textureDimensions_d63c28() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d63c28();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d63c28();
+ prevent_dce = textureDimensions_d63c28();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d63c28();
+ prevent_dce = textureDimensions_d63c28();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d63c28();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl
index b62ad75..a7a8b3a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32sint, read>;
// fn textureDimensions(texture: texture_storage_2d<r32sint, read>) -> vec2<u32>
-fn textureDimensions_d6f3cf() {
+fn textureDimensions_d6f3cf() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d6f3cf();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d6f3cf();
+ prevent_dce = textureDimensions_d6f3cf();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d6f3cf();
+ prevent_dce = textureDimensions_d6f3cf();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d6f3cf();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.dxc.hlsl
index 340f642..a033a2fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d6f3cf() {
+uint2 textureDimensions_d6f3cf() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d6f3cf();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d6f3cf();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d6f3cf()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d6f3cf();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d6f3cf()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d6f3cf();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.fxc.hlsl
index 340f642..a033a2fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d6f3cf() {
+uint2 textureDimensions_d6f3cf() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d6f3cf();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d6f3cf();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d6f3cf()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d6f3cf();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d6f3cf()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d6f3cf();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.glsl
index bf4599a..75f9761 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32i) uniform highp readonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_d6f3cf() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d6f3cf();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_d6f3cf() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d6f3cf() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_d6f3cf();
+ prevent_dce.inner = textureDimensions_d6f3cf();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_d6f3cf() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d6f3cf() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_d6f3cf();
+ prevent_dce.inner = textureDimensions_d6f3cf();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_d6f3cf() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d6f3cf();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.msl
index de74a3d..84d835b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d6f3cf(texture2d<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_d6f3cf(texture2d<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_d6f3cf(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_d6f3cf(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_d6f3cf(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d6f3cf(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d6f3cf(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d6f3cf(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.spvasm
index deb9d9c..2fad971 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d6f3cf "textureDimensions_d6f3cf"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d6f3cf = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_d6f3cf = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_d6f3cf
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_d6f3cf
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_d6f3cf
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_d6f3cf
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_d6f3cf
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_d6f3cf
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.wgsl
index 6341b52..d9cd7e2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d6f3cf.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32sint, read>;
-fn textureDimensions_d6f3cf() {
+fn textureDimensions_d6f3cf() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d6f3cf();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d6f3cf();
+ prevent_dce = textureDimensions_d6f3cf();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d6f3cf();
+ prevent_dce = textureDimensions_d6f3cf();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d6f3cf();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl
index 1c3fc0b..f27fc8d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32uint, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba32uint, write>) -> vec2<u32>
-fn textureDimensions_d8ba68() {
+fn textureDimensions_d8ba68() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d8ba68();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d8ba68();
+ prevent_dce = textureDimensions_d8ba68();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d8ba68();
+ prevent_dce = textureDimensions_d8ba68();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d8ba68();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.dxc.hlsl
index 34b635c..0e19753 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d8ba68() {
+uint2 textureDimensions_d8ba68() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d8ba68();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d8ba68();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d8ba68()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d8ba68();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d8ba68()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d8ba68();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.fxc.hlsl
index 34b635c..0e19753 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d8ba68() {
+uint2 textureDimensions_d8ba68() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d8ba68();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d8ba68();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d8ba68()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d8ba68();
+ prevent_dce.Store2(0u, asuint(textureDimensions_d8ba68()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d8ba68();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.glsl
index c515074..f6634dc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_d8ba68() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d8ba68();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_d8ba68() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d8ba68() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_d8ba68();
+ prevent_dce.inner = textureDimensions_d8ba68();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_d8ba68() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_d8ba68() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_d8ba68();
+ prevent_dce.inner = textureDimensions_d8ba68();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_d8ba68() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d8ba68();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.msl
index f2039a8..e408deb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d8ba68(texture2d<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_d8ba68(texture2d<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_d8ba68(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_d8ba68(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_d8ba68(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d8ba68(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d8ba68(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d8ba68(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.spvasm
index afb1900..5d67022 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d8ba68 "textureDimensions_d8ba68"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d8ba68 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_d8ba68 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_d8ba68
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_d8ba68
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_d8ba68
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_d8ba68
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_d8ba68
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_d8ba68
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.wgsl
index dbd0a97..ecf650c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8ba68.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32uint, write>;
-fn textureDimensions_d8ba68() {
+fn textureDimensions_d8ba68() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d8ba68();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d8ba68();
+ prevent_dce = textureDimensions_d8ba68();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d8ba68();
+ prevent_dce = textureDimensions_d8ba68();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d8ba68();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl
index 7119145..3b383f2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8uint, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba8uint, write>) -> vec3<u32>
-fn textureDimensions_d8f887() {
+fn textureDimensions_d8f887() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d8f887();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d8f887();
+ prevent_dce = textureDimensions_d8f887();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d8f887();
+ prevent_dce = textureDimensions_d8f887();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d8f887();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.dxc.hlsl
index ce1c1d6..1c167d6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d8f887() {
+uint3 textureDimensions_d8f887() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d8f887();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d8f887();
+ prevent_dce.Store3(0u, asuint(textureDimensions_d8f887()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d8f887();
+ prevent_dce.Store3(0u, asuint(textureDimensions_d8f887()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d8f887();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.fxc.hlsl
index ce1c1d6..1c167d6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_d8f887() {
+uint3 textureDimensions_d8f887() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_d8f887();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_d8f887();
+ prevent_dce.Store3(0u, asuint(textureDimensions_d8f887()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_d8f887();
+ prevent_dce.Store3(0u, asuint(textureDimensions_d8f887()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_d8f887();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.glsl
index 573658f..6cb4f4d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8ui) uniform highp writeonly uimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_d8f887() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_d8f887();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_d8f887() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_d8f887() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_d8f887();
+ prevent_dce.inner = textureDimensions_d8f887();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_d8f887() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_d8f887() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_d8f887();
+ prevent_dce.inner = textureDimensions_d8f887();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8ui) uniform highp writeonly uimage3D arg_0;
+uvec3 textureDimensions_d8f887() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_d8f887();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.msl
index 59e81b7..a45521c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_d8f887(texture3d<uint, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_d8f887(texture3d<uint, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_d8f887(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_d8f887(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_d8f887(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_d8f887(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_d8f887(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_d8f887(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.spvasm
index 2ad5ae1..92beeb2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_d8f887 "textureDimensions_d8f887"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_d8f887 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_d8f887 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_d8f887
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_d8f887
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_d8f887
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_d8f887
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_d8f887
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_d8f887
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.wgsl
index e4b5681..489e016 100644
--- a/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/d8f887.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8uint, write>;
-fn textureDimensions_d8f887() {
+fn textureDimensions_d8f887() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_d8f887();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_d8f887();
+ prevent_dce = textureDimensions_d8f887();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_d8f887();
+ prevent_dce = textureDimensions_d8f887();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_d8f887();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl
index 475ebf5..84a0a55 100644
--- a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32float, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba32float, write>) -> u32
-fn textureDimensions_da30d2() {
+fn textureDimensions_da30d2() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_da30d2();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_da30d2();
+ prevent_dce = textureDimensions_da30d2();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_da30d2();
+ prevent_dce = textureDimensions_da30d2();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_da30d2();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.dxc.hlsl
index a572135..f27e22a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_da30d2() {
+uint textureDimensions_da30d2() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_da30d2();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_da30d2();
+ prevent_dce.Store(0u, asuint(textureDimensions_da30d2()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_da30d2();
+ prevent_dce.Store(0u, asuint(textureDimensions_da30d2()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_da30d2();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.fxc.hlsl
index a572135..f27e22a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_da30d2() {
+uint textureDimensions_da30d2() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_da30d2();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_da30d2();
+ prevent_dce.Store(0u, asuint(textureDimensions_da30d2()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_da30d2();
+ prevent_dce.Store(0u, asuint(textureDimensions_da30d2()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_da30d2();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.glsl
index 86bc7d5..8f00c5f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_da30d2() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_da30d2();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_da30d2() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_da30d2() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_da30d2();
+ prevent_dce.inner = textureDimensions_da30d2();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_da30d2() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_da30d2() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_da30d2();
+ prevent_dce.inner = textureDimensions_da30d2();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_da30d2() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_da30d2();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.msl
index 038402e..b0c0274 100644
--- a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_da30d2(texture1d<float, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_da30d2(texture1d<float, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_da30d2(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_da30d2(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_da30d2(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_da30d2(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_da30d2(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_da30d2(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.spvasm
index 723c3be..39e2fc5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_da30d2 "textureDimensions_da30d2"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_da30d2 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_da30d2 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_da30d2
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_da30d2
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_da30d2
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_da30d2
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_da30d2
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_da30d2
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.wgsl
index 1e14937..21783ce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/da30d2.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32float, write>;
-fn textureDimensions_da30d2() {
+fn textureDimensions_da30d2() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_da30d2();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_da30d2();
+ prevent_dce = textureDimensions_da30d2();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_da30d2();
+ prevent_dce = textureDimensions_da30d2();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_da30d2();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl
index 4de0704..1538284 100644
--- a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16float, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16float, read>) -> vec2<u32>
-fn textureDimensions_daf0fe() {
+fn textureDimensions_daf0fe() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_daf0fe();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_daf0fe();
+ prevent_dce = textureDimensions_daf0fe();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_daf0fe();
+ prevent_dce = textureDimensions_daf0fe();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_daf0fe();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.dxc.hlsl
index 5a0e928..171b8aa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_daf0fe() {
+uint2 textureDimensions_daf0fe() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_daf0fe();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_daf0fe();
+ prevent_dce.Store2(0u, asuint(textureDimensions_daf0fe()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_daf0fe();
+ prevent_dce.Store2(0u, asuint(textureDimensions_daf0fe()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_daf0fe();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.fxc.hlsl
index 5a0e928..171b8aa 100644
--- a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_daf0fe() {
+uint2 textureDimensions_daf0fe() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_daf0fe();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_daf0fe();
+ prevent_dce.Store2(0u, asuint(textureDimensions_daf0fe()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_daf0fe();
+ prevent_dce.Store2(0u, asuint(textureDimensions_daf0fe()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_daf0fe();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.glsl
index 1e8a60d..12ce36e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp readonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_daf0fe() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_daf0fe();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_daf0fe() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_daf0fe() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_daf0fe();
+ prevent_dce.inner = textureDimensions_daf0fe();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_daf0fe() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_daf0fe() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_daf0fe();
+ prevent_dce.inner = textureDimensions_daf0fe();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16f) uniform highp readonly image2DArray arg_0;
+uvec2 textureDimensions_daf0fe() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_daf0fe();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.msl
index 75a9896..53d8a37 100644
--- a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_daf0fe(texture2d_array<float, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_daf0fe(texture2d_array<float, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_daf0fe(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_daf0fe(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_daf0fe(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_daf0fe(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_daf0fe(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_daf0fe(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.spvasm
index 5f9383b..1add129 100644
--- a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_daf0fe "textureDimensions_daf0fe"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_daf0fe = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_daf0fe = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_daf0fe
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_daf0fe
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_daf0fe
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_daf0fe
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_daf0fe
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_daf0fe
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.wgsl
index 50df2fd..3d53375 100644
--- a/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/daf0fe.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, read>;
-fn textureDimensions_daf0fe() {
+fn textureDimensions_daf0fe() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_daf0fe();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_daf0fe();
+ prevent_dce = textureDimensions_daf0fe();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_daf0fe();
+ prevent_dce = textureDimensions_daf0fe();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_daf0fe();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl
index f532000..d7fb3cc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32sint, read>;
// fn textureDimensions(texture: texture_storage_3d<r32sint, read>) -> vec3<u32>
-fn textureDimensions_db7131() {
+fn textureDimensions_db7131() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_db7131();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_db7131();
+ prevent_dce = textureDimensions_db7131();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_db7131();
+ prevent_dce = textureDimensions_db7131();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_db7131();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.dxc.hlsl
index 78ec4e2..5958b23 100644
--- a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_db7131() {
+uint3 textureDimensions_db7131() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_db7131();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_db7131();
+ prevent_dce.Store3(0u, asuint(textureDimensions_db7131()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_db7131();
+ prevent_dce.Store3(0u, asuint(textureDimensions_db7131()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_db7131();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.fxc.hlsl
index 78ec4e2..5958b23 100644
--- a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_db7131() {
+uint3 textureDimensions_db7131() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_db7131();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_db7131();
+ prevent_dce.Store3(0u, asuint(textureDimensions_db7131()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_db7131();
+ prevent_dce.Store3(0u, asuint(textureDimensions_db7131()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_db7131();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.glsl
index a04d1f2..51a4f68 100644
--- a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32i) uniform highp readonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_db7131() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_db7131();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_db7131() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_db7131() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_db7131();
+ prevent_dce.inner = textureDimensions_db7131();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_db7131() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_db7131() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_db7131();
+ prevent_dce.inner = textureDimensions_db7131();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_db7131() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_db7131();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.msl
index de00680..538158c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_db7131(texture3d<int, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_db7131(texture3d<int, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_db7131(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_db7131(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_db7131(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_db7131(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_db7131(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_db7131(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.spvasm
index 1f15e73..8d8f5ee 100644
--- a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_db7131 "textureDimensions_db7131"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_db7131 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_db7131 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_db7131
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_db7131
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_db7131
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_db7131
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_db7131
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_db7131
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.wgsl
index ca5f987..0800e9b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/db7131.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, read>;
-fn textureDimensions_db7131() {
+fn textureDimensions_db7131() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_db7131();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_db7131();
+ prevent_dce = textureDimensions_db7131();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_db7131();
+ prevent_dce = textureDimensions_db7131();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_db7131();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl
index 1f330a7..4a8977a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32uint, write>;
// fn textureDimensions(texture: texture_storage_2d<r32uint, write>) -> vec2<u32>
-fn textureDimensions_dc83ce() {
+fn textureDimensions_dc83ce() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_dc83ce();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_dc83ce();
+ prevent_dce = textureDimensions_dc83ce();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_dc83ce();
+ prevent_dce = textureDimensions_dc83ce();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_dc83ce();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.dxc.hlsl
index adf5945..5adb251 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_dc83ce() {
+uint2 textureDimensions_dc83ce() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_dc83ce();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_dc83ce();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dc83ce()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_dc83ce();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dc83ce()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_dc83ce();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.fxc.hlsl
index adf5945..5adb251 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_dc83ce() {
+uint2 textureDimensions_dc83ce() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_dc83ce();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_dc83ce();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dc83ce()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_dc83ce();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dc83ce()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_dc83ce();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.glsl
index 19a83e4..5c0deb4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_dc83ce() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_dc83ce();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_dc83ce() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_dc83ce() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_dc83ce();
+ prevent_dce.inner = textureDimensions_dc83ce();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_dc83ce() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_dc83ce() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_dc83ce();
+ prevent_dce.inner = textureDimensions_dc83ce();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_dc83ce() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_dc83ce();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.msl
index b1b28d9..dfff5ef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_dc83ce(texture2d<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_dc83ce(texture2d<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_dc83ce(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_dc83ce(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_dc83ce(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_dc83ce(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_dc83ce(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_dc83ce(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.spvasm
index 0312cb1..207784e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_dc83ce "textureDimensions_dc83ce"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_dc83ce = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_dc83ce = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_dc83ce
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_dc83ce
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_dc83ce
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_dc83ce
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_dc83ce
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_dc83ce
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.wgsl
index 1de7869..5b0091c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dc83ce.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, write>;
-fn textureDimensions_dc83ce() {
+fn textureDimensions_dc83ce() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_dc83ce();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_dc83ce();
+ prevent_dce = textureDimensions_dc83ce();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_dc83ce();
+ prevent_dce = textureDimensions_dc83ce();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_dc83ce();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl
index 83f163f..834e373 100644
--- a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32uint, read>;
// fn textureDimensions(texture: texture_storage_1d<r32uint, read>) -> u32
-fn textureDimensions_de03c6() {
+fn textureDimensions_de03c6() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_de03c6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_de03c6();
+ prevent_dce = textureDimensions_de03c6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_de03c6();
+ prevent_dce = textureDimensions_de03c6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_de03c6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.dxc.hlsl
index 4dc7a62..811e528 100644
--- a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_de03c6() {
+uint textureDimensions_de03c6() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_de03c6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_de03c6();
+ prevent_dce.Store(0u, asuint(textureDimensions_de03c6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_de03c6();
+ prevent_dce.Store(0u, asuint(textureDimensions_de03c6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_de03c6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.fxc.hlsl
index 4dc7a62..811e528 100644
--- a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_de03c6() {
+uint textureDimensions_de03c6() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_de03c6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_de03c6();
+ prevent_dce.Store(0u, asuint(textureDimensions_de03c6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_de03c6();
+ prevent_dce.Store(0u, asuint(textureDimensions_de03c6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_de03c6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.glsl
index f46e8eb..8431c85 100644
--- a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp readonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_de03c6() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_de03c6();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_de03c6() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_de03c6() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_de03c6();
+ prevent_dce.inner = textureDimensions_de03c6();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_de03c6() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_de03c6() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_de03c6();
+ prevent_dce.inner = textureDimensions_de03c6();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32ui) uniform highp readonly uimage2D arg_0;
+uint textureDimensions_de03c6() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_de03c6();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.msl
index 4d09530..157358a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_de03c6(texture1d<uint, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_de03c6(texture1d<uint, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_de03c6(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_de03c6(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_de03c6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_de03c6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_de03c6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_de03c6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.spvasm
index b292353..c7be630 100644
--- a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_de03c6 "textureDimensions_de03c6"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 R32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_de03c6 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_de03c6 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_de03c6
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_de03c6
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_de03c6
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_de03c6
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_de03c6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_de03c6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.wgsl
index e9b9c37..6882472 100644
--- a/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/de03c6.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32uint, read>;
-fn textureDimensions_de03c6() {
+fn textureDimensions_de03c6() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_de03c6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_de03c6();
+ prevent_dce = textureDimensions_de03c6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_de03c6();
+ prevent_dce = textureDimensions_de03c6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_de03c6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl
index 859e630..e2c655a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16float, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba16float, read_write>) -> vec3<u32>
-fn textureDimensions_deb3c0() {
+fn textureDimensions_deb3c0() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_deb3c0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_deb3c0();
+ prevent_dce = textureDimensions_deb3c0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_deb3c0();
+ prevent_dce = textureDimensions_deb3c0();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_deb3c0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.dxc.hlsl
index f6fbf45..37709b0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_deb3c0() {
+uint3 textureDimensions_deb3c0() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_deb3c0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_deb3c0();
+ prevent_dce.Store3(0u, asuint(textureDimensions_deb3c0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_deb3c0();
+ prevent_dce.Store3(0u, asuint(textureDimensions_deb3c0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_deb3c0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.fxc.hlsl
index f6fbf45..37709b0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_deb3c0() {
+uint3 textureDimensions_deb3c0() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_deb3c0();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_deb3c0();
+ prevent_dce.Store3(0u, asuint(textureDimensions_deb3c0()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_deb3c0();
+ prevent_dce.Store3(0u, asuint(textureDimensions_deb3c0()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_deb3c0();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.glsl
index 89338e8..22d3c2f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16f) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_deb3c0() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_deb3c0();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_deb3c0() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_deb3c0() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_deb3c0();
+ prevent_dce.inner = textureDimensions_deb3c0();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_deb3c0() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_deb3c0() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_deb3c0();
+ prevent_dce.inner = textureDimensions_deb3c0();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_deb3c0() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_deb3c0();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.msl
index e4fe78d..a1787f7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_deb3c0(texture3d<float, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_deb3c0(texture3d<float, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_deb3c0(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_deb3c0(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_deb3c0(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_deb3c0(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_deb3c0(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_deb3c0(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.spvasm
index e46800c..776cd7e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_deb3c0 "textureDimensions_deb3c0"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_deb3c0 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_deb3c0 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_deb3c0
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_deb3c0
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_deb3c0
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_deb3c0
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_deb3c0
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_deb3c0
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.wgsl
index 1ed871c..a975fca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/deb3c0.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, read_write>;
-fn textureDimensions_deb3c0() {
+fn textureDimensions_deb3c0() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_deb3c0();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_deb3c0();
+ prevent_dce = textureDimensions_deb3c0();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_deb3c0();
+ prevent_dce = textureDimensions_deb3c0();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_deb3c0();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl
index 5e05d8e..0e6c451 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8snorm, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba8snorm, write>) -> vec2<u32>
-fn textureDimensions_dee461() {
+fn textureDimensions_dee461() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_dee461();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_dee461();
+ prevent_dce = textureDimensions_dee461();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_dee461();
+ prevent_dce = textureDimensions_dee461();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_dee461();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.dxc.hlsl
index f2188bc..5c25817 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_dee461() {
+uint2 textureDimensions_dee461() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_dee461();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_dee461();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dee461()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_dee461();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dee461()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_dee461();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.fxc.hlsl
index f2188bc..5c25817 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_dee461() {
+uint2 textureDimensions_dee461() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_dee461();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_dee461();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dee461()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_dee461();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dee461()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_dee461();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.glsl
index 3b854c3..03f60fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_dee461() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_dee461();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_dee461() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_dee461() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_dee461();
+ prevent_dce.inner = textureDimensions_dee461();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_dee461() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_dee461() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_dee461();
+ prevent_dce.inner = textureDimensions_dee461();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_dee461() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_dee461();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.msl
index a454b79..4044b0c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_dee461(texture2d<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_dee461(texture2d<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_dee461(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_dee461(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_dee461(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_dee461(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_dee461(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_dee461(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.spvasm
index 455ffbb..61e1ce8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_dee461 "textureDimensions_dee461"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_dee461 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_dee461 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_dee461
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_dee461
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_dee461
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_dee461
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_dee461
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_dee461
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.wgsl
index 31785c9..abdc467 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dee461.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8snorm, write>;
-fn textureDimensions_dee461() {
+fn textureDimensions_dee461() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_dee461();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_dee461();
+ prevent_dce = textureDimensions_dee461();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_dee461();
+ prevent_dce = textureDimensions_dee461();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_dee461();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl
index c41fa0e..c3e83fe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_depth_2d_array;
// fn textureDimensions(texture: texture_depth_2d_array, level: i32) -> vec2<u32>
-fn textureDimensions_dfdc32() {
+fn textureDimensions_dfdc32() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_dfdc32();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_dfdc32();
+ prevent_dce = textureDimensions_dfdc32();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_dfdc32();
+ prevent_dce = textureDimensions_dfdc32();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_dfdc32();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.dxc.hlsl
index d63177f..55a904b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_dfdc32() {
+uint2 textureDimensions_dfdc32() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_dfdc32();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_dfdc32();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dfdc32()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_dfdc32();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dfdc32()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_dfdc32();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.fxc.hlsl
index d63177f..55a904b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_dfdc32() {
+uint2 textureDimensions_dfdc32() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_dfdc32();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_dfdc32();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dfdc32()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_dfdc32();
+ prevent_dce.Store2(0u, asuint(textureDimensions_dfdc32()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_dfdc32();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.glsl
index 94165a3..56fd81e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_dfdc32() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_dfdc32();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_dfdc32() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_dfdc32() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_dfdc32();
+ prevent_dce.inner = textureDimensions_dfdc32();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_dfdc32() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_dfdc32() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_dfdc32();
+ prevent_dce.inner = textureDimensions_dfdc32();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_dfdc32() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_dfdc32();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.msl
index 46e6dcd..28f8113 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_dfdc32(depth2d_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_dfdc32(depth2d_array<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depth2d_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_dfdc32(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depth2d_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_dfdc32(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depth2d_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_dfdc32(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depth2d_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_dfdc32(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depth2d_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depth2d_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depth2d_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_dfdc32(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depth2d_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_dfdc32(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.spvasm
index 0fe4d8a..e76f118 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 67
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,81 +21,108 @@
OpName %textureDimensions_dfdc32 "textureDimensions_dfdc32"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_dfdc32 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_dfdc32 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %int %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %int %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_dfdc32
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_dfdc32
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_dfdc32
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %58 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %59 = OpFunctionCall %v2uint %textureDimensions_dfdc32
+ OpStore %58 %59
+ %60 = OpLoad %VertexOutput %out
+ OpReturnValue %60
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %62 = OpLabel
+ %63 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %64 = OpCompositeExtract %v4float %63 0
+ OpStore %pos_1 %64
+ %65 = OpCompositeExtract %v2uint %63 1
+ OpStore %prevent_dce_1 %65
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_dfdc32
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_dfdc32
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.wgsl
index 8764cdd..6475a60 100644
--- a/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/dfdc32.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
-fn textureDimensions_dfdc32() {
+fn textureDimensions_dfdc32() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_dfdc32();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_dfdc32();
+ prevent_dce = textureDimensions_dfdc32();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_dfdc32();
+ prevent_dce = textureDimensions_dfdc32();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_dfdc32();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl
index 94fb6dc..f80c9cd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8snorm, write>;
// fn textureDimensions(texture: texture_storage_1d<rgba8snorm, write>) -> u32
-fn textureDimensions_e122fe() {
+fn textureDimensions_e122fe() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e122fe();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_e122fe();
+ prevent_dce = textureDimensions_e122fe();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e122fe();
+ prevent_dce = textureDimensions_e122fe();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e122fe();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.dxc.hlsl
index 28f17a2..d4191a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e122fe() {
+uint textureDimensions_e122fe() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e122fe();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e122fe();
+ prevent_dce.Store(0u, asuint(textureDimensions_e122fe()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e122fe();
+ prevent_dce.Store(0u, asuint(textureDimensions_e122fe()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e122fe();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.fxc.hlsl
index 28f17a2..d4191a2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e122fe() {
+uint textureDimensions_e122fe() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e122fe();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e122fe();
+ prevent_dce.Store(0u, asuint(textureDimensions_e122fe()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e122fe();
+ prevent_dce.Store(0u, asuint(textureDimensions_e122fe()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e122fe();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.glsl
index d26b1a0..1cb6a790 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_e122fe() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_e122fe();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uint textureDimensions_e122fe() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_e122fe() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_e122fe();
+ prevent_dce.inner = textureDimensions_e122fe();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uint textureDimensions_e122fe() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_e122fe() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_e122fe();
+ prevent_dce.inner = textureDimensions_e122fe();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8_snorm) uniform highp writeonly image2D arg_0;
+uint textureDimensions_e122fe() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_e122fe();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.msl
index 05dd1ad..a6869f9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e122fe(texture1d<float, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_e122fe(texture1d<float, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_e122fe(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_e122fe(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_e122fe(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e122fe(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e122fe(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e122fe(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.spvasm
index b04e33a..440015c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_e122fe "textureDimensions_e122fe"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_e122fe = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_e122fe = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_e122fe
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_e122fe
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_e122fe
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_e122fe
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_e122fe
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_e122fe
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.wgsl
index bc6ffa1..23f199c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e122fe.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8snorm, write>;
-fn textureDimensions_e122fe() {
+fn textureDimensions_e122fe() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e122fe();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_e122fe();
+ prevent_dce = textureDimensions_e122fe();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e122fe();
+ prevent_dce = textureDimensions_e122fe();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e122fe();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl
index 2177e29..5cbff1c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d<u32>;
// fn textureDimensions(texture: texture_2d<u32>, level: u32) -> vec2<u32>
-fn textureDimensions_e18a8b() {
+fn textureDimensions_e18a8b() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e18a8b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e18a8b();
+ prevent_dce = textureDimensions_e18a8b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e18a8b();
+ prevent_dce = textureDimensions_e18a8b();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e18a8b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.dxc.hlsl
index 922f08a..cafa854 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e18a8b() {
+uint2 textureDimensions_e18a8b() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e18a8b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e18a8b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e18a8b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e18a8b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e18a8b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e18a8b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.fxc.hlsl
index 922f08a..cafa854 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e18a8b() {
+uint2 textureDimensions_e18a8b() {
uint arg_1 = 1u;
uint3 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e18a8b();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e18a8b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e18a8b()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e18a8b();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e18a8b()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e18a8b();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.glsl
index 68e3cab..2f410a1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp usampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_e18a8b() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_e18a8b();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_e18a8b() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e18a8b() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_e18a8b();
+ prevent_dce.inner = textureDimensions_e18a8b();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_e18a8b() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e18a8b() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_e18a8b();
+ prevent_dce.inner = textureDimensions_e18a8b();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usampler2D arg_0_1;
+uvec2 textureDimensions_e18a8b() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_e18a8b();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.msl
index 100e21b..d315080 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e18a8b(texture2d<uint, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_e18a8b(texture2d<uint, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_e18a8b(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_e18a8b(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_e18a8b(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e18a8b(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e18a8b(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e18a8b(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.spvasm
index 3b9fc73..e712e21 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 63
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,78 +21,104 @@
OpName %textureDimensions_e18a8b "textureDimensions_e18a8b"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %30 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_e18a8b = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %30
+%textureDimensions_e18a8b = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %uint %arg_1
- %25 = OpImageQuerySizeLod %v2uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %34 = OpLoad %v2uint %res
- OpStore %33 %34
+ %28 = OpLoad %16 %arg_0
+ %29 = OpLoad %uint %arg_1
+ %27 = OpImageQuerySizeLod %v2uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %v2uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_e18a8b
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_e18a8b
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %v2uint %textureDimensions_e18a8b
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %54 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %55 = OpFunctionCall %v2uint %textureDimensions_e18a8b
+ OpStore %54 %55
+ %56 = OpLoad %VertexOutput %out
+ OpReturnValue %56
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %58 = OpLabel
+ %59 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %60 = OpCompositeExtract %v4float %59 0
+ OpStore %pos_1 %60
+ %61 = OpCompositeExtract %v2uint %59 1
+ OpStore %prevent_dce_1 %61
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_e18a8b
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_e18a8b
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.wgsl
index 471562b..7aa23ec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e18a8b.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d<u32>;
-fn textureDimensions_e18a8b() {
+fn textureDimensions_e18a8b() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e18a8b();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e18a8b();
+ prevent_dce = textureDimensions_e18a8b();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e18a8b();
+ prevent_dce = textureDimensions_e18a8b();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e18a8b();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl
index f2dd449..d2bef25 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_multisampled_2d<u32>;
// fn textureDimensions(texture: texture_multisampled_2d<u32>) -> vec2<u32>
-fn textureDimensions_e4bfd2() {
+fn textureDimensions_e4bfd2() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e4bfd2();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e4bfd2();
+ prevent_dce = textureDimensions_e4bfd2();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e4bfd2();
+ prevent_dce = textureDimensions_e4bfd2();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e4bfd2();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.dxc.hlsl
index 8fb42ec..3483f11 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DMS<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e4bfd2() {
+uint2 textureDimensions_e4bfd2() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e4bfd2();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e4bfd2();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4bfd2()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e4bfd2();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4bfd2()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e4bfd2();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.fxc.hlsl
index 8fb42ec..3483f11 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DMS<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e4bfd2() {
+uint2 textureDimensions_e4bfd2() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e4bfd2();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e4bfd2();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4bfd2()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e4bfd2();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4bfd2()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e4bfd2();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.glsl
index 59574ef..3627cd0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp usampler2DMS arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_e4bfd2() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_e4bfd2();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler2DMS arg_0_1;
+uvec2 textureDimensions_e4bfd2() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e4bfd2() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_e4bfd2();
+ prevent_dce.inner = textureDimensions_e4bfd2();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp usampler2DMS arg_0_1;
+uvec2 textureDimensions_e4bfd2() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e4bfd2() {
- uvec2 res = uvec2(textureSize(arg_0_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_e4bfd2();
+ prevent_dce.inner = textureDimensions_e4bfd2();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp usampler2DMS arg_0_1;
+uvec2 textureDimensions_e4bfd2() {
+ uvec2 res = uvec2(textureSize(arg_0_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_e4bfd2();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.msl
index 5221d3f..aa9fef6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e4bfd2(texture2d_ms<uint, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_e4bfd2(texture2d_ms<uint, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_ms<uint, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_e4bfd2(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_ms<uint, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_e4bfd2(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_ms<uint, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_e4bfd2(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_ms<uint, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e4bfd2(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_ms<uint, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_ms<uint, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_ms<uint, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e4bfd2(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_ms<uint, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e4bfd2(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.spvasm
index 0ea8c85..ffc5e8e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_e4bfd2 "textureDimensions_e4bfd2"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 1 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 1 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_e4bfd2 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_e4bfd2 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_e4bfd2
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_e4bfd2
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_e4bfd2
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_e4bfd2
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_e4bfd2
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_e4bfd2
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.wgsl
index 8e7e5ef..0b3368c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4bfd2.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_multisampled_2d<u32>;
-fn textureDimensions_e4bfd2() {
+fn textureDimensions_e4bfd2() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e4bfd2();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e4bfd2();
+ prevent_dce = textureDimensions_e4bfd2();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e4bfd2();
+ prevent_dce = textureDimensions_e4bfd2();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e4bfd2();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl
index 71422c4..754c902 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d_array<i32>;
// fn textureDimensions(texture: texture_2d_array<i32>, level: u32) -> vec2<u32>
-fn textureDimensions_e4e310() {
+fn textureDimensions_e4e310() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e4e310();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e4e310();
+ prevent_dce = textureDimensions_e4e310();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e4e310();
+ prevent_dce = textureDimensions_e4e310();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e4e310();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.dxc.hlsl
index cd5f3c2..fee675a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e4e310() {
+uint2 textureDimensions_e4e310() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e4e310();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e4e310();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4e310()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e4e310();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4e310()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e4e310();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.fxc.hlsl
index cd5f3c2..fee675a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e4e310() {
+uint2 textureDimensions_e4e310() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e4e310();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e4e310();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4e310()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e4e310();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4e310()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e4e310();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.glsl
index 4061e4a..915a395 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_e4e310() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_e4e310();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_e4e310() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e4e310() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_e4e310();
+ prevent_dce.inner = textureDimensions_e4e310();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_e4e310() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e4e310() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_e4e310();
+ prevent_dce.inner = textureDimensions_e4e310();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_e4e310() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_e4e310();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.msl
index 5c2fb08..ec3b270 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e4e310(texture2d_array<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_e4e310(texture2d_array<int, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_e4e310(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_e4e310(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_e4e310(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e4e310(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e4e310(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e4e310(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.spvasm
index a7dd321..a0bf7a1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 66
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,81 +21,107 @@
OpName %textureDimensions_e4e310 "textureDimensions_e4e310"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %27 = OpConstantNull %uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_e4e310 = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_e4e310 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %uint %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %uint %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_e4e310
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_e4e310
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_e4e310
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %57 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %58 = OpFunctionCall %v2uint %textureDimensions_e4e310
+ OpStore %57 %58
+ %59 = OpLoad %VertexOutput %out
+ OpReturnValue %59
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %61 = OpLabel
+ %62 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %63 = OpCompositeExtract %v4float %62 0
+ OpStore %pos_1 %63
+ %64 = OpCompositeExtract %v2uint %62 1
+ OpStore %prevent_dce_1 %64
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_e4e310
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_e4e310
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.wgsl
index 1faadef..eb3cac6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4e310.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<i32>;
-fn textureDimensions_e4e310() {
+fn textureDimensions_e4e310() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e4e310();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e4e310();
+ prevent_dce = textureDimensions_e4e310();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e4e310();
+ prevent_dce = textureDimensions_e4e310();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e4e310();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl
index 2f4889f..1cd81da 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32float, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba32float, read_write>) -> vec2<u32>
-fn textureDimensions_e4f021() {
+fn textureDimensions_e4f021() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e4f021();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e4f021();
+ prevent_dce = textureDimensions_e4f021();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e4f021();
+ prevent_dce = textureDimensions_e4f021();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e4f021();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.dxc.hlsl
index 6dc68f2..048dbae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e4f021() {
+uint2 textureDimensions_e4f021() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e4f021();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e4f021();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4f021()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e4f021();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4f021()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e4f021();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.fxc.hlsl
index 6dc68f2..048dbae 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e4f021() {
+uint2 textureDimensions_e4f021() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e4f021();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e4f021();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4f021()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e4f021();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e4f021()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e4f021();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.glsl
index b244c9f..c917911 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_e4f021() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_e4f021();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_e4f021() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e4f021() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_e4f021();
+ prevent_dce.inner = textureDimensions_e4f021();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_e4f021() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e4f021() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_e4f021();
+ prevent_dce.inner = textureDimensions_e4f021();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_e4f021() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_e4f021();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.msl
index 8373a91..97b049e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e4f021(texture2d<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_e4f021(texture2d<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_e4f021(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_e4f021(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_e4f021(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e4f021(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e4f021(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e4f021(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.spvasm
index bd9b164..9c4bbac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_e4f021 "textureDimensions_e4f021"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_e4f021 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_e4f021 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_e4f021
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_e4f021
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_e4f021
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_e4f021
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_e4f021
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_e4f021
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.wgsl
index fed68ef..2a34a71 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e4f021.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, read_write>;
-fn textureDimensions_e4f021() {
+fn textureDimensions_e4f021() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e4f021();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e4f021();
+ prevent_dce = textureDimensions_e4f021();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e4f021();
+ prevent_dce = textureDimensions_e4f021();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e4f021();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl
index db12377..73f66e6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba8uint, read_write>) -> vec2<u32>
-fn textureDimensions_e50eb8() {
+fn textureDimensions_e50eb8() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e50eb8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e50eb8();
+ prevent_dce = textureDimensions_e50eb8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e50eb8();
+ prevent_dce = textureDimensions_e50eb8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e50eb8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.dxc.hlsl
index e3ce914..dadc5bc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e50eb8() {
+uint2 textureDimensions_e50eb8() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e50eb8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e50eb8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e50eb8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e50eb8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e50eb8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e50eb8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.fxc.hlsl
index e3ce914..dadc5bc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e50eb8() {
+uint2 textureDimensions_e50eb8() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e50eb8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e50eb8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e50eb8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e50eb8();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e50eb8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e50eb8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.glsl
index 32c8c56..9f9c985 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_e50eb8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_e50eb8();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_e50eb8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e50eb8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_e50eb8();
+ prevent_dce.inner = textureDimensions_e50eb8();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_e50eb8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e50eb8() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_e50eb8();
+ prevent_dce.inner = textureDimensions_e50eb8();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_e50eb8() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_e50eb8();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.msl
index 6a2dd18..e555cb3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e50eb8(texture2d<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_e50eb8(texture2d<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_e50eb8(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_e50eb8(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_e50eb8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e50eb8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e50eb8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e50eb8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.spvasm
index 11cdf89..d25daf2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_e50eb8 "textureDimensions_e50eb8"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba8ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_e50eb8 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_e50eb8 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_e50eb8
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_e50eb8
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_e50eb8
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_e50eb8
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_e50eb8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_e50eb8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.wgsl
index 5a81081..f188107 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e50eb8.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8uint, read_write>;
-fn textureDimensions_e50eb8() {
+fn textureDimensions_e50eb8() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e50eb8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e50eb8();
+ prevent_dce = textureDimensions_e50eb8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e50eb8();
+ prevent_dce = textureDimensions_e50eb8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e50eb8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl
index ca68205..0aa900f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_3d<u32>;
// fn textureDimensions(texture: texture_3d<u32>, level: i32) -> vec3<u32>
-fn textureDimensions_e5a203() {
+fn textureDimensions_e5a203() -> vec3<u32>{
var arg_1 = 1i;
var res: vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e5a203();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e5a203();
+ prevent_dce = textureDimensions_e5a203();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e5a203();
+ prevent_dce = textureDimensions_e5a203();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e5a203();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.dxc.hlsl
index 52cac29..17ffde9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e5a203() {
+uint3 textureDimensions_e5a203() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e5a203();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e5a203();
+ prevent_dce.Store3(0u, asuint(textureDimensions_e5a203()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e5a203();
+ prevent_dce.Store3(0u, asuint(textureDimensions_e5a203()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e5a203();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.fxc.hlsl
index 52cac29..17ffde9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture3D<uint4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e5a203() {
+uint3 textureDimensions_e5a203() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint3 res = tint_tmp.xyz;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e5a203();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e5a203();
+ prevent_dce.Store3(0u, asuint(textureDimensions_e5a203()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e5a203();
+ prevent_dce.Store3(0u, asuint(textureDimensions_e5a203()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e5a203();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.glsl
index 5479fab3..2840ab3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.glsl
@@ -1,48 +1,26 @@
#version 310 es
-
-uniform highp usampler3D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_e5a203() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_e5a203();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_e5a203() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_e5a203() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_e5a203();
+ prevent_dce.inner = textureDimensions_e5a203();
}
void main() {
@@ -52,19 +30,24 @@
#version 310 es
uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_e5a203() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_e5a203() {
- int arg_1 = 1;
- uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_e5a203();
+ prevent_dce.inner = textureDimensions_e5a203();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -72,3 +55,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+uniform highp usampler3D arg_0_1;
+uvec3 textureDimensions_e5a203() {
+ int arg_1 = 1;
+ uvec3 res = uvec3(textureSize(arg_0_1, arg_1));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_e5a203();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.msl
index 79a8e3e..3b2be48 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e5a203(texture3d<uint, access::sample> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_e5a203(texture3d<uint, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint3 res = uint3(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1), tint_symbol_1.get_depth(arg_1));
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<uint, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_e5a203(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_e5a203(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<uint, access::sample> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_e5a203(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<uint, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e5a203(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<uint, access::sample> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<uint, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<uint, access::sample> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e5a203(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<uint, access::sample> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e5a203(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.spvasm
index 2f24dd9..2c5ff6c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 50
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,79 +21,106 @@
OpName %textureDimensions_e5a203 "textureDimensions_e5a203"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 3D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 3D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %31 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %34 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %36 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %46 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %52 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_e5a203 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v3uint Function %31
+%textureDimensions_e5a203 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v3uint Function %10
OpStore %arg_1 %int_1
- %27 = OpLoad %11 %arg_0
- %28 = OpLoad %int %arg_1
- %26 = OpImageQuerySizeLod %v3uint %27 %28
- OpStore %res %26
- %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %35 = OpLoad %v3uint %res
- OpStore %34 %35
+ %29 = OpLoad %16 %arg_0
+ %30 = OpLoad %int %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %29 %30
+ OpStore %res %28
+ %33 = OpLoad %v3uint %res
+ OpReturnValue %33
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %34
+ %37 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v3uint %textureDimensions_e5a203
+ OpStore %40 %41
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %36
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_e5a203
- OpReturnValue %5
+%compute_main = OpFunction %void None %34
+ %43 = OpLabel
+ %44 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %45 = OpFunctionCall %v3uint %textureDimensions_e5a203
+ OpStore %44 %45
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %42
+%vertex_main_inner = OpFunction %VertexOutput None %46
+ %49 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %52
+ %54 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %54 %5
+ %56 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %57 = OpFunctionCall %v3uint %textureDimensions_e5a203
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %34
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v3uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_e5a203
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %48 = OpLabel
- %49 = OpFunctionCall %void %textureDimensions_e5a203
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.wgsl
index c22c2c2..7219299 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e5a203.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_3d<u32>;
-fn textureDimensions_e5a203() {
+fn textureDimensions_e5a203() -> vec3<u32> {
var arg_1 = 1i;
var res : vec3<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e5a203();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e5a203();
+ prevent_dce = textureDimensions_e5a203();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e5a203();
+ prevent_dce = textureDimensions_e5a203();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e5a203();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl
index 2cc75ae..06b7825 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rg32sint, write>;
// fn textureDimensions(texture: texture_storage_3d<rg32sint, write>) -> vec3<u32>
-fn textureDimensions_e738f4() {
+fn textureDimensions_e738f4() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e738f4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e738f4();
+ prevent_dce = textureDimensions_e738f4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e738f4();
+ prevent_dce = textureDimensions_e738f4();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e738f4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.dxc.hlsl
index 311be74..f4a4b7f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e738f4() {
+uint3 textureDimensions_e738f4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e738f4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e738f4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_e738f4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e738f4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_e738f4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e738f4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.fxc.hlsl
index 311be74..f4a4b7f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e738f4() {
+uint3 textureDimensions_e738f4() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e738f4();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e738f4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_e738f4()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e738f4();
+ prevent_dce.Store3(0u, asuint(textureDimensions_e738f4()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e738f4();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.msl
index 0bd7f39..af16279 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e738f4(texture3d<int, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_e738f4(texture3d<int, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_e738f4(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_e738f4(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_e738f4(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e738f4(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e738f4(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e738f4(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.spvasm
index 2c62d26..9593909 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,74 +21,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_e738f4 "textureDimensions_e738f4"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_e738f4 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_e738f4 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_e738f4
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_e738f4
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_e738f4
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_e738f4
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_e738f4
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_e738f4
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.wgsl
index e3fc8d3..8960edd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e738f4.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rg32sint, write>;
-fn textureDimensions_e738f4() {
+fn textureDimensions_e738f4() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e738f4();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e738f4();
+ prevent_dce = textureDimensions_e738f4();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e738f4();
+ prevent_dce = textureDimensions_e738f4();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e738f4();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl
index 2f2a389..01b4666 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rg32uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rg32uint, read_write>) -> vec2<u32>
-fn textureDimensions_e824b6() {
+fn textureDimensions_e824b6() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e824b6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e824b6();
+ prevent_dce = textureDimensions_e824b6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e824b6();
+ prevent_dce = textureDimensions_e824b6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e824b6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.dxc.hlsl
index ca17252..a18e2c5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e824b6() {
+uint2 textureDimensions_e824b6() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e824b6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e824b6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e824b6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e824b6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e824b6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e824b6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.fxc.hlsl
index ca17252..a18e2c5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e824b6() {
+uint2 textureDimensions_e824b6() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e824b6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e824b6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e824b6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e824b6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e824b6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e824b6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.msl
index 68cc693..24216ab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e824b6(texture2d_array<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_e824b6(texture2d_array<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_e824b6(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_e824b6(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_e824b6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e824b6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e824b6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e824b6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.spvasm
index 8c07ac8..caa3f72 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,74 +21,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_e824b6 "textureDimensions_e824b6"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 1 0 2 Rg32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_e824b6 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_e824b6 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_e824b6
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_e824b6
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_e824b6
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_e824b6
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_e824b6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_e824b6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.wgsl
index 68b9fed..f316392 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e824b6.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rg32uint, read_write>;
-fn textureDimensions_e824b6() {
+fn textureDimensions_e824b6() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e824b6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e824b6();
+ prevent_dce = textureDimensions_e824b6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e824b6();
+ prevent_dce = textureDimensions_e824b6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e824b6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl
index defd84b..0d95258 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba16uint, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba16uint, write>) -> vec2<u32>
-fn textureDimensions_e99308() {
+fn textureDimensions_e99308() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e99308();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e99308();
+ prevent_dce = textureDimensions_e99308();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e99308();
+ prevent_dce = textureDimensions_e99308();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e99308();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.dxc.hlsl
index cb1baa7..46c645d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e99308() {
+uint2 textureDimensions_e99308() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e99308();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e99308();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e99308()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e99308();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e99308()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e99308();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.fxc.hlsl
index cb1baa7..46c645d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_e99308() {
+uint2 textureDimensions_e99308() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_e99308();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_e99308();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e99308()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_e99308();
+ prevent_dce.Store2(0u, asuint(textureDimensions_e99308()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_e99308();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.glsl
index 80f1eae..cbf049f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_e99308() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_e99308();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_e99308() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e99308() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_e99308();
+ prevent_dce.inner = textureDimensions_e99308();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_e99308() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_e99308() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_e99308();
+ prevent_dce.inner = textureDimensions_e99308();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16ui) uniform highp writeonly uimage2D arg_0;
+uvec2 textureDimensions_e99308() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_e99308();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.msl
index 9a21c05..4ec1c85 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_e99308(texture2d<uint, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_e99308(texture2d<uint, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_e99308(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_e99308(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_e99308(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_e99308(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_e99308(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_e99308(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.spvasm
index 2406512..5c54c18 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_e99308 "textureDimensions_e99308"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 Rgba16ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_e99308 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_e99308 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_e99308
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_e99308
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_e99308
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_e99308
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_e99308
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_e99308
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.wgsl
index 14d0af3..e8dc121 100644
--- a/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/e99308.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba16uint, write>;
-fn textureDimensions_e99308() {
+fn textureDimensions_e99308() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_e99308();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_e99308();
+ prevent_dce = textureDimensions_e99308();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_e99308();
+ prevent_dce = textureDimensions_e99308();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_e99308();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl
index 9581875..d0be869 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r32float, write>;
// fn textureDimensions(texture: texture_storage_1d<r32float, write>) -> u32
-fn textureDimensions_ea066c() {
+fn textureDimensions_ea066c() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ea066c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_ea066c();
+ prevent_dce = textureDimensions_ea066c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ea066c();
+ prevent_dce = textureDimensions_ea066c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ea066c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.dxc.hlsl
index baad958..4eeff36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ea066c() {
+uint textureDimensions_ea066c() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ea066c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ea066c();
+ prevent_dce.Store(0u, asuint(textureDimensions_ea066c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ea066c();
+ prevent_dce.Store(0u, asuint(textureDimensions_ea066c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ea066c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.fxc.hlsl
index baad958..4eeff36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ea066c() {
+uint textureDimensions_ea066c() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ea066c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ea066c();
+ prevent_dce.Store(0u, asuint(textureDimensions_ea066c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ea066c();
+ prevent_dce.Store(0u, asuint(textureDimensions_ea066c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ea066c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.glsl
index 9443ce9..4a8543c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_ea066c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_ea066c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_ea066c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_ea066c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_ea066c();
+ prevent_dce.inner = textureDimensions_ea066c();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_ea066c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_ea066c() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_ea066c();
+ prevent_dce.inner = textureDimensions_ea066c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(r32f) uniform highp writeonly image2D arg_0;
+uint textureDimensions_ea066c() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_ea066c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.msl
index e763dc2..bb68694 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_ea066c(texture1d<float, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_ea066c(texture1d<float, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_ea066c(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_ea066c(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_ea066c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_ea066c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_ea066c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_ea066c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.spvasm
index de79c1d..156eb7d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_ea066c "textureDimensions_ea066c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 R32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 R32f
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_ea066c = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_ea066c = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_ea066c
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_ea066c
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_ea066c
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_ea066c
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_ea066c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_ea066c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.wgsl
index e0a8258..da95e5d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea066c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r32float, write>;
-fn textureDimensions_ea066c() {
+fn textureDimensions_ea066c() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ea066c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_ea066c();
+ prevent_dce = textureDimensions_ea066c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ea066c();
+ prevent_dce = textureDimensions_ea066c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ea066c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl
index 2614e52..fe136ab 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32uint, write>;
// fn textureDimensions(texture: texture_storage_1d<rg32uint, write>) -> u32
-fn textureDimensions_ea25bc() {
+fn textureDimensions_ea25bc() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ea25bc();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_ea25bc();
+ prevent_dce = textureDimensions_ea25bc();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ea25bc();
+ prevent_dce = textureDimensions_ea25bc();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ea25bc();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.dxc.hlsl
index b6dc189..7e9ac6c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ea25bc() {
+uint textureDimensions_ea25bc() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ea25bc();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ea25bc();
+ prevent_dce.Store(0u, asuint(textureDimensions_ea25bc()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ea25bc();
+ prevent_dce.Store(0u, asuint(textureDimensions_ea25bc()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ea25bc();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.fxc.hlsl
index b6dc189..7e9ac6c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ea25bc() {
+uint textureDimensions_ea25bc() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ea25bc();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ea25bc();
+ prevent_dce.Store(0u, asuint(textureDimensions_ea25bc()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ea25bc();
+ prevent_dce.Store(0u, asuint(textureDimensions_ea25bc()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ea25bc();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.msl
index 3a33ce8..14d6bbc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_ea25bc(texture1d<uint, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_ea25bc(texture1d<uint, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_ea25bc(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_ea25bc(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_ea25bc(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_ea25bc(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_ea25bc(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_ea25bc(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.spvasm
index 79c856c..38c2c0b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,72 +22,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_ea25bc "textureDimensions_ea25bc"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rg32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_ea25bc = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_ea25bc = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_ea25bc
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_ea25bc
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_ea25bc
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_ea25bc
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_ea25bc
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_ea25bc
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.wgsl
index 37a6a55..ed9a2e3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ea25bc.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32uint, write>;
-fn textureDimensions_ea25bc() {
+fn textureDimensions_ea25bc() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ea25bc();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_ea25bc();
+ prevent_dce = textureDimensions_ea25bc();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ea25bc();
+ prevent_dce = textureDimensions_ea25bc();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ea25bc();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl
index 22a3ee8..2a8288b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_depth_2d_array;
// fn textureDimensions(texture: texture_depth_2d_array, level: u32) -> vec2<u32>
-fn textureDimensions_eafe19() {
+fn textureDimensions_eafe19() -> vec2<u32>{
var arg_1 = 1u;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eafe19();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_eafe19();
+ prevent_dce = textureDimensions_eafe19();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eafe19();
+ prevent_dce = textureDimensions_eafe19();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eafe19();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.dxc.hlsl
index 779b782..316351d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eafe19() {
+uint2 textureDimensions_eafe19() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eafe19();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eafe19();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eafe19()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eafe19();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eafe19()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eafe19();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.fxc.hlsl
index 779b782..316351d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eafe19() {
+uint2 textureDimensions_eafe19() {
uint arg_1 = 1u;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eafe19();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eafe19();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eafe19()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eafe19();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eafe19()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eafe19();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.glsl
index c324f1f..68ee2a3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_eafe19() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_eafe19();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_eafe19() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_eafe19() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_eafe19();
+ prevent_dce.inner = textureDimensions_eafe19();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_eafe19() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_eafe19() {
- uint arg_1 = 1u;
- uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_eafe19();
+ prevent_dce.inner = textureDimensions_eafe19();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp sampler2DArray arg_0_1;
+uvec2 textureDimensions_eafe19() {
+ uint arg_1 = 1u;
+ uvec2 res = uvec2(textureSize(arg_0_1, int(arg_1)).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_eafe19();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.msl
index f4f6fac..f837572 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_eafe19(depth2d_array<float, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_eafe19(depth2d_array<float, access::sample> tint_symbol_1) {
uint arg_1 = 1u;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], depth2d_array<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_eafe19(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], depth2d_array<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_eafe19(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(depth2d_array<float, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_eafe19(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(depth2d_array<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_eafe19(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(depth2d_array<float, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(depth2d_array<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(depth2d_array<float, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_eafe19(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(depth2d_array<float, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_eafe19(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.spvasm
index 6cc8309..dde34ed 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 51
+; Bound: 65
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,80 +21,106 @@
OpName %textureDimensions_eafe19 "textureDimensions_eafe19"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%uint_1 = OpConstant %uint 1
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %26 = OpConstantNull %uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %32 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %35 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %37 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %47 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %53 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
%float_1 = OpConstant %float 1
-%textureDimensions_eafe19 = OpFunction %void None %17
- %20 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_uint Function %24
- %res = OpVariable %_ptr_Function_v2uint Function %32
+%textureDimensions_eafe19 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_uint Function %26
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %uint_1
- %28 = OpLoad %11 %arg_0
- %29 = OpLoad %uint %arg_1
- %26 = OpImageQuerySizeLod %v3uint %28 %29
- %25 = OpVectorShuffle %v2uint %26 %26 0 1
- OpStore %res %25
- %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %36 = OpLoad %v2uint %res
- OpStore %35 %36
+ %30 = OpLoad %16 %arg_0
+ %31 = OpLoad %uint %arg_1
+ %28 = OpImageQuerySizeLod %v3uint %30 %31
+ %27 = OpVectorShuffle %v2uint %28 %28 0 1
+ OpStore %res %27
+ %34 = OpLoad %v2uint %res
+ OpReturnValue %34
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %35
+ %38 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_eafe19
+ OpStore %41 %42
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %37
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_eafe19
- OpReturnValue %5
+%compute_main = OpFunction %void None %35
+ %44 = OpLabel
+ %45 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %46 = OpFunctionCall %v2uint %textureDimensions_eafe19
+ OpStore %45 %46
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %43
+%vertex_main_inner = OpFunction %VertexOutput None %47
+ %50 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %53
+ %55 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %55 %5
+ %56 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %57 = OpFunctionCall %v2uint %textureDimensions_eafe19
+ OpStore %56 %57
+ %58 = OpLoad %VertexOutput %out
+ OpReturnValue %58
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %35
+ %60 = OpLabel
+ %61 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %62 = OpCompositeExtract %v4float %61 0
+ OpStore %pos_1 %62
+ %63 = OpCompositeExtract %v2uint %61 1
+ OpStore %prevent_dce_1 %63
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %46 = OpLabel
- %47 = OpFunctionCall %void %textureDimensions_eafe19
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %49 = OpLabel
- %50 = OpFunctionCall %void %textureDimensions_eafe19
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.wgsl
index a5854e6..85f5187 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eafe19.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_depth_2d_array;
-fn textureDimensions_eafe19() {
+fn textureDimensions_eafe19() -> vec2<u32> {
var arg_1 = 1u;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eafe19();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_eafe19();
+ prevent_dce = textureDimensions_eafe19();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eafe19();
+ prevent_dce = textureDimensions_eafe19();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eafe19();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl
index e0e65da..32cb2f4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba16float, write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba16float, write>) -> vec2<u32>
-fn textureDimensions_eb03b1() {
+fn textureDimensions_eb03b1() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eb03b1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_eb03b1();
+ prevent_dce = textureDimensions_eb03b1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eb03b1();
+ prevent_dce = textureDimensions_eb03b1();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eb03b1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.dxc.hlsl
index fd9edb6..5b68525 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eb03b1() {
+uint2 textureDimensions_eb03b1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eb03b1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eb03b1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb03b1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eb03b1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb03b1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eb03b1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.fxc.hlsl
index fd9edb6..5b68525 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eb03b1() {
+uint2 textureDimensions_eb03b1() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eb03b1();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eb03b1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb03b1()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eb03b1();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb03b1()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eb03b1();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.glsl
index de50123..16c9f68 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba16f) uniform highp writeonly image2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_eb03b1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_eb03b1();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_eb03b1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_eb03b1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_eb03b1();
+ prevent_dce.inner = textureDimensions_eb03b1();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba16f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_eb03b1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_eb03b1() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_eb03b1();
+ prevent_dce.inner = textureDimensions_eb03b1();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba16f) uniform highp writeonly image2DArray arg_0;
+uvec2 textureDimensions_eb03b1() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_eb03b1();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.msl
index 886467f..2079dc6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_eb03b1(texture2d_array<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_eb03b1(texture2d_array<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_eb03b1(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_eb03b1(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_eb03b1(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_eb03b1(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_eb03b1(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_eb03b1(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.spvasm
index 4bfa443..d38a788 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_eb03b1 "textureDimensions_eb03b1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 1 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_eb03b1 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %24 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %24
- %21 = OpVectorShuffle %v2uint %22 %22 0 1
- OpStore %res %21
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_eb03b1 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %26 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %26
+ %23 = OpVectorShuffle %v2uint %24 %24 0 1
+ OpStore %res %23
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_eb03b1
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_eb03b1
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_eb03b1
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_eb03b1
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_eb03b1
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_eb03b1
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.wgsl
index 732d9bc..8bb7abe 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb03b1.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba16float, write>;
-fn textureDimensions_eb03b1() {
+fn textureDimensions_eb03b1() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eb03b1();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_eb03b1();
+ prevent_dce = textureDimensions_eb03b1();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eb03b1();
+ prevent_dce = textureDimensions_eb03b1();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eb03b1();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl
index 442e10c..c002f88 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rgba8unorm, read_write>) -> vec2<u32>
-fn textureDimensions_eb10d6() {
+fn textureDimensions_eb10d6() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eb10d6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_eb10d6();
+ prevent_dce = textureDimensions_eb10d6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eb10d6();
+ prevent_dce = textureDimensions_eb10d6();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eb10d6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.dxc.hlsl
index 37b35b7..24ad66d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eb10d6() {
+uint2 textureDimensions_eb10d6() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eb10d6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eb10d6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb10d6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eb10d6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb10d6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eb10d6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.fxc.hlsl
index 37b35b7..24ad66d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eb10d6() {
+uint2 textureDimensions_eb10d6() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eb10d6();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eb10d6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb10d6()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eb10d6();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb10d6()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eb10d6();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.glsl
index 0a19db6..f76502e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_eb10d6() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_eb10d6();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_eb10d6() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_eb10d6() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_eb10d6();
+ prevent_dce.inner = textureDimensions_eb10d6();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_eb10d6() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_eb10d6() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_eb10d6();
+ prevent_dce.inner = textureDimensions_eb10d6();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_eb10d6() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_eb10d6();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.msl
index 93afdca..cddca18 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_eb10d6(texture2d<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_eb10d6(texture2d<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_eb10d6(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_eb10d6(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_eb10d6(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_eb10d6(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_eb10d6(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_eb10d6(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.spvasm
index 34a5380..5223a36 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_eb10d6 "textureDimensions_eb10d6"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_eb10d6 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_eb10d6 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_eb10d6
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_eb10d6
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_eb10d6
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_eb10d6
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_eb10d6
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_eb10d6
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.wgsl
index 1f0f893..a251da3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb10d6.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba8unorm, read_write>;
-fn textureDimensions_eb10d6() {
+fn textureDimensions_eb10d6() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eb10d6();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_eb10d6();
+ prevent_dce = textureDimensions_eb10d6();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eb10d6();
+ prevent_dce = textureDimensions_eb10d6();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eb10d6();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl
index 95ec2cb..eec8e7d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba32uint, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba32uint, read_write>) -> u32
-fn textureDimensions_eb1249() {
+fn textureDimensions_eb1249() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eb1249();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_eb1249();
+ prevent_dce = textureDimensions_eb1249();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eb1249();
+ prevent_dce = textureDimensions_eb1249();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eb1249();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.dxc.hlsl
index 71b7678..3734b2a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eb1249() {
+uint textureDimensions_eb1249() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eb1249();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eb1249();
+ prevent_dce.Store(0u, asuint(textureDimensions_eb1249()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eb1249();
+ prevent_dce.Store(0u, asuint(textureDimensions_eb1249()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eb1249();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.fxc.hlsl
index 71b7678..3734b2a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eb1249() {
+uint textureDimensions_eb1249() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eb1249();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eb1249();
+ prevent_dce.Store(0u, asuint(textureDimensions_eb1249()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eb1249();
+ prevent_dce.Store(0u, asuint(textureDimensions_eb1249()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eb1249();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.glsl
index 09c384b..c852d5e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_eb1249() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_eb1249();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_eb1249() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_eb1249() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_eb1249();
+ prevent_dce.inner = textureDimensions_eb1249();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_eb1249() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_eb1249() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_eb1249();
+ prevent_dce.inner = textureDimensions_eb1249();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba32ui) uniform highp writeonly uimage2D arg_0;
+uint textureDimensions_eb1249() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_eb1249();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.msl
index e1ea926..ca47e26 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_eb1249(texture1d<uint, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_eb1249(texture1d<uint, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_eb1249(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_eb1249(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_eb1249(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_eb1249(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_eb1249(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_eb1249(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.spvasm
index 6026b3f..ad61032 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_eb1249 "textureDimensions_eb1249"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %uint 1D 0 0 0 2 Rgba32ui
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_eb1249 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_eb1249 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_eb1249
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_eb1249
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_eb1249
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_eb1249
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_eb1249
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_eb1249
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.wgsl
index 787b651..4247ed2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb1249.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba32uint, read_write>;
-fn textureDimensions_eb1249() {
+fn textureDimensions_eb1249() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eb1249();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_eb1249();
+ prevent_dce = textureDimensions_eb1249();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eb1249();
+ prevent_dce = textureDimensions_eb1249();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eb1249();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl
index c824a0e..2398413 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba8sint, read_write>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba8sint, read_write>) -> vec2<u32>
-fn textureDimensions_eb9f4d() {
+fn textureDimensions_eb9f4d() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eb9f4d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_eb9f4d();
+ prevent_dce = textureDimensions_eb9f4d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eb9f4d();
+ prevent_dce = textureDimensions_eb9f4d();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eb9f4d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.dxc.hlsl
index f94b0c4..53bf1e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eb9f4d() {
+uint2 textureDimensions_eb9f4d() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eb9f4d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eb9f4d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb9f4d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eb9f4d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb9f4d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eb9f4d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.fxc.hlsl
index f94b0c4..53bf1e9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2DArray<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_eb9f4d() {
+uint2 textureDimensions_eb9f4d() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_eb9f4d();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_eb9f4d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb9f4d()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_eb9f4d();
+ prevent_dce.Store2(0u, asuint(textureDimensions_eb9f4d()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_eb9f4d();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.glsl
index 5351abe5..81bb09d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8i) uniform highp writeonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_eb9f4d() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_eb9f4d();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_eb9f4d() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_eb9f4d() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_eb9f4d();
+ prevent_dce.inner = textureDimensions_eb9f4d();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_eb9f4d() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_eb9f4d() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_eb9f4d();
+ prevent_dce.inner = textureDimensions_eb9f4d();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8i) uniform highp writeonly iimage2DArray arg_0;
+uvec2 textureDimensions_eb9f4d() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_eb9f4d();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.msl
index dc5eb99..da7cdc1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_eb9f4d(texture2d_array<int, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_eb9f4d(texture2d_array<int, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_eb9f4d(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_eb9f4d(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_eb9f4d(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_eb9f4d(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_eb9f4d(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_eb9f4d(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.spvasm
index 48d49c7..8156166 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,75 +20,102 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_eb9f4d "textureDimensions_eb9f4d"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba8i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_eb9f4d = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_eb9f4d = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_eb9f4d
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_eb9f4d
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_eb9f4d
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_eb9f4d
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_eb9f4d
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_eb9f4d
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.wgsl
index 6a1b9fc..feb6a98 100644
--- a/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/eb9f4d.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba8sint, read_write>;
-fn textureDimensions_eb9f4d() {
+fn textureDimensions_eb9f4d() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_eb9f4d();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_eb9f4d();
+ prevent_dce = textureDimensions_eb9f4d();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_eb9f4d();
+ prevent_dce = textureDimensions_eb9f4d();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_eb9f4d();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl
index cf4fd88..d06574b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<r32uint, read_write>;
// fn textureDimensions(texture: texture_storage_2d<r32uint, read_write>) -> vec2<u32>
-fn textureDimensions_ed1030() {
+fn textureDimensions_ed1030() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ed1030();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_ed1030();
+ prevent_dce = textureDimensions_ed1030();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ed1030();
+ prevent_dce = textureDimensions_ed1030();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ed1030();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.dxc.hlsl
index 4900e7e..ca87f4c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ed1030() {
+uint2 textureDimensions_ed1030() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ed1030();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ed1030();
+ prevent_dce.Store2(0u, asuint(textureDimensions_ed1030()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ed1030();
+ prevent_dce.Store2(0u, asuint(textureDimensions_ed1030()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ed1030();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.fxc.hlsl
index 4900e7e..ca87f4c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<uint4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ed1030() {
+uint2 textureDimensions_ed1030() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ed1030();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ed1030();
+ prevent_dce.Store2(0u, asuint(textureDimensions_ed1030()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ed1030();
+ prevent_dce.Store2(0u, asuint(textureDimensions_ed1030()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ed1030();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.glsl
index d3723d1..39e64af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(r32ui) uniform highp uimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_ed1030() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_ed1030();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32ui) uniform highp uimage2D arg_0;
+uvec2 textureDimensions_ed1030() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_ed1030() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_ed1030();
+ prevent_dce.inner = textureDimensions_ed1030();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(r32ui) uniform highp uimage2D arg_0;
+uvec2 textureDimensions_ed1030() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_ed1030() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_ed1030();
+ prevent_dce.inner = textureDimensions_ed1030();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(r32ui) uniform highp uimage2D arg_0;
+uvec2 textureDimensions_ed1030() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_ed1030();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.msl
index 6afb545..619678a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_ed1030(texture2d<uint, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_ed1030(texture2d<uint, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_ed1030(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_ed1030(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_ed1030(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<uint, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_ed1030(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<uint, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_ed1030(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<uint, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_ed1030(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.spvasm
index fdbfec6..ef9707d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_ed1030 "textureDimensions_ed1030"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
- %11 = OpTypeImage %uint 2D 0 0 0 2 R32ui
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %uint 2D 0 0 0 2 R32ui
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_ed1030 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_ed1030 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_ed1030
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_ed1030
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_ed1030
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_ed1030
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_ed1030
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_ed1030
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.wgsl
index 3587f3b..9a57ad5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ed1030.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<r32uint, read_write>;
-fn textureDimensions_ed1030() {
+fn textureDimensions_ed1030() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ed1030();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_ed1030();
+ prevent_dce = textureDimensions_ed1030();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ed1030();
+ prevent_dce = textureDimensions_ed1030();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ed1030();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl
index 0e9720b..6ea2588 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<r32sint, write>;
// fn textureDimensions(texture: texture_storage_3d<r32sint, write>) -> vec3<u32>
-fn textureDimensions_ef2e58() {
+fn textureDimensions_ef2e58() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ef2e58();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_ef2e58();
+ prevent_dce = textureDimensions_ef2e58();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ef2e58();
+ prevent_dce = textureDimensions_ef2e58();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ef2e58();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.dxc.hlsl
index 012a126..1241c23 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ef2e58() {
+uint3 textureDimensions_ef2e58() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ef2e58();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ef2e58();
+ prevent_dce.Store3(0u, asuint(textureDimensions_ef2e58()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ef2e58();
+ prevent_dce.Store3(0u, asuint(textureDimensions_ef2e58()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ef2e58();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.fxc.hlsl
index 012a126..1241c23 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_ef2e58() {
+uint3 textureDimensions_ef2e58() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_ef2e58();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_ef2e58();
+ prevent_dce.Store3(0u, asuint(textureDimensions_ef2e58()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_ef2e58();
+ prevent_dce.Store3(0u, asuint(textureDimensions_ef2e58()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_ef2e58();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.glsl
index 8b48cf4..bcdf801 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(r32i) uniform highp writeonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_ef2e58() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_ef2e58();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(r32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_ef2e58() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_ef2e58() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_ef2e58();
+ prevent_dce.inner = textureDimensions_ef2e58();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(r32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_ef2e58() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_ef2e58() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_ef2e58();
+ prevent_dce.inner = textureDimensions_ef2e58();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(r32i) uniform highp writeonly iimage3D arg_0;
+uvec3 textureDimensions_ef2e58() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_ef2e58();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.msl
index 09677c6..52cb001 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_ef2e58(texture3d<int, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_ef2e58(texture3d<int, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_ef2e58(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_ef2e58(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_ef2e58(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_ef2e58(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_ef2e58(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_ef2e58(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.spvasm
index e69946b..316a268 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_ef2e58 "textureDimensions_ef2e58"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 R32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 R32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_ef2e58 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_ef2e58 = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_ef2e58
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_ef2e58
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_ef2e58
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_ef2e58
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_ef2e58
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_ef2e58
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.wgsl
index a7b24c8..ddf01c4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/ef2e58.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<r32sint, write>;
-fn textureDimensions_ef2e58() {
+fn textureDimensions_ef2e58() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_ef2e58();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_ef2e58();
+ prevent_dce = textureDimensions_ef2e58();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_ef2e58();
+ prevent_dce = textureDimensions_ef2e58();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_ef2e58();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl
index a1f8711..b411aef 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_1d<f32>;
// fn textureDimensions(texture: texture_1d<f32>, level: i32) -> u32
-fn textureDimensions_f17acd() {
+fn textureDimensions_f17acd() -> u32{
var arg_1 = 1i;
var res: u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f17acd();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_f17acd();
+ prevent_dce = textureDimensions_f17acd();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f17acd();
+ prevent_dce = textureDimensions_f17acd();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f17acd();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.dxc.hlsl
index 2caebba..4265ae5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f17acd() {
+uint textureDimensions_f17acd() {
int arg_1 = 1;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f17acd();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f17acd();
+ prevent_dce.Store(0u, asuint(textureDimensions_f17acd()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f17acd();
+ prevent_dce.Store(0u, asuint(textureDimensions_f17acd()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f17acd();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.fxc.hlsl
index 2caebba..4265ae5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f17acd() {
+uint textureDimensions_f17acd() {
int arg_1 = 1;
uint2 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y);
uint res = tint_tmp.x;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f17acd();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f17acd();
+ prevent_dce.Store(0u, asuint(textureDimensions_f17acd()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f17acd();
+ prevent_dce.Store(0u, asuint(textureDimensions_f17acd()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f17acd();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.glsl
index fe185d3..3c12608 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp sampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_f17acd() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f17acd();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp sampler2D arg_0_1;
+uint textureDimensions_f17acd() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_f17acd() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_f17acd();
+ prevent_dce.inner = textureDimensions_f17acd();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp sampler2D arg_0_1;
+uint textureDimensions_f17acd() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_f17acd() {
- int arg_1 = 1;
- uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_f17acd();
+ prevent_dce.inner = textureDimensions_f17acd();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+uniform highp sampler2D arg_0_1;
+uint textureDimensions_f17acd() {
+ int arg_1 = 1;
+ uint res = uvec2(textureSize(arg_0_1, arg_1)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f17acd();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.msl
index 5e0a76a..538f74e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f17acd(texture1d<float, access::sample> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_f17acd(texture1d<float, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f17acd(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f17acd(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::sample> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_f17acd(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f17acd(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::sample> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::sample> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f17acd(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::sample> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f17acd(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.spvasm
index ac7c54d..778f081 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 49
+; Bound: 64
; Schema: 0
OpCapability Shader
OpCapability Sampled1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,78 +22,105 @@
OpName %textureDimensions_f17acd "textureDimensions_f17acd"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 1 Unknown
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %24 = OpConstantNull %int
+ %26 = OpConstantNull %int
%_ptr_Function_uint = OpTypePointer Function %uint
- %30 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %33 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %35 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %45 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %51 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f17acd = OpFunction %void None %16
- %19 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %24
- %res = OpVariable %_ptr_Function_uint Function %30
+%textureDimensions_f17acd = OpFunction %uint None %19
+ %21 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %26
+ %res = OpVariable %_ptr_Function_uint Function %9
OpStore %arg_1 %int_1
- %26 = OpLoad %11 %arg_0
- %27 = OpLoad %int %arg_1
- %25 = OpImageQuerySizeLod %uint %26 %27
- OpStore %res %25
- %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %34 = OpLoad %uint %res
- OpStore %33 %34
+ %28 = OpLoad %15 %arg_0
+ %29 = OpLoad %int %arg_1
+ %27 = OpImageQuerySizeLod %uint %28 %29
+ OpStore %res %27
+ %32 = OpLoad %uint %res
+ OpReturnValue %32
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %33
+ %36 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %uint %textureDimensions_f17acd
+ OpStore %39 %40
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %35
- %37 = OpLabel
- %38 = OpFunctionCall %void %textureDimensions_f17acd
- OpReturnValue %5
+%compute_main = OpFunction %void None %33
+ %42 = OpLabel
+ %43 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %44 = OpFunctionCall %uint %textureDimensions_f17acd
+ OpStore %43 %44
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %40 = OpLabel
- %41 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %41
+%vertex_main_inner = OpFunction %VertexOutput None %45
+ %48 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %51
+ %53 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %53 %5
+ %55 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %56 = OpFunctionCall %uint %textureDimensions_f17acd
+ OpStore %55 %56
+ %57 = OpLoad %VertexOutput %out
+ OpReturnValue %57
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %33
+ %59 = OpLabel
+ %60 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %61 = OpCompositeExtract %v4float %60 0
+ OpStore %pos_1 %61
+ %62 = OpCompositeExtract %uint %60 1
+ OpStore %prevent_dce_1 %62
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_f17acd
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_f17acd
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.wgsl
index 7bfcc17..22e8acd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f17acd.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_1d<f32>;
-fn textureDimensions_f17acd() {
+fn textureDimensions_f17acd() -> u32 {
var arg_1 = 1i;
var res : u32 = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f17acd();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_f17acd();
+ prevent_dce = textureDimensions_f17acd();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f17acd();
+ prevent_dce = textureDimensions_f17acd();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f17acd();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl
index 5cacb1c..66326fd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rg32sint, write>;
// fn textureDimensions(texture: texture_storage_1d<rg32sint, write>) -> u32
-fn textureDimensions_f264a3() {
+fn textureDimensions_f264a3() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f264a3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_f264a3();
+ prevent_dce = textureDimensions_f264a3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f264a3();
+ prevent_dce = textureDimensions_f264a3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f264a3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.dxc.hlsl
index c9a1ccf..d1be7bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f264a3() {
+uint textureDimensions_f264a3() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f264a3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f264a3();
+ prevent_dce.Store(0u, asuint(textureDimensions_f264a3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f264a3();
+ prevent_dce.Store(0u, asuint(textureDimensions_f264a3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f264a3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.fxc.hlsl
index c9a1ccf..d1be7bb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<int4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f264a3() {
+uint textureDimensions_f264a3() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f264a3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f264a3();
+ prevent_dce.Store(0u, asuint(textureDimensions_f264a3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f264a3();
+ prevent_dce.Store(0u, asuint(textureDimensions_f264a3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f264a3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.msl
index 66395ba..a9a22cd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f264a3(texture1d<int, access::write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_f264a3(texture1d<int, access::write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<int, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f264a3(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<int, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f264a3(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<int, access::write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_f264a3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<int, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f264a3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<int, access::write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f264a3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<int, access::write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f264a3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.spvasm
index d21be41..1feac33 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,73 +22,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f264a3 "textureDimensions_f264a3"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 1D 0 0 0 2 Rg32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %int = OpTypeInt 32 1
+ %15 = OpTypeImage %int 1D 0 0 0 2 Rg32i
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %25 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f264a3 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %29 = OpLoad %uint %res
- OpStore %28 %29
+%textureDimensions_f264a3 = OpFunction %uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %24 = OpLoad %15 %arg_0
+ %23 = OpImageQuerySize %uint %24
+ OpStore %res %23
+ %27 = OpLoad %uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %uint %textureDimensions_f264a3
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_f264a3
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %uint %textureDimensions_f264a3
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %51 = OpFunctionCall %uint %textureDimensions_f264a3
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_f264a3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_f264a3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.wgsl
index efdfa1a..f8075cf 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f264a3.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rg32sint, write>;
-fn textureDimensions_f264a3() {
+fn textureDimensions_f264a3() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f264a3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_f264a3();
+ prevent_dce = textureDimensions_f264a3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f264a3();
+ prevent_dce = textureDimensions_f264a3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f264a3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl
index d42dd19..846a821 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba16float, write>;
// fn textureDimensions(texture: texture_storage_3d<rgba16float, write>) -> vec3<u32>
-fn textureDimensions_f3a2ac() {
+fn textureDimensions_f3a2ac() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f3a2ac();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f3a2ac();
+ prevent_dce = textureDimensions_f3a2ac();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f3a2ac();
+ prevent_dce = textureDimensions_f3a2ac();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f3a2ac();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.dxc.hlsl
index 302bb1a..f5a5f92 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f3a2ac() {
+uint3 textureDimensions_f3a2ac() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f3a2ac();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f3a2ac();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f3a2ac()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f3a2ac();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f3a2ac()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f3a2ac();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.fxc.hlsl
index 302bb1a..f5a5f92 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f3a2ac() {
+uint3 textureDimensions_f3a2ac() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f3a2ac();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f3a2ac();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f3a2ac()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f3a2ac();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f3a2ac()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f3a2ac();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.glsl
index e85f238..b73f64e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba16f) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_f3a2ac() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f3a2ac();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba16f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f3a2ac() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_f3a2ac() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f3a2ac();
+ prevent_dce.inner = textureDimensions_f3a2ac();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba16f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f3a2ac() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_f3a2ac() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_f3a2ac();
+ prevent_dce.inner = textureDimensions_f3a2ac();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba16f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f3a2ac() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f3a2ac();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.msl
index ddf78bf..666d861 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f3a2ac(texture3d<float, access::write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_f3a2ac(texture3d<float, access::write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_f3a2ac(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_f3a2ac(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_f3a2ac(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f3a2ac(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f3a2ac(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f3a2ac(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.spvasm
index 6fd2002..9f226b3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f3a2ac "textureDimensions_f3a2ac"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba16f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f3a2ac = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_f3a2ac = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_f3a2ac
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_f3a2ac
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_f3a2ac
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_f3a2ac
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_f3a2ac
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_f3a2ac
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.wgsl
index f0ff0e5..cef2c19e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f3a2ac.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba16float, write>;
-fn textureDimensions_f3a2ac() {
+fn textureDimensions_f3a2ac() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f3a2ac();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f3a2ac();
+ prevent_dce = textureDimensions_f3a2ac();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f3a2ac();
+ prevent_dce = textureDimensions_f3a2ac();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f3a2ac();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl
index 3256316..6f0a2b3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<rgba8unorm, read_write>;
// fn textureDimensions(texture: texture_storage_1d<rgba8unorm, read_write>) -> u32
-fn textureDimensions_f406ff() {
+fn textureDimensions_f406ff() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f406ff();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_f406ff();
+ prevent_dce = textureDimensions_f406ff();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f406ff();
+ prevent_dce = textureDimensions_f406ff();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f406ff();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.dxc.hlsl
index 2e40d76..5b192f9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f406ff() {
+uint textureDimensions_f406ff() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f406ff();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f406ff();
+ prevent_dce.Store(0u, asuint(textureDimensions_f406ff()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f406ff();
+ prevent_dce.Store(0u, asuint(textureDimensions_f406ff()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f406ff();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.fxc.hlsl
index 2e40d76..5b192f9 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture1D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f406ff() {
+uint textureDimensions_f406ff() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f406ff();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f406ff();
+ prevent_dce.Store(0u, asuint(textureDimensions_f406ff()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f406ff();
+ prevent_dce.Store(0u, asuint(textureDimensions_f406ff()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f406ff();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.glsl
index 3c7f5f1..73ef73f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uint inner;
-} prevent_dce;
-
-void textureDimensions_f406ff() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f406ff();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_f406ff() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_f406ff() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void fragment_main() {
- textureDimensions_f406ff();
+ prevent_dce.inner = textureDimensions_f406ff();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_f406ff() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uint inner;
} prevent_dce;
-void textureDimensions_f406ff() {
- uint res = uvec2(imageSize(arg_0)).x;
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
void compute_main() {
- textureDimensions_f406ff();
+ prevent_dce.inner = textureDimensions_f406ff();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uint prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2D arg_0;
+uint textureDimensions_f406ff() {
+ uint res = uvec2(imageSize(arg_0)).x;
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f406ff();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.msl
index 96a6b56..f1000bc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f406ff(texture1d<float, access::read_write> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_f406ff(texture1d<float, access::read_write> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f406ff(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f406ff(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read_write> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_f406ff(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f406ff(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f406ff(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f406ff(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.spvasm
index cedb5d8..3478e1a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,71 +21,98 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f406ff "textureDimensions_f406ff"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f406ff = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_f406ff = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_f406ff
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_f406ff
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_f406ff
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_f406ff
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_f406ff
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_f406ff
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.wgsl
index 28d6876..499d03d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f406ff.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<rgba8unorm, read_write>;
-fn textureDimensions_f406ff() {
+fn textureDimensions_f406ff() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f406ff();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_f406ff();
+ prevent_dce = textureDimensions_f406ff();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f406ff();
+ prevent_dce = textureDimensions_f406ff();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f406ff();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl
index 36a8c18..0056919 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32sint, read>;
// fn textureDimensions(texture: texture_storage_3d<rgba32sint, read>) -> vec3<u32>
-fn textureDimensions_f4321c() {
+fn textureDimensions_f4321c() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f4321c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f4321c();
+ prevent_dce = textureDimensions_f4321c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f4321c();
+ prevent_dce = textureDimensions_f4321c();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f4321c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.dxc.hlsl
index b6f6290..29bcef3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f4321c() {
+uint3 textureDimensions_f4321c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f4321c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f4321c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f4321c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f4321c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f4321c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f4321c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.fxc.hlsl
index b6f6290..29bcef3 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture3D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f4321c() {
+uint3 textureDimensions_f4321c() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f4321c();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f4321c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f4321c()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f4321c();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f4321c()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f4321c();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.glsl
index 75d2b03..b569bca 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32i) uniform highp readonly iimage3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_f4321c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f4321c();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_f4321c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_f4321c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f4321c();
+ prevent_dce.inner = textureDimensions_f4321c();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_f4321c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_f4321c() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_f4321c();
+ prevent_dce.inner = textureDimensions_f4321c();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32i) uniform highp readonly iimage3D arg_0;
+uvec3 textureDimensions_f4321c() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f4321c();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.msl
index 4bb01b2..1c4c5b2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f4321c(texture3d<int, access::read> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_f4321c(texture3d<int, access::read> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_f4321c(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_f4321c(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<int, access::read> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_f4321c(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f4321c(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<int, access::read> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f4321c(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<int, access::read> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f4321c(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.spvasm
index d380b8d..885df1b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f4321c "textureDimensions_f4321c"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 3D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %26 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f4321c = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v3uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %30 = OpLoad %v3uint %res
- OpStore %29 %30
+%textureDimensions_f4321c = OpFunction %v3uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v3uint %25
+ OpStore %res %24
+ %28 = OpLoad %v3uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v3uint %textureDimensions_f4321c
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_f4321c
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v3uint %textureDimensions_f4321c
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %52 = OpFunctionCall %v3uint %textureDimensions_f4321c
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v3uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_f4321c
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_f4321c
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.wgsl
index d142023..b8f0b9b 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4321c.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32sint, read>;
-fn textureDimensions_f4321c() {
+fn textureDimensions_f4321c() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f4321c();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f4321c();
+ prevent_dce = textureDimensions_f4321c();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f4321c();
+ prevent_dce = textureDimensions_f4321c();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f4321c();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl
index 2f7e86f..e06b477 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32sint, read>;
// fn textureDimensions(texture: texture_storage_2d<rgba32sint, read>) -> vec2<u32>
-fn textureDimensions_f48886() {
+fn textureDimensions_f48886() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f48886();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f48886();
+ prevent_dce = textureDimensions_f48886();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f48886();
+ prevent_dce = textureDimensions_f48886();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f48886();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.dxc.hlsl
index 592dd64..b9f9b60 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f48886() {
+uint2 textureDimensions_f48886() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f48886();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f48886();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f48886()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f48886();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f48886()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f48886();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.fxc.hlsl
index 592dd64..b9f9b60 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f48886() {
+uint2 textureDimensions_f48886() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f48886();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f48886();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f48886()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f48886();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f48886()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f48886();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.glsl
index 862fd59..e19d416 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp readonly iimage2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_f48886() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f48886();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_f48886() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f48886() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f48886();
+ prevent_dce.inner = textureDimensions_f48886();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_f48886() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f48886() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_f48886();
+ prevent_dce.inner = textureDimensions_f48886();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32i) uniform highp readonly iimage2D arg_0;
+uvec2 textureDimensions_f48886() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f48886();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.msl
index c83049a..6f03232 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f48886(texture2d<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_f48886(texture2d<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f48886(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f48886(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_f48886(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f48886(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f48886(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f48886(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.spvasm
index bf126b2..1cd24ce 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 60
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f48886 "textureDimensions_f48886"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %26 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %29 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %31 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %41 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %47 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f48886 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %26
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySize %v2uint %23
- OpStore %res %22
- %29 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %30 = OpLoad %v2uint %res
- OpStore %29 %30
+%textureDimensions_f48886 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySize %v2uint %25
+ OpStore %res %24
+ %28 = OpLoad %v2uint %res
+ OpReturnValue %28
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %29
+ %32 = OpLabel
+ %35 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %36 = OpFunctionCall %v2uint %textureDimensions_f48886
+ OpStore %35 %36
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
- %33 = OpLabel
- %34 = OpFunctionCall %void %textureDimensions_f48886
- OpReturnValue %5
+%compute_main = OpFunction %void None %29
+ %38 = OpLabel
+ %39 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %40 = OpFunctionCall %v2uint %textureDimensions_f48886
+ OpStore %39 %40
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %36 = OpLabel
- %37 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %37
+%vertex_main_inner = OpFunction %VertexOutput None %41
+ %44 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %47
+ %49 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %49 %5
+ %51 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %52 = OpFunctionCall %v2uint %textureDimensions_f48886
+ OpStore %51 %52
+ %53 = OpLoad %VertexOutput %out
+ OpReturnValue %53
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %29
+ %55 = OpLabel
+ %56 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %57 = OpCompositeExtract %v4float %56 0
+ OpStore %pos_1 %57
+ %58 = OpCompositeExtract %v2uint %56 1
+ OpStore %prevent_dce_1 %58
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_f48886
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %void %textureDimensions_f48886
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.wgsl
index a42d17e..a7612b4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f48886.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32sint, read>;
-fn textureDimensions_f48886() {
+fn textureDimensions_f48886() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f48886();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f48886();
+ prevent_dce = textureDimensions_f48886();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f48886();
+ prevent_dce = textureDimensions_f48886();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f48886();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl
index 5a853a9..a2926f7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rgba32float, write>;
// fn textureDimensions(texture: texture_storage_2d<rgba32float, write>) -> vec2<u32>
-fn textureDimensions_f4e469() {
+fn textureDimensions_f4e469() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f4e469();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f4e469();
+ prevent_dce = textureDimensions_f4e469();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f4e469();
+ prevent_dce = textureDimensions_f4e469();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f4e469();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.dxc.hlsl
index b82794c..ef2c13e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f4e469() {
+uint2 textureDimensions_f4e469() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f4e469();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f4e469();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f4e469()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f4e469();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f4e469()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f4e469();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.fxc.hlsl
index b82794c..ef2c13e 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f4e469() {
+uint2 textureDimensions_f4e469() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f4e469();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f4e469();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f4e469()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f4e469();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f4e469()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f4e469();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.glsl
index f959265..593a21c 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32f) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_f4e469() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f4e469();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_f4e469() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f4e469() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f4e469();
+ prevent_dce.inner = textureDimensions_f4e469();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_f4e469() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f4e469() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_f4e469();
+ prevent_dce.inner = textureDimensions_f4e469();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32f) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_f4e469() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f4e469();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.msl
index 2e79cec..4ad77e1 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f4e469(texture2d<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_f4e469(texture2d<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f4e469(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f4e469(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_f4e469(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f4e469(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f4e469(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f4e469(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.spvasm
index e5009f6..362d6b6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f4e469 "textureDimensions_f4e469"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f4e469 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_f4e469 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_f4e469
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_f4e469
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_f4e469
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_f4e469
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_f4e469
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_f4e469
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.wgsl
index c1d15a0..1f9d68a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f4e469.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rgba32float, write>;
-fn textureDimensions_f4e469() {
+fn textureDimensions_f4e469() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f4e469();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f4e469();
+ prevent_dce = textureDimensions_f4e469();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f4e469();
+ prevent_dce = textureDimensions_f4e469();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f4e469();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl
index 6cad56a..4f9e3dd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba8snorm, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba8snorm, read_write>) -> vec3<u32>
-fn textureDimensions_f55a94() {
+fn textureDimensions_f55a94() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f55a94();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f55a94();
+ prevent_dce = textureDimensions_f55a94();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f55a94();
+ prevent_dce = textureDimensions_f55a94();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f55a94();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.dxc.hlsl
index e52619e..b40b0c2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f55a94() {
+uint3 textureDimensions_f55a94() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f55a94();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f55a94();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f55a94()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f55a94();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f55a94()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f55a94();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.fxc.hlsl
index e52619e..b40b0c2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f55a94() {
+uint3 textureDimensions_f55a94() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f55a94();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f55a94();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f55a94()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f55a94();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f55a94()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f55a94();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.glsl
index 45cb45d..2996970 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba8_snorm) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_f55a94() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f55a94();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8_snorm) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f55a94() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_f55a94() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f55a94();
+ prevent_dce.inner = textureDimensions_f55a94();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba8_snorm) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f55a94() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_f55a94() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_f55a94();
+ prevent_dce.inner = textureDimensions_f55a94();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba8_snorm) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f55a94() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f55a94();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.msl
index 61c2620..891c6ac 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f55a94(texture3d<float, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_f55a94(texture3d<float, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_f55a94(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_f55a94(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_f55a94(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f55a94(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f55a94(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f55a94(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.spvasm
index 7c055f4..75c6a6f 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f55a94 "textureDimensions_f55a94"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba8Snorm
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f55a94 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_f55a94 = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_f55a94
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_f55a94
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_f55a94
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_f55a94
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_f55a94
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_f55a94
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.wgsl
index 6a7891d..f75ba84 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f55a94.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba8snorm, read_write>;
-fn textureDimensions_f55a94() {
+fn textureDimensions_f55a94() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f55a94();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f55a94();
+ prevent_dce = textureDimensions_f55a94();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f55a94();
+ prevent_dce = textureDimensions_f55a94();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f55a94();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl
index d8714dd..70043fb 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_cube<i32>;
// fn textureDimensions(texture: texture_cube<i32>) -> vec2<u32>
-fn textureDimensions_f626b3() {
+fn textureDimensions_f626b3() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f626b3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f626b3();
+ prevent_dce = textureDimensions_f626b3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f626b3();
+ prevent_dce = textureDimensions_f626b3();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f626b3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.dxc.hlsl
index 7f75553..3839781 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
TextureCube<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f626b3() {
+uint2 textureDimensions_f626b3() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f626b3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f626b3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f626b3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f626b3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f626b3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f626b3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.fxc.hlsl
index 7f75553..3839781 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
TextureCube<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f626b3() {
+uint2 textureDimensions_f626b3() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f626b3();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f626b3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f626b3()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f626b3();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f626b3()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f626b3();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.glsl
index d5787af..b1cd522 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp isamplerCube arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_f626b3() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f626b3();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_f626b3() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f626b3() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f626b3();
+ prevent_dce.inner = textureDimensions_f626b3();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_f626b3() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f626b3() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_f626b3();
+ prevent_dce.inner = textureDimensions_f626b3();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isamplerCube arg_0_1;
+uvec2 textureDimensions_f626b3() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f626b3();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.msl
index fd4a2d3..0698add 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f626b3(texturecube<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_f626b3(texturecube<int, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texturecube<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f626b3(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texturecube<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f626b3(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texturecube<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_f626b3(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texturecube<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f626b3(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texturecube<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texturecube<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texturecube<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f626b3(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texturecube<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f626b3(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.spvasm
index cc01fdd..543a932 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f626b3 "textureDimensions_f626b3"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int Cube 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int Cube 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f626b3 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v2uint %23 %int_0
- OpStore %res %22
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_f626b3 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v2uint %25 %int_0
+ OpStore %res %24
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_f626b3
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_f626b3
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_f626b3
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_f626b3
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_f626b3
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_f626b3
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.wgsl
index b0a3fae..c27b05a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f626b3.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_cube<i32>;
-fn textureDimensions_f626b3() {
+fn textureDimensions_f626b3() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f626b3();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f626b3();
+ prevent_dce = textureDimensions_f626b3();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f626b3();
+ prevent_dce = textureDimensions_f626b3();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f626b3();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl
index f788227..2963e50 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d_array<rgba32sint, read>;
// fn textureDimensions(texture: texture_storage_2d_array<rgba32sint, read>) -> vec2<u32>
-fn textureDimensions_f7bac5() {
+fn textureDimensions_f7bac5() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f7bac5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f7bac5();
+ prevent_dce = textureDimensions_f7bac5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f7bac5();
+ prevent_dce = textureDimensions_f7bac5();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f7bac5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.dxc.hlsl
index 5beff36..c79f113 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f7bac5() {
+uint2 textureDimensions_f7bac5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f7bac5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f7bac5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f7bac5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f7bac5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f7bac5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f7bac5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.fxc.hlsl
index 5beff36..c79f113 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f7bac5() {
+uint2 textureDimensions_f7bac5() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f7bac5();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f7bac5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f7bac5()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f7bac5();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f7bac5()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f7bac5();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.glsl
index 4fefbb8..90a50f2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba32i) uniform highp readonly iimage2DArray arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_f7bac5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f7bac5();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_f7bac5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f7bac5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f7bac5();
+ prevent_dce.inner = textureDimensions_f7bac5();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba32i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_f7bac5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f7bac5() {
- uvec2 res = uvec2(imageSize(arg_0).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_f7bac5();
+ prevent_dce.inner = textureDimensions_f7bac5();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba32i) uniform highp readonly iimage2DArray arg_0;
+uvec2 textureDimensions_f7bac5() {
+ uvec2 res = uvec2(imageSize(arg_0).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f7bac5();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.msl
index 62f5af6..22c8c7a 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f7bac5(texture2d_array<int, access::read> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_f7bac5(texture2d_array<int, access::read> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f7bac5(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f7bac5(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::read> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_f7bac5(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f7bac5(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::read> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f7bac5(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::read> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f7bac5(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.spvasm
index 4897baf..3fd04d6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 62
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,76 +20,103 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f7bac5 "textureDimensions_f7bac5"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 2 Rgba32i
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %28 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %31 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %33 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %43 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %49 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f7bac5 = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %28
- %25 = OpLoad %11 %arg_0
- %23 = OpImageQuerySize %v3uint %25
- %22 = OpVectorShuffle %v2uint %23 %23 0 1
- OpStore %res %22
- %31 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %32 = OpLoad %v2uint %res
- OpStore %31 %32
+%textureDimensions_f7bac5 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %27 = OpLoad %16 %arg_0
+ %25 = OpImageQuerySize %v3uint %27
+ %24 = OpVectorShuffle %v2uint %25 %25 0 1
+ OpStore %res %24
+ %30 = OpLoad %v2uint %res
+ OpReturnValue %30
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %31
+ %34 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %v2uint %textureDimensions_f7bac5
+ OpStore %37 %38
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
- %35 = OpLabel
- %36 = OpFunctionCall %void %textureDimensions_f7bac5
- OpReturnValue %5
+%compute_main = OpFunction %void None %31
+ %40 = OpLabel
+ %41 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %42 = OpFunctionCall %v2uint %textureDimensions_f7bac5
+ OpStore %41 %42
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %38 = OpLabel
- %39 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %39
+%vertex_main_inner = OpFunction %VertexOutput None %43
+ %46 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %49
+ %51 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %51 %5
+ %53 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %54 = OpFunctionCall %v2uint %textureDimensions_f7bac5
+ OpStore %53 %54
+ %55 = OpLoad %VertexOutput %out
+ OpReturnValue %55
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %31
+ %57 = OpLabel
+ %58 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %59 = OpCompositeExtract %v4float %58 0
+ OpStore %pos_1 %59
+ %60 = OpCompositeExtract %v2uint %58 1
+ OpStore %prevent_dce_1 %60
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_f7bac5
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %45 = OpLabel
- %46 = OpFunctionCall %void %textureDimensions_f7bac5
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.wgsl
index 7fed277..3447353 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f7bac5.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d_array<rgba32sint, read>;
-fn textureDimensions_f7bac5() {
+fn textureDimensions_f7bac5() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f7bac5();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f7bac5();
+ prevent_dce = textureDimensions_f7bac5();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f7bac5();
+ prevent_dce = textureDimensions_f7bac5();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f7bac5();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl
index fedd00b..9c548f7 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_2d<i32>;
// fn textureDimensions(texture: texture_2d<i32>) -> vec2<u32>
-fn textureDimensions_f8522e() {
+fn textureDimensions_f8522e() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f8522e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f8522e();
+ prevent_dce = textureDimensions_f8522e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f8522e();
+ prevent_dce = textureDimensions_f8522e();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f8522e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.dxc.hlsl
index 12fab86..1f65e99 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f8522e() {
+uint2 textureDimensions_f8522e() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f8522e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f8522e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f8522e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f8522e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f8522e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f8522e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.fxc.hlsl
index 12fab86..1f65e99 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture2D<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f8522e() {
+uint2 textureDimensions_f8522e() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f8522e();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f8522e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f8522e()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f8522e();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f8522e()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f8522e();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.glsl
index a90f6a4..06b22af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-uniform highp isampler2D arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_f8522e() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f8522e();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_f8522e() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f8522e() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f8522e();
+ prevent_dce.inner = textureDimensions_f8522e();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_f8522e() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_f8522e() {
- uvec2 res = uvec2(textureSize(arg_0_1, 0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_f8522e();
+ prevent_dce.inner = textureDimensions_f8522e();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isampler2D arg_0_1;
+uvec2 textureDimensions_f8522e() {
+ uvec2 res = uvec2(textureSize(arg_0_1, 0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f8522e();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.msl
index 30cefbb..f2ec7d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f8522e(texture2d<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_f8522e(texture2d<int, access::sample> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f8522e(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f8522e(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_f8522e(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f8522e(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f8522e(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f8522e(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.spvasm
index b7c21ee..8c8c3af 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 61
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,74 +20,101 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f8522e "textureDimensions_f8522e"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 0 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 0 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%int_0 = OpConstant %int 0
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %27 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %30 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %32 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %42 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %48 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f8522e = OpFunction %void None %18
- %21 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %27
- %23 = OpLoad %11 %arg_0
- %22 = OpImageQuerySizeLod %v2uint %23 %int_0
- OpStore %res %22
- %30 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %31 = OpLoad %v2uint %res
- OpStore %30 %31
+%textureDimensions_f8522e = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %25 = OpLoad %16 %arg_0
+ %24 = OpImageQuerySizeLod %v2uint %25 %int_0
+ OpStore %res %24
+ %29 = OpLoad %v2uint %res
+ OpReturnValue %29
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %30
+ %33 = OpLabel
+ %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %37 = OpFunctionCall %v2uint %textureDimensions_f8522e
+ OpStore %36 %37
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
- %34 = OpLabel
- %35 = OpFunctionCall %void %textureDimensions_f8522e
- OpReturnValue %5
+%compute_main = OpFunction %void None %30
+ %39 = OpLabel
+ %40 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %41 = OpFunctionCall %v2uint %textureDimensions_f8522e
+ OpStore %40 %41
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %37 = OpLabel
- %38 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %38
+%vertex_main_inner = OpFunction %VertexOutput None %42
+ %45 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %48
+ %50 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %50 %5
+ %52 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %53 = OpFunctionCall %v2uint %textureDimensions_f8522e
+ OpStore %52 %53
+ %54 = OpLoad %VertexOutput %out
+ OpReturnValue %54
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %30
+ %56 = OpLabel
+ %57 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %58 = OpCompositeExtract %v4float %57 0
+ OpStore %pos_1 %58
+ %59 = OpCompositeExtract %v2uint %57 1
+ OpStore %prevent_dce_1 %59
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_f8522e
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %44 = OpLabel
- %45 = OpFunctionCall %void %textureDimensions_f8522e
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.wgsl
index bc0a02f..e74a234 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f8522e.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_2d<i32>;
-fn textureDimensions_f8522e() {
+fn textureDimensions_f8522e() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f8522e();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f8522e();
+ prevent_dce = textureDimensions_f8522e();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f8522e();
+ prevent_dce = textureDimensions_f8522e();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f8522e();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl
index a7412ba..5f67c02 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_3d<rgba32float, read_write>;
// fn textureDimensions(texture: texture_storage_3d<rgba32float, read_write>) -> vec3<u32>
-fn textureDimensions_f93ece() {
+fn textureDimensions_f93ece() -> vec3<u32>{
var res: vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f93ece();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f93ece();
+ prevent_dce = textureDimensions_f93ece();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f93ece();
+ prevent_dce = textureDimensions_f93ece();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec3<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f93ece();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.dxc.hlsl
index 6a07e36..e1431dd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f93ece() {
+uint3 textureDimensions_f93ece() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f93ece();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f93ece();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f93ece()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f93ece();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f93ece()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f93ece();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.fxc.hlsl
index 6a07e36..e1431dd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture3D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f93ece() {
+uint3 textureDimensions_f93ece() {
uint3 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y, tint_tmp.z);
uint3 res = tint_tmp;
- prevent_dce.Store3(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f93ece();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f93ece();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f93ece()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f93ece();
+ prevent_dce.Store3(0u, asuint(textureDimensions_f93ece()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint3 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f93ece();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.glsl
index 9431740..60f10ec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-layout(rgba32f) uniform highp writeonly image3D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec3 inner;
- uint pad;
-} prevent_dce;
-
-void textureDimensions_f93ece() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_f93ece();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f93ece() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_f93ece() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void fragment_main() {
- textureDimensions_f93ece();
+ prevent_dce.inner = textureDimensions_f93ece();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
layout(rgba32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f93ece() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec3 inner;
uint pad;
} prevent_dce;
-void textureDimensions_f93ece() {
- uvec3 res = uvec3(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
void compute_main() {
- textureDimensions_f93ece();
+ prevent_dce.inner = textureDimensions_f93ece();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec3 prevent_dce_1;
+layout(rgba32f) uniform highp writeonly image3D arg_0;
+uvec3 textureDimensions_f93ece() {
+ uvec3 res = uvec3(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec3 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec3(0u, 0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_f93ece();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.msl
index 310fc12..36eeb65 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f93ece(texture3d<float, access::read_write> tint_symbol_1, device packed_uint3* const tint_symbol_2) {
+uint3 textureDimensions_f93ece(texture3d<float, access::read_write> tint_symbol_1) {
uint3 res = uint3(tint_symbol_1.get_width(), tint_symbol_1.get_height(), tint_symbol_1.get_depth());
- *(tint_symbol_2) = packed_uint3(res);
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device packed_uint3* tint_symbol_2 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = packed_uint3(textureDimensions_f93ece(tint_symbol_3));
+ return;
+}
+
+kernel void compute_main(device packed_uint3* tint_symbol_4 [[buffer(0)]], texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = packed_uint3(textureDimensions_f93ece(tint_symbol_5));
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint3 prevent_dce;
};
-float4 vertex_main_inner(texture3d<float, access::read_write> tint_symbol_3, device packed_uint3* const tint_symbol_4) {
- textureDimensions_f93ece(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint3 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture3d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f93ece(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_5 [[texture(0)]], device packed_uint3* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture3d<float, access::read_write> tint_symbol_7 [[texture(0)]], device packed_uint3* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f93ece(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture3d<float, access::read_write> tint_symbol_9 [[texture(0)]], device packed_uint3* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f93ece(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.spvasm
index 0d892aa..ce54533 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,72 +20,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f93ece "textureDimensions_f93ece"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v3uint = OpTypeVector %uint 3
+%_ptr_Output_v3uint = OpTypePointer Output %v3uint
+ %10 = OpConstantNull %v3uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v3uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 3D 0 0 0 2 Rgba32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v3uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v3uint
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
- %25 = OpConstantNull %v3uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v3uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f93ece = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v3uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v3uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
- %29 = OpLoad %v3uint %res
- OpStore %28 %29
+%textureDimensions_f93ece = OpFunction %v3uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v3uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v3uint %24
+ OpStore %res %23
+ %27 = OpLoad %v3uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v3uint %textureDimensions_f93ece
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_f93ece
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v3uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v3uint %textureDimensions_f93ece
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v3uint %out %uint_1
+ %51 = OpFunctionCall %v3uint %textureDimensions_f93ece
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v3uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_f93ece
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_f93ece
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.wgsl
index 117d18c..478c081 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f93ece.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_3d<rgba32float, read_write>;
-fn textureDimensions_f93ece() {
+fn textureDimensions_f93ece() -> vec3<u32> {
var res : vec3<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f93ece();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec3<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f93ece();
+ prevent_dce = textureDimensions_f93ece();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f93ece();
+ prevent_dce = textureDimensions_f93ece();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec3<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f93ece();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl
index ec3c612..4c4c621 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<rg32float, read_write>;
// fn textureDimensions(texture: texture_storage_2d<rg32float, read_write>) -> vec2<u32>
-fn textureDimensions_f94e55() {
+fn textureDimensions_f94e55() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f94e55();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f94e55();
+ prevent_dce = textureDimensions_f94e55();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f94e55();
+ prevent_dce = textureDimensions_f94e55();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f94e55();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.dxc.hlsl
index 78f14ef..88d75f0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f94e55() {
+uint2 textureDimensions_f94e55() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f94e55();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f94e55();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f94e55()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f94e55();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f94e55()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f94e55();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.fxc.hlsl
index 78f14ef..88d75f0 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_f94e55() {
+uint2 textureDimensions_f94e55() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_f94e55();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_f94e55();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f94e55()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_f94e55();
+ prevent_dce.Store2(0u, asuint(textureDimensions_f94e55()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_f94e55();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.msl
index 4a9aa27..ad8856d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_f94e55(texture2d<float, access::read_write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_f94e55(texture2d<float, access::read_write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_f94e55(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_f94e55(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::read_write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_f94e55(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::read_write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_f94e55(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::read_write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_f94e55(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::read_write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_f94e55(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.spvasm
index 13b77db..795d6e5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.spvasm
@@ -1,18 +1,19 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,72 +21,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_f94e55 "textureDimensions_f94e55"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rg32f
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rg32f
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_f94e55 = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_f94e55 = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_f94e55
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_f94e55
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_f94e55
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_f94e55
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_f94e55
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_f94e55
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.wgsl
index 5428a00..ff56a80 100644
--- a/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/f94e55.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<rg32float, read_write>;
-fn textureDimensions_f94e55() {
+fn textureDimensions_f94e55() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_f94e55();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_f94e55();
+ prevent_dce = textureDimensions_f94e55();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_f94e55();
+ prevent_dce = textureDimensions_f94e55();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_f94e55();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl
index adc80e7..7d263d8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl
@@ -37,24 +37,31 @@
@group(1) @binding(0) var arg_0: texture_storage_2d<bgra8unorm, write>;
// fn textureDimensions(texture: texture_storage_2d<bgra8unorm, write>) -> vec2<u32>
-fn textureDimensions_fbb15a() {
+fn textureDimensions_fbb15a() -> vec2<u32>{
var res: vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_fbb15a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_fbb15a();
+ prevent_dce = textureDimensions_fbb15a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_fbb15a();
+ prevent_dce = textureDimensions_fbb15a();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_fbb15a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.dxc.hlsl
index 6374012..1abecd5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_fbb15a() {
+uint2 textureDimensions_fbb15a() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_fbb15a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_fbb15a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_fbb15a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_fbb15a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_fbb15a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_fbb15a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.fxc.hlsl
index 6374012..1abecd5 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
RWTexture2D<float4> arg_0 : register(u0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_fbb15a() {
+uint2 textureDimensions_fbb15a() {
uint2 tint_tmp;
arg_0.GetDimensions(tint_tmp.x, tint_tmp.y);
uint2 res = tint_tmp;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_fbb15a();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_fbb15a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_fbb15a()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_fbb15a();
+ prevent_dce.Store2(0u, asuint(textureDimensions_fbb15a()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_fbb15a();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.glsl
index b802aec..7d167ec 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.glsl
@@ -1,44 +1,24 @@
#version 310 es
-
-layout(rgba8) uniform highp writeonly image2D arg_0;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_fbb15a() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_fbb15a();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_fbb15a() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_fbb15a() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_fbb15a();
+ prevent_dce.inner = textureDimensions_fbb15a();
}
void main() {
@@ -48,17 +28,22 @@
#version 310 es
layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_fbb15a() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_fbb15a() {
- uvec2 res = uvec2(imageSize(arg_0));
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_fbb15a();
+ prevent_dce.inner = textureDimensions_fbb15a();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -66,3 +51,33 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+layout(rgba8) uniform highp writeonly image2D arg_0;
+uvec2 textureDimensions_fbb15a() {
+ uvec2 res = uvec2(imageSize(arg_0));
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_fbb15a();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.msl
index 1767300..88a7d6d 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_fbb15a(texture2d<float, access::write> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_fbb15a(texture2d<float, access::write> tint_symbol_1) {
uint2 res = uint2(tint_symbol_1.get_width(), tint_symbol_1.get_height());
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d<float, access::write> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_fbb15a(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d<float, access::write> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_fbb15a(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d<float, access::write> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_fbb15a(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d<float, access::write> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_fbb15a(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d<float, access::write> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_fbb15a(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d<float, access::write> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_fbb15a(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.spvasm
index c642386..5083941 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 59
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -19,73 +20,100 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_fbb15a "textureDimensions_fbb15a"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonReadable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 2D 0 0 0 2 Rgba8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %16 = OpTypeImage %float 2D 0 0 0 2 Rgba8
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %17 = OpTypeFunction %void
+ %20 = OpTypeFunction %v2uint
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %25 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %28 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %30 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %40 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %46 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_fbb15a = OpFunction %void None %17
- %20 = OpLabel
- %res = OpVariable %_ptr_Function_v2uint Function %25
- %22 = OpLoad %11 %arg_0
- %21 = OpImageQuerySize %v2uint %22
- OpStore %res %21
- %28 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %29 = OpLoad %v2uint %res
- OpStore %28 %29
+%textureDimensions_fbb15a = OpFunction %v2uint None %20
+ %22 = OpLabel
+ %res = OpVariable %_ptr_Function_v2uint Function %10
+ %24 = OpLoad %16 %arg_0
+ %23 = OpImageQuerySize %v2uint %24
+ OpStore %res %23
+ %27 = OpLoad %v2uint %res
+ OpReturnValue %27
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %28
+ %31 = OpLabel
+ %34 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %35 = OpFunctionCall %v2uint %textureDimensions_fbb15a
+ OpStore %34 %35
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
- %32 = OpLabel
- %33 = OpFunctionCall %void %textureDimensions_fbb15a
- OpReturnValue %5
+%compute_main = OpFunction %void None %28
+ %37 = OpLabel
+ %38 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %39 = OpFunctionCall %v2uint %textureDimensions_fbb15a
+ OpStore %38 %39
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %17
- %35 = OpLabel
- %36 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %36
+%vertex_main_inner = OpFunction %VertexOutput None %40
+ %43 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %46
+ %48 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %48 %5
+ %50 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %51 = OpFunctionCall %v2uint %textureDimensions_fbb15a
+ OpStore %50 %51
+ %52 = OpLoad %VertexOutput %out
+ OpReturnValue %52
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %28
+ %54 = OpLabel
+ %55 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %56 = OpCompositeExtract %v4float %55 0
+ OpStore %pos_1 %56
+ %57 = OpCompositeExtract %v2uint %55 1
+ OpStore %prevent_dce_1 %57
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %17
- %39 = OpLabel
- %40 = OpFunctionCall %void %textureDimensions_fbb15a
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %17
- %42 = OpLabel
- %43 = OpFunctionCall %void %textureDimensions_fbb15a
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.wgsl
index 038ae07..f68c163 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fbb15a.wgsl.expected.wgsl
@@ -1,24 +1,33 @@
@group(1) @binding(0) var arg_0 : texture_storage_2d<bgra8unorm, write>;
-fn textureDimensions_fbb15a() {
+fn textureDimensions_fbb15a() -> vec2<u32> {
var res : vec2<u32> = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_fbb15a();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_fbb15a();
+ prevent_dce = textureDimensions_fbb15a();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_fbb15a();
+ prevent_dce = textureDimensions_fbb15a();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_fbb15a();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl
index c94b03f..a2550f6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl
@@ -39,24 +39,31 @@
@group(1) @binding(0) var arg_0: texture_storage_1d<r8unorm, read>;
// fn textureDimensions(texture: texture_storage_1d<r8unorm, read>) -> u32
-fn textureDimensions_fdbae8() {
+fn textureDimensions_fdbae8() -> u32{
var res: u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_fdbae8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_fdbae8();
+ prevent_dce = textureDimensions_fdbae8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_fdbae8();
+ prevent_dce = textureDimensions_fdbae8();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : u32
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_fdbae8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.dxc.hlsl
index 2bdaafe..cc4fec2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.dxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_fdbae8() {
+uint textureDimensions_fdbae8() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_fdbae8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_fdbae8();
+ prevent_dce.Store(0u, asuint(textureDimensions_fdbae8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_fdbae8();
+ prevent_dce.Store(0u, asuint(textureDimensions_fdbae8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_fdbae8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.fxc.hlsl
index 2bdaafe..cc4fec2 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.fxc.hlsl
@@ -1,36 +1,45 @@
Texture1D<float4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_fdbae8() {
+uint textureDimensions_fdbae8() {
uint tint_tmp;
arg_0.GetDimensions(tint_tmp);
uint res = tint_tmp;
- prevent_dce.Store(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_fdbae8();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_fdbae8();
+ prevent_dce.Store(0u, asuint(textureDimensions_fdbae8()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_fdbae8();
+ prevent_dce.Store(0u, asuint(textureDimensions_fdbae8()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_fdbae8();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.msl
index 5bbf3e2..afbe075 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.msl
@@ -1,34 +1,43 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_fdbae8(texture1d<float, access::read> tint_symbol_1, device uint* const tint_symbol_2) {
+uint textureDimensions_fdbae8(texture1d<float, access::read> tint_symbol_1) {
uint res = tint_symbol_1.get_width(0);
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint* tint_symbol_2 [[buffer(0)]], texture1d<float, access::read> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_fdbae8(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint* tint_symbol_4 [[buffer(0)]], texture1d<float, access::read> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_fdbae8(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint prevent_dce;
};
-float4 vertex_main_inner(texture1d<float, access::read> tint_symbol_3, device uint* const tint_symbol_4) {
- textureDimensions_fdbae8(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture1d<float, access::read> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_fdbae8(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_5 [[texture(0)]], device uint* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture1d<float, access::read> tint_symbol_7 [[texture(0)]], device uint* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_fdbae8(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture1d<float, access::read> tint_symbol_9 [[texture(0)]], device uint* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_fdbae8(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.spvasm
index ab89525..5c28360 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.spvasm
@@ -1,19 +1,20 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 58
; Schema: 0
OpCapability Shader
OpCapability Image1D
OpCapability StorageImageExtendedFormats
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -21,72 +22,99 @@
OpName %prevent_dce "prevent_dce"
OpName %textureDimensions_fdbae8 "textureDimensions_fdbae8"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 NonWritable
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %11 = OpTypeImage %float 1D 0 0 0 2 R8
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
+%_ptr_Output_uint = OpTypePointer Output %uint
+ %9 = OpConstantNull %uint
+%prevent_dce_1 = OpVariable %_ptr_Output_uint Output %9
+%_ptr_Output_float = OpTypePointer Output %float
+ %12 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %12
+ %15 = OpTypeImage %float 1D 0 0 0 2 R8
+%_ptr_UniformConstant_15 = OpTypePointer UniformConstant %15
+ %arg_0 = OpVariable %_ptr_UniformConstant_15 UniformConstant
%prevent_dce_block = OpTypeStruct %uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %16 = OpTypeFunction %void
+ %19 = OpTypeFunction %uint
%_ptr_Function_uint = OpTypePointer Function %uint
- %24 = OpConstantNull %uint
+ %void = OpTypeVoid
+ %27 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
- %29 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %uint
+ %39 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %45 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_fdbae8 = OpFunction %void None %16
- %19 = OpLabel
- %res = OpVariable %_ptr_Function_uint Function %24
- %21 = OpLoad %11 %arg_0
- %20 = OpImageQuerySize %uint %21
- OpStore %res %20
- %27 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
- %28 = OpLoad %uint %res
- OpStore %27 %28
+%textureDimensions_fdbae8 = OpFunction %uint None %19
+ %21 = OpLabel
+ %res = OpVariable %_ptr_Function_uint Function %9
+ %23 = OpLoad %15 %arg_0
+ %22 = OpImageQuerySize %uint %23
+ OpStore %res %22
+ %26 = OpLoad %uint %res
+ OpReturnValue %26
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %27
+ %30 = OpLabel
+ %33 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %34 = OpFunctionCall %uint %textureDimensions_fdbae8
+ OpStore %33 %34
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
- %31 = OpLabel
- %32 = OpFunctionCall %void %textureDimensions_fdbae8
- OpReturnValue %5
+%compute_main = OpFunction %void None %27
+ %36 = OpLabel
+ %37 = OpAccessChain %_ptr_StorageBuffer_uint %prevent_dce %uint_0
+ %38 = OpFunctionCall %uint %textureDimensions_fdbae8
+ OpStore %37 %38
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %16
- %34 = OpLabel
- %35 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %35
+%vertex_main_inner = OpFunction %VertexOutput None %39
+ %42 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %45
+ %47 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %47 %5
+ %49 = OpAccessChain %_ptr_Function_uint %out %uint_1
+ %50 = OpFunctionCall %uint %textureDimensions_fdbae8
+ OpStore %49 %50
+ %51 = OpLoad %VertexOutput %out
+ OpReturnValue %51
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %27
+ %53 = OpLabel
+ %54 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %55 = OpCompositeExtract %v4float %54 0
+ OpStore %pos_1 %55
+ %56 = OpCompositeExtract %uint %54 1
+ OpStore %prevent_dce_1 %56
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %16
- %38 = OpLabel
- %39 = OpFunctionCall %void %textureDimensions_fdbae8
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %16
- %41 = OpLabel
- %42 = OpFunctionCall %void %textureDimensions_fdbae8
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.wgsl
index 81d4d5b..08e2f05 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdbae8.wgsl.expected.wgsl
@@ -2,25 +2,34 @@
@group(1) @binding(0) var arg_0 : texture_storage_1d<r8unorm, read>;
-fn textureDimensions_fdbae8() {
+fn textureDimensions_fdbae8() -> u32 {
var res : u32 = textureDimensions(arg_0);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : u32;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_fdbae8();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : u32;
@fragment
fn fragment_main() {
- textureDimensions_fdbae8();
+ prevent_dce = textureDimensions_fdbae8();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_fdbae8();
+ prevent_dce = textureDimensions_fdbae8();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : u32,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_fdbae8();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl
index 7021764..854fdbd 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl
@@ -37,25 +37,32 @@
@group(1) @binding(0) var arg_0: texture_2d_array<i32>;
// fn textureDimensions(texture: texture_2d_array<i32>, level: i32) -> vec2<u32>
-fn textureDimensions_fdf6e9() {
+fn textureDimensions_fdf6e9() -> vec2<u32>{
var arg_1 = 1i;
var res: vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_fdf6e9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_fdf6e9();
+ prevent_dce = textureDimensions_fdf6e9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_fdf6e9();
+ prevent_dce = textureDimensions_fdf6e9();
+}
+
+struct VertexOutput {
+ @builtin(position) pos: vec4<f32>,
+ @location(0) @interpolate(flat) prevent_dce : vec2<u32>
+};
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_fdf6e9();
+ return out;
}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.dxc.hlsl
index e777edb..68aa5a8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.dxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_fdf6e9() {
+uint2 textureDimensions_fdf6e9() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_fdf6e9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_fdf6e9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_fdf6e9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_fdf6e9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_fdf6e9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_fdf6e9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.fxc.hlsl
index e777edb..68aa5a8 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.fxc.hlsl
@@ -1,37 +1,46 @@
Texture2DArray<int4> arg_0 : register(t0, space1);
-RWByteAddressBuffer prevent_dce : register(u0, space2);
-void textureDimensions_fdf6e9() {
+uint2 textureDimensions_fdf6e9() {
int arg_1 = 1;
uint4 tint_tmp;
arg_0.GetDimensions(arg_1, tint_tmp.x, tint_tmp.y, tint_tmp.z, tint_tmp.w);
uint2 res = tint_tmp.xy;
- prevent_dce.Store2(0u, asuint(res));
+ return res;
}
-struct tint_symbol {
- float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
- textureDimensions_fdf6e9();
- return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
- float4 inner_result = vertex_main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.value = inner_result;
- return wrapper_result;
-}
+RWByteAddressBuffer prevent_dce : register(u0);
void fragment_main() {
- textureDimensions_fdf6e9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_fdf6e9()));
return;
}
[numthreads(1, 1, 1)]
void compute_main() {
- textureDimensions_fdf6e9();
+ prevent_dce.Store2(0u, asuint(textureDimensions_fdf6e9()));
return;
}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
+};
+struct tint_symbol_1 {
+ nointerpolation uint2 prevent_dce : TEXCOORD0;
+ float4 pos : SV_Position;
+};
+
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = (VertexOutput)0;
+ tint_symbol.pos = (0.0f).xxxx;
+ tint_symbol.prevent_dce = textureDimensions_fdf6e9();
+ return tint_symbol;
+}
+
+tint_symbol_1 vertex_main() {
+ VertexOutput inner_result = vertex_main_inner();
+ tint_symbol_1 wrapper_result = (tint_symbol_1)0;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
+ return wrapper_result;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.glsl
index 4443e9a..fcadf32 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.glsl
@@ -1,46 +1,25 @@
#version 310 es
-
-uniform highp isampler2DArray arg_0_1;
-layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
- uvec2 inner;
-} prevent_dce;
-
-void textureDimensions_fdf6e9() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
-
-vec4 vertex_main() {
- textureDimensions_fdf6e9();
- return vec4(0.0f);
-}
-
-void main() {
- gl_PointSize = 1.0;
- vec4 inner_result = vertex_main();
- gl_Position = inner_result;
- gl_Position.y = -(gl_Position.y);
- gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
- return;
-}
-#version 310 es
precision highp float;
precision highp int;
uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_fdf6e9() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_fdf6e9() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void fragment_main() {
- textureDimensions_fdf6e9();
+ prevent_dce.inner = textureDimensions_fdf6e9();
}
void main() {
@@ -50,18 +29,23 @@
#version 310 es
uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_fdf6e9() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
layout(binding = 0, std430) buffer prevent_dce_block_ssbo {
uvec2 inner;
} prevent_dce;
-void textureDimensions_fdf6e9() {
- int arg_1 = 1;
- uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
- prevent_dce.inner = res;
-}
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
void compute_main() {
- textureDimensions_fdf6e9();
+ prevent_dce.inner = textureDimensions_fdf6e9();
}
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
@@ -69,3 +53,34 @@
compute_main();
return;
}
+#version 310 es
+
+layout(location = 0) flat out uvec2 prevent_dce_1;
+uniform highp isampler2DArray arg_0_1;
+uvec2 textureDimensions_fdf6e9() {
+ int arg_1 = 1;
+ uvec2 res = uvec2(textureSize(arg_0_1, arg_1).xy);
+ return res;
+}
+
+struct VertexOutput {
+ vec4 pos;
+ uvec2 prevent_dce;
+};
+
+VertexOutput vertex_main() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f), uvec2(0u, 0u));
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = textureDimensions_fdf6e9();
+ return tint_symbol;
+}
+
+void main() {
+ gl_PointSize = 1.0;
+ VertexOutput inner_result = vertex_main();
+ gl_Position = inner_result.pos;
+ prevent_dce_1 = inner_result.prevent_dce;
+ gl_Position.y = -(gl_Position.y);
+ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+ return;
+}
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.msl b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.msl
index bea8965..7504ce6 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.msl
@@ -1,35 +1,44 @@
#include <metal_stdlib>
using namespace metal;
-void textureDimensions_fdf6e9(texture2d_array<int, access::sample> tint_symbol_1, device uint2* const tint_symbol_2) {
+uint2 textureDimensions_fdf6e9(texture2d_array<int, access::sample> tint_symbol_1) {
int arg_1 = 1;
uint2 res = uint2(tint_symbol_1.get_width(arg_1), tint_symbol_1.get_height(arg_1));
- *(tint_symbol_2) = res;
+ return res;
}
-struct tint_symbol {
- float4 value [[position]];
+fragment void fragment_main(device uint2* tint_symbol_2 [[buffer(0)]], texture2d_array<int, access::sample> tint_symbol_3 [[texture(0)]]) {
+ *(tint_symbol_2) = textureDimensions_fdf6e9(tint_symbol_3);
+ return;
+}
+
+kernel void compute_main(device uint2* tint_symbol_4 [[buffer(0)]], texture2d_array<int, access::sample> tint_symbol_5 [[texture(0)]]) {
+ *(tint_symbol_4) = textureDimensions_fdf6e9(tint_symbol_5);
+ return;
+}
+
+struct VertexOutput {
+ float4 pos;
+ uint2 prevent_dce;
};
-float4 vertex_main_inner(texture2d_array<int, access::sample> tint_symbol_3, device uint2* const tint_symbol_4) {
- textureDimensions_fdf6e9(tint_symbol_3, tint_symbol_4);
- return float4(0.0f);
+struct tint_symbol {
+ uint2 prevent_dce [[user(locn0)]] [[flat]];
+ float4 pos [[position]];
+};
+
+VertexOutput vertex_main_inner(texture2d_array<int, access::sample> tint_symbol_6) {
+ VertexOutput out = {};
+ out.pos = float4(0.0f);
+ out.prevent_dce = textureDimensions_fdf6e9(tint_symbol_6);
+ return out;
}
-vertex tint_symbol vertex_main(texture2d_array<int, access::sample> tint_symbol_5 [[texture(0)]], device uint2* tint_symbol_6 [[buffer(0)]]) {
- float4 const inner_result = vertex_main_inner(tint_symbol_5, tint_symbol_6);
+vertex tint_symbol vertex_main(texture2d_array<int, access::sample> tint_symbol_7 [[texture(0)]]) {
+ VertexOutput const inner_result = vertex_main_inner(tint_symbol_7);
tint_symbol wrapper_result = {};
- wrapper_result.value = inner_result;
+ wrapper_result.pos = inner_result.pos;
+ wrapper_result.prevent_dce = inner_result.prevent_dce;
return wrapper_result;
}
-fragment void fragment_main(texture2d_array<int, access::sample> tint_symbol_7 [[texture(0)]], device uint2* tint_symbol_8 [[buffer(0)]]) {
- textureDimensions_fdf6e9(tint_symbol_7, tint_symbol_8);
- return;
-}
-
-kernel void compute_main(texture2d_array<int, access::sample> tint_symbol_9 [[texture(0)]], device uint2* tint_symbol_10 [[buffer(0)]]) {
- textureDimensions_fdf6e9(tint_symbol_9, tint_symbol_10);
- return;
-}
-
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.spvasm
index 9135df8..0c854e4 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 52
+; Bound: 67
; Schema: 0
OpCapability Shader
OpCapability ImageQuery
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
OpEntryPoint Fragment %fragment_main "fragment_main"
OpEntryPoint GLCompute %compute_main "compute_main"
+ OpEntryPoint Vertex %vertex_main "vertex_main" %pos_1 %prevent_dce_1 %vertex_point_size
OpExecutionMode %fragment_main OriginUpperLeft
OpExecutionMode %compute_main LocalSize 1 1 1
- OpName %value "value"
+ OpName %pos_1 "pos_1"
+ OpName %prevent_dce_1 "prevent_dce_1"
OpName %vertex_point_size "vertex_point_size"
OpName %arg_0 "arg_0"
OpName %prevent_dce_block "prevent_dce_block"
@@ -20,81 +21,108 @@
OpName %textureDimensions_fdf6e9 "textureDimensions_fdf6e9"
OpName %arg_1 "arg_1"
OpName %res "res"
- OpName %vertex_main_inner "vertex_main_inner"
- OpName %vertex_main "vertex_main"
OpName %fragment_main "fragment_main"
OpName %compute_main "compute_main"
- OpDecorate %value BuiltIn Position
+ OpName %VertexOutput "VertexOutput"
+ OpMemberName %VertexOutput 0 "pos"
+ OpMemberName %VertexOutput 1 "prevent_dce"
+ OpName %vertex_main_inner "vertex_main_inner"
+ OpName %out "out"
+ OpName %vertex_main "vertex_main"
+ OpDecorate %pos_1 BuiltIn Position
+ OpDecorate %prevent_dce_1 Location 0
+ OpDecorate %prevent_dce_1 Flat
OpDecorate %vertex_point_size BuiltIn PointSize
OpDecorate %arg_0 DescriptorSet 1
OpDecorate %arg_0 Binding 0
OpDecorate %prevent_dce_block Block
OpMemberDecorate %prevent_dce_block 0 Offset 0
- OpDecorate %prevent_dce DescriptorSet 2
+ OpDecorate %prevent_dce DescriptorSet 0
OpDecorate %prevent_dce Binding 0
+ OpMemberDecorate %VertexOutput 0 Offset 0
+ OpMemberDecorate %VertexOutput 1 Offset 16
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%5 = OpConstantNull %v4float
- %value = OpVariable %_ptr_Output_v4float Output %5
-%_ptr_Output_float = OpTypePointer Output %float
- %8 = OpConstantNull %float
-%vertex_point_size = OpVariable %_ptr_Output_float Output %8
- %int = OpTypeInt 32 1
- %11 = OpTypeImage %int 2D 0 1 0 1 Unknown
-%_ptr_UniformConstant_11 = OpTypePointer UniformConstant %11
- %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
+ %pos_1 = OpVariable %_ptr_Output_v4float Output %5
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
+%_ptr_Output_v2uint = OpTypePointer Output %v2uint
+ %10 = OpConstantNull %v2uint
+%prevent_dce_1 = OpVariable %_ptr_Output_v2uint Output %10
+%_ptr_Output_float = OpTypePointer Output %float
+ %13 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %13
+ %int = OpTypeInt 32 1
+ %16 = OpTypeImage %int 2D 0 1 0 1 Unknown
+%_ptr_UniformConstant_16 = OpTypePointer UniformConstant %16
+ %arg_0 = OpVariable %_ptr_UniformConstant_16 UniformConstant
%prevent_dce_block = OpTypeStruct %v2uint
%_ptr_StorageBuffer_prevent_dce_block = OpTypePointer StorageBuffer %prevent_dce_block
%prevent_dce = OpVariable %_ptr_StorageBuffer_prevent_dce_block StorageBuffer
- %void = OpTypeVoid
- %18 = OpTypeFunction %void
+ %21 = OpTypeFunction %v2uint
%int_1 = OpConstant %int 1
%_ptr_Function_int = OpTypePointer Function %int
- %25 = OpConstantNull %int
+ %27 = OpConstantNull %int
%v3uint = OpTypeVector %uint 3
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
- %33 = OpConstantNull %v2uint
+ %void = OpTypeVoid
+ %36 = OpTypeFunction %void
%uint_0 = OpConstant %uint 0
%_ptr_StorageBuffer_v2uint = OpTypePointer StorageBuffer %v2uint
- %38 = OpTypeFunction %v4float
+%VertexOutput = OpTypeStruct %v4float %v2uint
+ %48 = OpTypeFunction %VertexOutput
+%_ptr_Function_VertexOutput = OpTypePointer Function %VertexOutput
+ %54 = OpConstantNull %VertexOutput
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+ %uint_1 = OpConstant %uint 1
%float_1 = OpConstant %float 1
-%textureDimensions_fdf6e9 = OpFunction %void None %18
- %21 = OpLabel
- %arg_1 = OpVariable %_ptr_Function_int Function %25
- %res = OpVariable %_ptr_Function_v2uint Function %33
+%textureDimensions_fdf6e9 = OpFunction %v2uint None %21
+ %23 = OpLabel
+ %arg_1 = OpVariable %_ptr_Function_int Function %27
+ %res = OpVariable %_ptr_Function_v2uint Function %10
OpStore %arg_1 %int_1
- %29 = OpLoad %11 %arg_0
- %30 = OpLoad %int %arg_1
- %27 = OpImageQuerySizeLod %v3uint %29 %30
- %26 = OpVectorShuffle %v2uint %27 %27 0 1
- OpStore %res %26
- %36 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
- %37 = OpLoad %v2uint %res
- OpStore %36 %37
+ %31 = OpLoad %16 %arg_0
+ %32 = OpLoad %int %arg_1
+ %29 = OpImageQuerySizeLod %v3uint %31 %32
+ %28 = OpVectorShuffle %v2uint %29 %29 0 1
+ OpStore %res %28
+ %35 = OpLoad %v2uint %res
+ OpReturnValue %35
+ OpFunctionEnd
+%fragment_main = OpFunction %void None %36
+ %39 = OpLabel
+ %42 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %43 = OpFunctionCall %v2uint %textureDimensions_fdf6e9
+ OpStore %42 %43
OpReturn
OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %38
- %40 = OpLabel
- %41 = OpFunctionCall %void %textureDimensions_fdf6e9
- OpReturnValue %5
+%compute_main = OpFunction %void None %36
+ %45 = OpLabel
+ %46 = OpAccessChain %_ptr_StorageBuffer_v2uint %prevent_dce %uint_0
+ %47 = OpFunctionCall %v2uint %textureDimensions_fdf6e9
+ OpStore %46 %47
+ OpReturn
OpFunctionEnd
-%vertex_main = OpFunction %void None %18
- %43 = OpLabel
- %44 = OpFunctionCall %v4float %vertex_main_inner
- OpStore %value %44
+%vertex_main_inner = OpFunction %VertexOutput None %48
+ %51 = OpLabel
+ %out = OpVariable %_ptr_Function_VertexOutput Function %54
+ %56 = OpAccessChain %_ptr_Function_v4float %out %uint_0
+ OpStore %56 %5
+ %58 = OpAccessChain %_ptr_Function_v2uint %out %uint_1
+ %59 = OpFunctionCall %v2uint %textureDimensions_fdf6e9
+ OpStore %58 %59
+ %60 = OpLoad %VertexOutput %out
+ OpReturnValue %60
+ OpFunctionEnd
+%vertex_main = OpFunction %void None %36
+ %62 = OpLabel
+ %63 = OpFunctionCall %VertexOutput %vertex_main_inner
+ %64 = OpCompositeExtract %v4float %63 0
+ OpStore %pos_1 %64
+ %65 = OpCompositeExtract %v2uint %63 1
+ OpStore %prevent_dce_1 %65
OpStore %vertex_point_size %float_1
OpReturn
OpFunctionEnd
-%fragment_main = OpFunction %void None %18
- %47 = OpLabel
- %48 = OpFunctionCall %void %textureDimensions_fdf6e9
- OpReturn
- OpFunctionEnd
-%compute_main = OpFunction %void None %18
- %50 = OpLabel
- %51 = OpFunctionCall %void %textureDimensions_fdf6e9
- OpReturn
- OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.wgsl
index 6a277db..31ab61fc 100644
--- a/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/textureDimensions/fdf6e9.wgsl.expected.wgsl
@@ -1,25 +1,34 @@
@group(1) @binding(0) var arg_0 : texture_2d_array<i32>;
-fn textureDimensions_fdf6e9() {
+fn textureDimensions_fdf6e9() -> vec2<u32> {
var arg_1 = 1i;
var res : vec2<u32> = textureDimensions(arg_0, arg_1);
- prevent_dce = res;
+ return res;
}
-@group(2) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
-
-@vertex
-fn vertex_main() -> @builtin(position) vec4<f32> {
- textureDimensions_fdf6e9();
- return vec4<f32>();
-}
+@group(0) @binding(0) var<storage, read_write> prevent_dce : vec2<u32>;
@fragment
fn fragment_main() {
- textureDimensions_fdf6e9();
+ prevent_dce = textureDimensions_fdf6e9();
}
@compute @workgroup_size(1)
fn compute_main() {
- textureDimensions_fdf6e9();
+ prevent_dce = textureDimensions_fdf6e9();
+}
+
+struct VertexOutput {
+ @builtin(position)
+ pos : vec4<f32>,
+ @location(0) @interpolate(flat)
+ prevent_dce : vec2<u32>,
+}
+
+@vertex
+fn vertex_main() -> VertexOutput {
+ var out : VertexOutput;
+ out.pos = vec4<f32>();
+ out.prevent_dce = textureDimensions_fdf6e9();
+ return out;
}