mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-10 05:57:51 +00:00
test: Add FXC test cases for indexing arrays in structs
Also move: test/fxc_bugs/vector_assignment_in_loop to test/bug/fxc/vector_assignment_in_loop Change-Id: I7bbfc476fdb7a3296025609625e322fed8d16285 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/59444 Auto-Submit: Ben Clayton <bclayton@google.com> Commit-Queue: James Price <jrprice@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com>
This commit is contained in:
committed by
Tint LUCI CQ
parent
7204756d4d
commit
5ac96af72c
@@ -0,0 +1,21 @@
|
||||
var<private> v2f : vec2<f32>;
|
||||
var<private> v3i : vec3<i32>;
|
||||
var<private> v4u : vec4<u32>;
|
||||
var<private> v2b : vec2<bool>;
|
||||
|
||||
fn foo() {
|
||||
for (var i : i32 = 0; i < 2; i = i + 1) {
|
||||
v2f[i] = 1.0;
|
||||
v3i[i] = 1;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
}
|
||||
}
|
||||
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
|
||||
for (var i : i32 = 0; i < 2; i = i + 1) {
|
||||
foo();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
void set_float2(inout float2 vec, int idx, float val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_int3(inout int3 vec, int idx, int val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_uint4(inout uint4 vec, int idx, uint val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_bool2(inout bool2 vec, int idx, bool val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
static float2 v2f = float2(0.0f, 0.0f);
|
||||
static int3 v3i = int3(0, 0, 0);
|
||||
static uint4 v4u = uint4(0u, 0u, 0u, 0u);
|
||||
static bool2 v2b = bool2(false, false);
|
||||
|
||||
void foo() {
|
||||
{
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
set_float2(v2f, i, 1.0f);
|
||||
set_int3(v3i, i, 1);
|
||||
set_uint4(v4u, i, 1u);
|
||||
set_bool2(v2b, i, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
{
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
foo();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
void foo(thread float2* const tint_symbol_1, thread int3* const tint_symbol_2, thread uint4* const tint_symbol_3, thread bool2* const tint_symbol_4) {
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
(*(tint_symbol_1))[i] = 1.0f;
|
||||
(*(tint_symbol_2))[i] = 1;
|
||||
(*(tint_symbol_3))[i] = 1u;
|
||||
(*(tint_symbol_4))[i] = true;
|
||||
}
|
||||
}
|
||||
|
||||
kernel void tint_symbol() {
|
||||
thread float2 tint_symbol_5 = 0.0f;
|
||||
thread int3 tint_symbol_6 = 0;
|
||||
thread uint4 tint_symbol_7 = 0u;
|
||||
thread bool2 tint_symbol_8 = false;
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
foo(&(tint_symbol_5), &(tint_symbol_6), &(tint_symbol_7), &(tint_symbol_8));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 72
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %v2f "v2f"
|
||||
OpName %v3i "v3i"
|
||||
OpName %v4u "v4u"
|
||||
OpName %v2b "v2b"
|
||||
OpName %foo "foo"
|
||||
OpName %i "i"
|
||||
OpName %main "main"
|
||||
OpName %i_0 "i"
|
||||
%float = OpTypeFloat 32
|
||||
%v2float = OpTypeVector %float 2
|
||||
%_ptr_Private_v2float = OpTypePointer Private %v2float
|
||||
%5 = OpConstantNull %v2float
|
||||
%v2f = OpVariable %_ptr_Private_v2float Private %5
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%_ptr_Private_v3int = OpTypePointer Private %v3int
|
||||
%10 = OpConstantNull %v3int
|
||||
%v3i = OpVariable %_ptr_Private_v3int Private %10
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%_ptr_Private_v4uint = OpTypePointer Private %v4uint
|
||||
%15 = OpConstantNull %v4uint
|
||||
%v4u = OpVariable %_ptr_Private_v4uint Private %15
|
||||
%bool = OpTypeBool
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_ptr_Private_v2bool = OpTypePointer Private %v2bool
|
||||
%20 = OpConstantNull %v2bool
|
||||
%v2b = OpVariable %_ptr_Private_v2bool Private %20
|
||||
%void = OpTypeVoid
|
||||
%21 = OpTypeFunction %void
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%28 = OpConstantNull %int
|
||||
%int_2 = OpConstant %int 2
|
||||
%_ptr_Private_float = OpTypePointer Private %float
|
||||
%float_1 = OpConstant %float 1
|
||||
%_ptr_Private_int = OpTypePointer Private %int
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Private_bool = OpTypePointer Private %bool
|
||||
%true = OpConstantTrue %bool
|
||||
%foo = OpFunction %void None %21
|
||||
%24 = OpLabel
|
||||
%i = OpVariable %_ptr_Function_int Function %28
|
||||
OpStore %i %int_0
|
||||
OpBranch %29
|
||||
%29 = OpLabel
|
||||
OpLoopMerge %30 %31 None
|
||||
OpBranch %32
|
||||
%32 = OpLabel
|
||||
%34 = OpLoad %int %i
|
||||
%36 = OpSLessThan %bool %34 %int_2
|
||||
%33 = OpLogicalNot %bool %36
|
||||
OpSelectionMerge %37 None
|
||||
OpBranchConditional %33 %38 %37
|
||||
%38 = OpLabel
|
||||
OpBranch %30
|
||||
%37 = OpLabel
|
||||
%39 = OpLoad %int %i
|
||||
%41 = OpAccessChain %_ptr_Private_float %v2f %39
|
||||
OpStore %41 %float_1
|
||||
%43 = OpLoad %int %i
|
||||
%45 = OpAccessChain %_ptr_Private_int %v3i %43
|
||||
OpStore %45 %int_1
|
||||
%47 = OpLoad %int %i
|
||||
%49 = OpAccessChain %_ptr_Private_uint %v4u %47
|
||||
OpStore %49 %uint_1
|
||||
%51 = OpLoad %int %i
|
||||
%53 = OpAccessChain %_ptr_Private_bool %v2b %51
|
||||
OpStore %53 %true
|
||||
OpBranch %31
|
||||
%31 = OpLabel
|
||||
%55 = OpLoad %int %i
|
||||
%56 = OpIAdd %int %55 %int_1
|
||||
OpStore %i %56
|
||||
OpBranch %29
|
||||
%30 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %void None %21
|
||||
%58 = OpLabel
|
||||
%i_0 = OpVariable %_ptr_Function_int Function %28
|
||||
OpStore %i_0 %int_0
|
||||
OpBranch %60
|
||||
%60 = OpLabel
|
||||
OpLoopMerge %61 %62 None
|
||||
OpBranch %63
|
||||
%63 = OpLabel
|
||||
%65 = OpLoad %int %i_0
|
||||
%66 = OpSLessThan %bool %65 %int_2
|
||||
%64 = OpLogicalNot %bool %66
|
||||
OpSelectionMerge %67 None
|
||||
OpBranchConditional %64 %68 %67
|
||||
%68 = OpLabel
|
||||
OpBranch %61
|
||||
%67 = OpLabel
|
||||
%69 = OpFunctionCall %void %foo
|
||||
OpBranch %62
|
||||
%62 = OpLabel
|
||||
%70 = OpLoad %int %i_0
|
||||
%71 = OpIAdd %int %70 %int_1
|
||||
OpStore %i_0 %71
|
||||
OpBranch %60
|
||||
%61 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
@@ -0,0 +1,23 @@
|
||||
var<private> v2f : vec2<f32>;
|
||||
|
||||
var<private> v3i : vec3<i32>;
|
||||
|
||||
var<private> v4u : vec4<u32>;
|
||||
|
||||
var<private> v2b : vec2<bool>;
|
||||
|
||||
fn foo() {
|
||||
for(var i : i32 = 0; (i < 2); i = (i + 1)) {
|
||||
v2f[i] = 1.0;
|
||||
v3i[i] = 1;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
}
|
||||
}
|
||||
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
for(var i : i32 = 0; (i < 2); i = (i + 1)) {
|
||||
foo();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
var<private> v2f : vec2<f32>;
|
||||
var<private> v3i : vec3<i32>;
|
||||
var<private> v4u : vec4<u32>;
|
||||
var<private> v2b : vec2<bool>;
|
||||
|
||||
fn foo() {
|
||||
var i : i32 = 0;
|
||||
v2f[i] = 1.0;
|
||||
v3i[i] = 1;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
}
|
||||
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
|
||||
for (var i : i32 = 0; i < 2; i = i + 1) {
|
||||
foo();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
void set_float2(inout float2 vec, int idx, float val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_int3(inout int3 vec, int idx, int val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_uint4(inout uint4 vec, int idx, uint val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_bool2(inout bool2 vec, int idx, bool val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
static float2 v2f = float2(0.0f, 0.0f);
|
||||
static int3 v3i = int3(0, 0, 0);
|
||||
static uint4 v4u = uint4(0u, 0u, 0u, 0u);
|
||||
static bool2 v2b = bool2(false, false);
|
||||
|
||||
void foo() {
|
||||
int i = 0;
|
||||
set_float2(v2f, i, 1.0f);
|
||||
set_int3(v3i, i, 1);
|
||||
set_uint4(v4u, i, 1u);
|
||||
set_bool2(v2b, i, true);
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
{
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
foo();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
void foo(thread float2* const tint_symbol_1, thread int3* const tint_symbol_2, thread uint4* const tint_symbol_3, thread bool2* const tint_symbol_4) {
|
||||
int i = 0;
|
||||
(*(tint_symbol_1))[i] = 1.0f;
|
||||
(*(tint_symbol_2))[i] = 1;
|
||||
(*(tint_symbol_3))[i] = 1u;
|
||||
(*(tint_symbol_4))[i] = true;
|
||||
}
|
||||
|
||||
kernel void tint_symbol() {
|
||||
thread float2 tint_symbol_5 = 0.0f;
|
||||
thread int3 tint_symbol_6 = 0;
|
||||
thread uint4 tint_symbol_7 = 0u;
|
||||
thread bool2 tint_symbol_8 = false;
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
foo(&(tint_symbol_5), &(tint_symbol_6), &(tint_symbol_7), &(tint_symbol_8));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 61
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %v2f "v2f"
|
||||
OpName %v3i "v3i"
|
||||
OpName %v4u "v4u"
|
||||
OpName %v2b "v2b"
|
||||
OpName %foo "foo"
|
||||
OpName %i "i"
|
||||
OpName %main "main"
|
||||
OpName %i_0 "i"
|
||||
%float = OpTypeFloat 32
|
||||
%v2float = OpTypeVector %float 2
|
||||
%_ptr_Private_v2float = OpTypePointer Private %v2float
|
||||
%5 = OpConstantNull %v2float
|
||||
%v2f = OpVariable %_ptr_Private_v2float Private %5
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%_ptr_Private_v3int = OpTypePointer Private %v3int
|
||||
%10 = OpConstantNull %v3int
|
||||
%v3i = OpVariable %_ptr_Private_v3int Private %10
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%_ptr_Private_v4uint = OpTypePointer Private %v4uint
|
||||
%15 = OpConstantNull %v4uint
|
||||
%v4u = OpVariable %_ptr_Private_v4uint Private %15
|
||||
%bool = OpTypeBool
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_ptr_Private_v2bool = OpTypePointer Private %v2bool
|
||||
%20 = OpConstantNull %v2bool
|
||||
%v2b = OpVariable %_ptr_Private_v2bool Private %20
|
||||
%void = OpTypeVoid
|
||||
%21 = OpTypeFunction %void
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%28 = OpConstantNull %int
|
||||
%_ptr_Private_float = OpTypePointer Private %float
|
||||
%float_1 = OpConstant %float 1
|
||||
%_ptr_Private_int = OpTypePointer Private %int
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Private_uint = OpTypePointer Private %uint
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Private_bool = OpTypePointer Private %bool
|
||||
%true = OpConstantTrue %bool
|
||||
%int_2 = OpConstant %int 2
|
||||
%foo = OpFunction %void None %21
|
||||
%24 = OpLabel
|
||||
%i = OpVariable %_ptr_Function_int Function %28
|
||||
OpStore %i %int_0
|
||||
%29 = OpLoad %int %i
|
||||
%31 = OpAccessChain %_ptr_Private_float %v2f %29
|
||||
OpStore %31 %float_1
|
||||
%33 = OpLoad %int %i
|
||||
%35 = OpAccessChain %_ptr_Private_int %v3i %33
|
||||
OpStore %35 %int_1
|
||||
%37 = OpLoad %int %i
|
||||
%39 = OpAccessChain %_ptr_Private_uint %v4u %37
|
||||
OpStore %39 %uint_1
|
||||
%41 = OpLoad %int %i
|
||||
%43 = OpAccessChain %_ptr_Private_bool %v2b %41
|
||||
OpStore %43 %true
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %void None %21
|
||||
%46 = OpLabel
|
||||
%i_0 = OpVariable %_ptr_Function_int Function %28
|
||||
OpStore %i_0 %int_0
|
||||
OpBranch %48
|
||||
%48 = OpLabel
|
||||
OpLoopMerge %49 %50 None
|
||||
OpBranch %51
|
||||
%51 = OpLabel
|
||||
%53 = OpLoad %int %i_0
|
||||
%55 = OpSLessThan %bool %53 %int_2
|
||||
%52 = OpLogicalNot %bool %55
|
||||
OpSelectionMerge %56 None
|
||||
OpBranchConditional %52 %57 %56
|
||||
%57 = OpLabel
|
||||
OpBranch %49
|
||||
%56 = OpLabel
|
||||
%58 = OpFunctionCall %void %foo
|
||||
OpBranch %50
|
||||
%50 = OpLabel
|
||||
%59 = OpLoad %int %i_0
|
||||
%60 = OpIAdd %int %59 %int_1
|
||||
OpStore %i_0 %60
|
||||
OpBranch %48
|
||||
%49 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
@@ -0,0 +1,22 @@
|
||||
var<private> v2f : vec2<f32>;
|
||||
|
||||
var<private> v3i : vec3<i32>;
|
||||
|
||||
var<private> v4u : vec4<u32>;
|
||||
|
||||
var<private> v2b : vec2<bool>;
|
||||
|
||||
fn foo() {
|
||||
var i : i32 = 0;
|
||||
v2f[i] = 1.0;
|
||||
v3i[i] = 1;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
}
|
||||
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
for(var i : i32 = 0; (i < 2); i = (i + 1)) {
|
||||
foo();
|
||||
}
|
||||
}
|
||||
30
test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl
Normal file
30
test/bug/fxc/vector_assignment_in_loop/loop_types_all.wgsl
Normal file
@@ -0,0 +1,30 @@
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
var v2f : vec2<f32>;
|
||||
var v3f : vec3<f32>;
|
||||
var v4f : vec4<f32>;
|
||||
var v2i : vec2<i32>;
|
||||
var v3i : vec3<i32>;
|
||||
var v4i : vec4<i32>;
|
||||
var v2u : vec2<u32>;
|
||||
var v3u : vec3<u32>;
|
||||
var v4u : vec4<u32>;
|
||||
var v2b : vec2<bool>;
|
||||
var v3b : vec3<bool>;
|
||||
var v4b : vec4<bool>;
|
||||
|
||||
for (var i : i32 = 0; i < 2; i = i + 1) {
|
||||
v2f[i] = 1.0;
|
||||
v3f[i] = 1.0;
|
||||
v4f[i] = 1.0;
|
||||
v2i[i] = 1;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
void set_float2(inout float2 vec, int idx, float val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_float3(inout float3 vec, int idx, float val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_float4(inout float4 vec, int idx, float val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_int2(inout int2 vec, int idx, int val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_int3(inout int3 vec, int idx, int val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_int4(inout int4 vec, int idx, int val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_uint2(inout uint2 vec, int idx, uint val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_uint3(inout uint3 vec, int idx, uint val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_uint4(inout uint4 vec, int idx, uint val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_bool2(inout bool2 vec, int idx, bool val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_bool3(inout bool3 vec, int idx, bool val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_bool4(inout bool4 vec, int idx, bool val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
float2 v2f = float2(0.0f, 0.0f);
|
||||
float3 v3f = float3(0.0f, 0.0f, 0.0f);
|
||||
float4 v4f = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
int2 v2i = int2(0, 0);
|
||||
int3 v3i = int3(0, 0, 0);
|
||||
int4 v4i = int4(0, 0, 0, 0);
|
||||
uint2 v2u = uint2(0u, 0u);
|
||||
uint3 v3u = uint3(0u, 0u, 0u);
|
||||
uint4 v4u = uint4(0u, 0u, 0u, 0u);
|
||||
bool2 v2b = bool2(false, false);
|
||||
bool3 v3b = bool3(false, false, false);
|
||||
bool4 v4b = bool4(false, false, false, false);
|
||||
{
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
set_float2(v2f, i, 1.0f);
|
||||
set_float3(v3f, i, 1.0f);
|
||||
set_float4(v4f, i, 1.0f);
|
||||
set_int2(v2i, i, 1);
|
||||
set_int3(v3i, i, 1);
|
||||
set_int4(v4i, i, 1);
|
||||
set_uint2(v2u, i, 1u);
|
||||
set_uint3(v3u, i, 1u);
|
||||
set_uint4(v4u, i, 1u);
|
||||
set_bool2(v2b, i, true);
|
||||
set_bool3(v3b, i, true);
|
||||
set_bool4(v4b, i, true);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
kernel void tint_symbol() {
|
||||
float2 v2f = 0.0f;
|
||||
float3 v3f = 0.0f;
|
||||
float4 v4f = 0.0f;
|
||||
int2 v2i = 0;
|
||||
int3 v3i = 0;
|
||||
int4 v4i = 0;
|
||||
uint2 v2u = 0u;
|
||||
uint3 v3u = 0u;
|
||||
uint4 v4u = 0u;
|
||||
bool2 v2b = false;
|
||||
bool3 v3b = false;
|
||||
bool4 v4b = false;
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
v2f[i] = 1.0f;
|
||||
v3f[i] = 1.0f;
|
||||
v4f[i] = 1.0f;
|
||||
v2i[i] = 1;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 104
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %main "main"
|
||||
OpName %v2f "v2f"
|
||||
OpName %v3f "v3f"
|
||||
OpName %v4f "v4f"
|
||||
OpName %v2i "v2i"
|
||||
OpName %v3i "v3i"
|
||||
OpName %v4i "v4i"
|
||||
OpName %v2u "v2u"
|
||||
OpName %v3u "v3u"
|
||||
OpName %v4u "v4u"
|
||||
OpName %v2b "v2b"
|
||||
OpName %v3b "v3b"
|
||||
OpName %v4b "v4b"
|
||||
OpName %i "i"
|
||||
%void = OpTypeVoid
|
||||
%1 = OpTypeFunction %void
|
||||
%float = OpTypeFloat 32
|
||||
%v2float = OpTypeVector %float 2
|
||||
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||
%9 = OpConstantNull %v2float
|
||||
%v3float = OpTypeVector %float 3
|
||||
%_ptr_Function_v3float = OpTypePointer Function %v3float
|
||||
%13 = OpConstantNull %v3float
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%17 = OpConstantNull %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%_ptr_Function_v2int = OpTypePointer Function %v2int
|
||||
%22 = OpConstantNull %v2int
|
||||
%v3int = OpTypeVector %int 3
|
||||
%_ptr_Function_v3int = OpTypePointer Function %v3int
|
||||
%26 = OpConstantNull %v3int
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_ptr_Function_v4int = OpTypePointer Function %v4int
|
||||
%30 = OpConstantNull %v4int
|
||||
%uint = OpTypeInt 32 0
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
|
||||
%35 = OpConstantNull %v2uint
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
|
||||
%39 = OpConstantNull %v3uint
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
|
||||
%43 = OpConstantNull %v4uint
|
||||
%bool = OpTypeBool
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
|
||||
%48 = OpConstantNull %v2bool
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
|
||||
%52 = OpConstantNull %v3bool
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
|
||||
%56 = OpConstantNull %v4bool
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%60 = OpConstantNull %int
|
||||
%int_2 = OpConstant %int 2
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%float_1 = OpConstant %float 1
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Function_bool = OpTypePointer Function %bool
|
||||
%true = OpConstantTrue %bool
|
||||
%main = OpFunction %void None %1
|
||||
%4 = OpLabel
|
||||
%v2f = OpVariable %_ptr_Function_v2float Function %9
|
||||
%v3f = OpVariable %_ptr_Function_v3float Function %13
|
||||
%v4f = OpVariable %_ptr_Function_v4float Function %17
|
||||
%v2i = OpVariable %_ptr_Function_v2int Function %22
|
||||
%v3i = OpVariable %_ptr_Function_v3int Function %26
|
||||
%v4i = OpVariable %_ptr_Function_v4int Function %30
|
||||
%v2u = OpVariable %_ptr_Function_v2uint Function %35
|
||||
%v3u = OpVariable %_ptr_Function_v3uint Function %39
|
||||
%v4u = OpVariable %_ptr_Function_v4uint Function %43
|
||||
%v2b = OpVariable %_ptr_Function_v2bool Function %48
|
||||
%v3b = OpVariable %_ptr_Function_v3bool Function %52
|
||||
%v4b = OpVariable %_ptr_Function_v4bool Function %56
|
||||
%i = OpVariable %_ptr_Function_int Function %60
|
||||
OpStore %i %int_0
|
||||
OpBranch %61
|
||||
%61 = OpLabel
|
||||
OpLoopMerge %62 %63 None
|
||||
OpBranch %64
|
||||
%64 = OpLabel
|
||||
%66 = OpLoad %int %i
|
||||
%68 = OpSLessThan %bool %66 %int_2
|
||||
%65 = OpLogicalNot %bool %68
|
||||
OpSelectionMerge %69 None
|
||||
OpBranchConditional %65 %70 %69
|
||||
%70 = OpLabel
|
||||
OpBranch %62
|
||||
%69 = OpLabel
|
||||
%71 = OpLoad %int %i
|
||||
%73 = OpAccessChain %_ptr_Function_float %v2f %71
|
||||
OpStore %73 %float_1
|
||||
%75 = OpLoad %int %i
|
||||
%76 = OpAccessChain %_ptr_Function_float %v3f %75
|
||||
OpStore %76 %float_1
|
||||
%77 = OpLoad %int %i
|
||||
%78 = OpAccessChain %_ptr_Function_float %v4f %77
|
||||
OpStore %78 %float_1
|
||||
%79 = OpLoad %int %i
|
||||
%80 = OpAccessChain %_ptr_Function_int %v2i %79
|
||||
OpStore %80 %int_1
|
||||
%82 = OpLoad %int %i
|
||||
%83 = OpAccessChain %_ptr_Function_int %v3i %82
|
||||
OpStore %83 %int_1
|
||||
%84 = OpLoad %int %i
|
||||
%85 = OpAccessChain %_ptr_Function_int %v4i %84
|
||||
OpStore %85 %int_1
|
||||
%86 = OpLoad %int %i
|
||||
%88 = OpAccessChain %_ptr_Function_uint %v2u %86
|
||||
OpStore %88 %uint_1
|
||||
%90 = OpLoad %int %i
|
||||
%91 = OpAccessChain %_ptr_Function_uint %v3u %90
|
||||
OpStore %91 %uint_1
|
||||
%92 = OpLoad %int %i
|
||||
%93 = OpAccessChain %_ptr_Function_uint %v4u %92
|
||||
OpStore %93 %uint_1
|
||||
%94 = OpLoad %int %i
|
||||
%96 = OpAccessChain %_ptr_Function_bool %v2b %94
|
||||
OpStore %96 %true
|
||||
%98 = OpLoad %int %i
|
||||
%99 = OpAccessChain %_ptr_Function_bool %v3b %98
|
||||
OpStore %99 %true
|
||||
%100 = OpLoad %int %i
|
||||
%101 = OpAccessChain %_ptr_Function_bool %v4b %100
|
||||
OpStore %101 %true
|
||||
OpBranch %63
|
||||
%63 = OpLabel
|
||||
%102 = OpLoad %int %i
|
||||
%103 = OpIAdd %int %102 %int_1
|
||||
OpStore %i %103
|
||||
OpBranch %61
|
||||
%62 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
@@ -0,0 +1,29 @@
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
var v2f : vec2<f32>;
|
||||
var v3f : vec3<f32>;
|
||||
var v4f : vec4<f32>;
|
||||
var v2i : vec2<i32>;
|
||||
var v3i : vec3<i32>;
|
||||
var v4i : vec4<i32>;
|
||||
var v2u : vec2<u32>;
|
||||
var v3u : vec3<u32>;
|
||||
var v4u : vec4<u32>;
|
||||
var v2b : vec2<bool>;
|
||||
var v3b : vec3<bool>;
|
||||
var v4b : vec4<bool>;
|
||||
for(var i : i32 = 0; (i < 2); i = (i + 1)) {
|
||||
v2f[i] = 1.0;
|
||||
v3f[i] = 1.0;
|
||||
v4f[i] = 1.0;
|
||||
v2i[i] = 1;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
var v2f : vec2<f32>;
|
||||
var v2f_2 : vec2<f32>;
|
||||
|
||||
var v3i : vec3<i32>;
|
||||
var v3i_2 : vec3<i32>;
|
||||
|
||||
var v4u : vec4<u32>;
|
||||
var v4u_2 : vec4<u32>;
|
||||
|
||||
var v2b : vec2<bool>;
|
||||
var v2b_2 : vec2<bool>;
|
||||
|
||||
for (var i : i32 = 0; i < 2; i = i + 1) {
|
||||
v2f[i] = 1.0;
|
||||
v3i[i] = 1;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
|
||||
v2f_2[i] = 1.0;
|
||||
v3i_2[i] = 1;
|
||||
v4u_2[i] = 1u;
|
||||
v2b_2[i] = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
void set_float2(inout float2 vec, int idx, float val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_int3(inout int3 vec, int idx, int val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_uint4(inout uint4 vec, int idx, uint val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_bool2(inout bool2 vec, int idx, bool val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
float2 v2f = float2(0.0f, 0.0f);
|
||||
float2 v2f_2 = float2(0.0f, 0.0f);
|
||||
int3 v3i = int3(0, 0, 0);
|
||||
int3 v3i_2 = int3(0, 0, 0);
|
||||
uint4 v4u = uint4(0u, 0u, 0u, 0u);
|
||||
uint4 v4u_2 = uint4(0u, 0u, 0u, 0u);
|
||||
bool2 v2b = bool2(false, false);
|
||||
bool2 v2b_2 = bool2(false, false);
|
||||
{
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
set_float2(v2f, i, 1.0f);
|
||||
set_int3(v3i, i, 1);
|
||||
set_uint4(v4u, i, 1u);
|
||||
set_bool2(v2b, i, true);
|
||||
set_float2(v2f_2, i, 1.0f);
|
||||
set_int3(v3i_2, i, 1);
|
||||
set_uint4(v4u_2, i, 1u);
|
||||
set_bool2(v2b_2, i, true);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
kernel void tint_symbol() {
|
||||
float2 v2f = 0.0f;
|
||||
float2 v2f_2 = 0.0f;
|
||||
int3 v3i = 0;
|
||||
int3 v3i_2 = 0;
|
||||
uint4 v4u = 0u;
|
||||
uint4 v4u_2 = 0u;
|
||||
bool2 v2b = false;
|
||||
bool2 v2b_2 = false;
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
v2f[i] = 1.0f;
|
||||
v3i[i] = 1;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
v2f_2[i] = 1.0f;
|
||||
v3i_2[i] = 1;
|
||||
v4u_2[i] = 1u;
|
||||
v2b_2[i] = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 68
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %main "main"
|
||||
OpName %v2f "v2f"
|
||||
OpName %v2f_2 "v2f_2"
|
||||
OpName %v3i "v3i"
|
||||
OpName %v3i_2 "v3i_2"
|
||||
OpName %v4u "v4u"
|
||||
OpName %v4u_2 "v4u_2"
|
||||
OpName %v2b "v2b"
|
||||
OpName %v2b_2 "v2b_2"
|
||||
OpName %i "i"
|
||||
%void = OpTypeVoid
|
||||
%1 = OpTypeFunction %void
|
||||
%float = OpTypeFloat 32
|
||||
%v2float = OpTypeVector %float 2
|
||||
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||
%9 = OpConstantNull %v2float
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%_ptr_Function_v3int = OpTypePointer Function %v3int
|
||||
%15 = OpConstantNull %v3int
|
||||
%uint = OpTypeInt 32 0
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
|
||||
%21 = OpConstantNull %v4uint
|
||||
%bool = OpTypeBool
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
|
||||
%27 = OpConstantNull %v2bool
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%32 = OpConstantNull %int
|
||||
%int_2 = OpConstant %int 2
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%float_1 = OpConstant %float 1
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Function_bool = OpTypePointer Function %bool
|
||||
%true = OpConstantTrue %bool
|
||||
%main = OpFunction %void None %1
|
||||
%4 = OpLabel
|
||||
%v2f = OpVariable %_ptr_Function_v2float Function %9
|
||||
%v2f_2 = OpVariable %_ptr_Function_v2float Function %9
|
||||
%v3i = OpVariable %_ptr_Function_v3int Function %15
|
||||
%v3i_2 = OpVariable %_ptr_Function_v3int Function %15
|
||||
%v4u = OpVariable %_ptr_Function_v4uint Function %21
|
||||
%v4u_2 = OpVariable %_ptr_Function_v4uint Function %21
|
||||
%v2b = OpVariable %_ptr_Function_v2bool Function %27
|
||||
%v2b_2 = OpVariable %_ptr_Function_v2bool Function %27
|
||||
%i = OpVariable %_ptr_Function_int Function %32
|
||||
OpStore %i %int_0
|
||||
OpBranch %33
|
||||
%33 = OpLabel
|
||||
OpLoopMerge %34 %35 None
|
||||
OpBranch %36
|
||||
%36 = OpLabel
|
||||
%38 = OpLoad %int %i
|
||||
%40 = OpSLessThan %bool %38 %int_2
|
||||
%37 = OpLogicalNot %bool %40
|
||||
OpSelectionMerge %41 None
|
||||
OpBranchConditional %37 %42 %41
|
||||
%42 = OpLabel
|
||||
OpBranch %34
|
||||
%41 = OpLabel
|
||||
%43 = OpLoad %int %i
|
||||
%45 = OpAccessChain %_ptr_Function_float %v2f %43
|
||||
OpStore %45 %float_1
|
||||
%47 = OpLoad %int %i
|
||||
%48 = OpAccessChain %_ptr_Function_int %v3i %47
|
||||
OpStore %48 %int_1
|
||||
%50 = OpLoad %int %i
|
||||
%52 = OpAccessChain %_ptr_Function_uint %v4u %50
|
||||
OpStore %52 %uint_1
|
||||
%54 = OpLoad %int %i
|
||||
%56 = OpAccessChain %_ptr_Function_bool %v2b %54
|
||||
OpStore %56 %true
|
||||
%58 = OpLoad %int %i
|
||||
%59 = OpAccessChain %_ptr_Function_float %v2f_2 %58
|
||||
OpStore %59 %float_1
|
||||
%60 = OpLoad %int %i
|
||||
%61 = OpAccessChain %_ptr_Function_int %v3i_2 %60
|
||||
OpStore %61 %int_1
|
||||
%62 = OpLoad %int %i
|
||||
%63 = OpAccessChain %_ptr_Function_uint %v4u_2 %62
|
||||
OpStore %63 %uint_1
|
||||
%64 = OpLoad %int %i
|
||||
%65 = OpAccessChain %_ptr_Function_bool %v2b_2 %64
|
||||
OpStore %65 %true
|
||||
OpBranch %35
|
||||
%35 = OpLabel
|
||||
%66 = OpLoad %int %i
|
||||
%67 = OpIAdd %int %66 %int_1
|
||||
OpStore %i %67
|
||||
OpBranch %33
|
||||
%34 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
@@ -0,0 +1,21 @@
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
var v2f : vec2<f32>;
|
||||
var v2f_2 : vec2<f32>;
|
||||
var v3i : vec3<i32>;
|
||||
var v3i_2 : vec3<i32>;
|
||||
var v4u : vec4<u32>;
|
||||
var v4u_2 : vec4<u32>;
|
||||
var v2b : vec2<bool>;
|
||||
var v2b_2 : vec2<bool>;
|
||||
for(var i : i32 = 0; (i < 2); i = (i + 1)) {
|
||||
v2f[i] = 1.0;
|
||||
v3i[i] = 1;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
v2f_2[i] = 1.0;
|
||||
v3i_2[i] = 1;
|
||||
v4u_2[i] = 1u;
|
||||
v2b_2[i] = true;
|
||||
}
|
||||
}
|
||||
32
test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl
Normal file
32
test/bug/fxc/vector_assignment_in_loop/loop_types_some.wgsl
Normal file
@@ -0,0 +1,32 @@
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
var v2f : vec2<f32>;
|
||||
var v3f : vec3<f32>;
|
||||
var v4f : vec4<f32>;
|
||||
var v2i : vec2<i32>;
|
||||
var v3i : vec3<i32>;
|
||||
var v4i : vec4<i32>;
|
||||
var v2u : vec2<u32>;
|
||||
var v3u : vec3<u32>;
|
||||
var v4u : vec4<u32>;
|
||||
var v2b : vec2<bool>;
|
||||
var v3b : vec3<bool>;
|
||||
var v4b : vec4<bool>;
|
||||
|
||||
for (var i : i32 = 0; i < 2; i = i + 1) {
|
||||
v2f[i] = 1.0;
|
||||
v2i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
}
|
||||
|
||||
var i : i32 = 0;
|
||||
v3f[i] = 1.0;
|
||||
v4f[i] = 1.0;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
void set_float2(inout float2 vec, int idx, float val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_int2(inout int2 vec, int idx, int val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_uint2(inout uint2 vec, int idx, uint val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_bool2(inout bool2 vec, int idx, bool val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_float3(inout float3 vec, int idx, float val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_float4(inout float4 vec, int idx, float val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_int3(inout int3 vec, int idx, int val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_int4(inout int4 vec, int idx, int val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_uint3(inout uint3 vec, int idx, uint val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_uint4(inout uint4 vec, int idx, uint val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_bool3(inout bool3 vec, int idx, bool val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_bool4(inout bool4 vec, int idx, bool val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
float2 v2f = float2(0.0f, 0.0f);
|
||||
float3 v3f = float3(0.0f, 0.0f, 0.0f);
|
||||
float4 v4f = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
int2 v2i = int2(0, 0);
|
||||
int3 v3i = int3(0, 0, 0);
|
||||
int4 v4i = int4(0, 0, 0, 0);
|
||||
uint2 v2u = uint2(0u, 0u);
|
||||
uint3 v3u = uint3(0u, 0u, 0u);
|
||||
uint4 v4u = uint4(0u, 0u, 0u, 0u);
|
||||
bool2 v2b = bool2(false, false);
|
||||
bool3 v3b = bool3(false, false, false);
|
||||
bool4 v4b = bool4(false, false, false, false);
|
||||
{
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
set_float2(v2f, i, 1.0f);
|
||||
set_int2(v2i, i, 1);
|
||||
set_uint2(v2u, i, 1u);
|
||||
set_bool2(v2b, i, true);
|
||||
}
|
||||
}
|
||||
int i = 0;
|
||||
set_float3(v3f, i, 1.0f);
|
||||
set_float4(v4f, i, 1.0f);
|
||||
set_int3(v3i, i, 1);
|
||||
set_int4(v4i, i, 1);
|
||||
set_uint3(v3u, i, 1u);
|
||||
set_uint4(v4u, i, 1u);
|
||||
set_bool3(v3b, i, true);
|
||||
set_bool4(v4b, i, true);
|
||||
return;
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
kernel void tint_symbol() {
|
||||
float2 v2f = 0.0f;
|
||||
float3 v3f = 0.0f;
|
||||
float4 v4f = 0.0f;
|
||||
int2 v2i = 0;
|
||||
int3 v3i = 0;
|
||||
int4 v4i = 0;
|
||||
uint2 v2u = 0u;
|
||||
uint3 v3u = 0u;
|
||||
uint4 v4u = 0u;
|
||||
bool2 v2b = false;
|
||||
bool3 v3b = false;
|
||||
bool4 v4b = false;
|
||||
for(int i = 0; (i < 2); i = (i + 1)) {
|
||||
v2f[i] = 1.0f;
|
||||
v2i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
}
|
||||
int i = 0;
|
||||
v3f[i] = 1.0f;
|
||||
v4f[i] = 1.0f;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 105
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %main "main"
|
||||
OpName %v2f "v2f"
|
||||
OpName %v3f "v3f"
|
||||
OpName %v4f "v4f"
|
||||
OpName %v2i "v2i"
|
||||
OpName %v3i "v3i"
|
||||
OpName %v4i "v4i"
|
||||
OpName %v2u "v2u"
|
||||
OpName %v3u "v3u"
|
||||
OpName %v4u "v4u"
|
||||
OpName %v2b "v2b"
|
||||
OpName %v3b "v3b"
|
||||
OpName %v4b "v4b"
|
||||
OpName %i "i"
|
||||
OpName %i_0 "i"
|
||||
%void = OpTypeVoid
|
||||
%1 = OpTypeFunction %void
|
||||
%float = OpTypeFloat 32
|
||||
%v2float = OpTypeVector %float 2
|
||||
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||
%9 = OpConstantNull %v2float
|
||||
%v3float = OpTypeVector %float 3
|
||||
%_ptr_Function_v3float = OpTypePointer Function %v3float
|
||||
%13 = OpConstantNull %v3float
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%17 = OpConstantNull %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%_ptr_Function_v2int = OpTypePointer Function %v2int
|
||||
%22 = OpConstantNull %v2int
|
||||
%v3int = OpTypeVector %int 3
|
||||
%_ptr_Function_v3int = OpTypePointer Function %v3int
|
||||
%26 = OpConstantNull %v3int
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_ptr_Function_v4int = OpTypePointer Function %v4int
|
||||
%30 = OpConstantNull %v4int
|
||||
%uint = OpTypeInt 32 0
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
|
||||
%35 = OpConstantNull %v2uint
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
|
||||
%39 = OpConstantNull %v3uint
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
|
||||
%43 = OpConstantNull %v4uint
|
||||
%bool = OpTypeBool
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
|
||||
%48 = OpConstantNull %v2bool
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
|
||||
%52 = OpConstantNull %v3bool
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
|
||||
%56 = OpConstantNull %v4bool
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%60 = OpConstantNull %int
|
||||
%int_2 = OpConstant %int 2
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%float_1 = OpConstant %float 1
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Function_bool = OpTypePointer Function %bool
|
||||
%true = OpConstantTrue %bool
|
||||
%main = OpFunction %void None %1
|
||||
%4 = OpLabel
|
||||
%v2f = OpVariable %_ptr_Function_v2float Function %9
|
||||
%v3f = OpVariable %_ptr_Function_v3float Function %13
|
||||
%v4f = OpVariable %_ptr_Function_v4float Function %17
|
||||
%v2i = OpVariable %_ptr_Function_v2int Function %22
|
||||
%v3i = OpVariable %_ptr_Function_v3int Function %26
|
||||
%v4i = OpVariable %_ptr_Function_v4int Function %30
|
||||
%v2u = OpVariable %_ptr_Function_v2uint Function %35
|
||||
%v3u = OpVariable %_ptr_Function_v3uint Function %39
|
||||
%v4u = OpVariable %_ptr_Function_v4uint Function %43
|
||||
%v2b = OpVariable %_ptr_Function_v2bool Function %48
|
||||
%v3b = OpVariable %_ptr_Function_v3bool Function %52
|
||||
%v4b = OpVariable %_ptr_Function_v4bool Function %56
|
||||
%i = OpVariable %_ptr_Function_int Function %60
|
||||
%i_0 = OpVariable %_ptr_Function_int Function %60
|
||||
OpStore %i %int_0
|
||||
OpBranch %61
|
||||
%61 = OpLabel
|
||||
OpLoopMerge %62 %63 None
|
||||
OpBranch %64
|
||||
%64 = OpLabel
|
||||
%66 = OpLoad %int %i
|
||||
%68 = OpSLessThan %bool %66 %int_2
|
||||
%65 = OpLogicalNot %bool %68
|
||||
OpSelectionMerge %69 None
|
||||
OpBranchConditional %65 %70 %69
|
||||
%70 = OpLabel
|
||||
OpBranch %62
|
||||
%69 = OpLabel
|
||||
%71 = OpLoad %int %i
|
||||
%73 = OpAccessChain %_ptr_Function_float %v2f %71
|
||||
OpStore %73 %float_1
|
||||
%75 = OpLoad %int %i
|
||||
%76 = OpAccessChain %_ptr_Function_int %v2i %75
|
||||
OpStore %76 %int_1
|
||||
%78 = OpLoad %int %i
|
||||
%80 = OpAccessChain %_ptr_Function_uint %v2u %78
|
||||
OpStore %80 %uint_1
|
||||
%82 = OpLoad %int %i
|
||||
%84 = OpAccessChain %_ptr_Function_bool %v2b %82
|
||||
OpStore %84 %true
|
||||
OpBranch %63
|
||||
%63 = OpLabel
|
||||
%86 = OpLoad %int %i
|
||||
%87 = OpIAdd %int %86 %int_1
|
||||
OpStore %i %87
|
||||
OpBranch %61
|
||||
%62 = OpLabel
|
||||
OpStore %i_0 %int_0
|
||||
%89 = OpLoad %int %i_0
|
||||
%90 = OpAccessChain %_ptr_Function_float %v3f %89
|
||||
OpStore %90 %float_1
|
||||
%91 = OpLoad %int %i_0
|
||||
%92 = OpAccessChain %_ptr_Function_float %v4f %91
|
||||
OpStore %92 %float_1
|
||||
%93 = OpLoad %int %i_0
|
||||
%94 = OpAccessChain %_ptr_Function_int %v3i %93
|
||||
OpStore %94 %int_1
|
||||
%95 = OpLoad %int %i_0
|
||||
%96 = OpAccessChain %_ptr_Function_int %v4i %95
|
||||
OpStore %96 %int_1
|
||||
%97 = OpLoad %int %i_0
|
||||
%98 = OpAccessChain %_ptr_Function_uint %v3u %97
|
||||
OpStore %98 %uint_1
|
||||
%99 = OpLoad %int %i_0
|
||||
%100 = OpAccessChain %_ptr_Function_uint %v4u %99
|
||||
OpStore %100 %uint_1
|
||||
%101 = OpLoad %int %i_0
|
||||
%102 = OpAccessChain %_ptr_Function_bool %v3b %101
|
||||
OpStore %102 %true
|
||||
%103 = OpLoad %int %i_0
|
||||
%104 = OpAccessChain %_ptr_Function_bool %v4b %103
|
||||
OpStore %104 %true
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
@@ -0,0 +1,30 @@
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
var v2f : vec2<f32>;
|
||||
var v3f : vec3<f32>;
|
||||
var v4f : vec4<f32>;
|
||||
var v2i : vec2<i32>;
|
||||
var v3i : vec3<i32>;
|
||||
var v4i : vec4<i32>;
|
||||
var v2u : vec2<u32>;
|
||||
var v3u : vec3<u32>;
|
||||
var v4u : vec4<u32>;
|
||||
var v2b : vec2<bool>;
|
||||
var v3b : vec3<bool>;
|
||||
var v4b : vec4<bool>;
|
||||
for(var i : i32 = 0; (i < 2); i = (i + 1)) {
|
||||
v2f[i] = 1.0;
|
||||
v2i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
}
|
||||
var i : i32 = 0;
|
||||
v3f[i] = 1.0;
|
||||
v4f[i] = 1.0;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
}
|
||||
29
test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl
Normal file
29
test/bug/fxc/vector_assignment_in_loop/no_loop.wgsl
Normal file
@@ -0,0 +1,29 @@
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
var v2f : vec2<f32>;
|
||||
var v3f : vec3<f32>;
|
||||
var v4f : vec4<f32>;
|
||||
var v2i : vec2<i32>;
|
||||
var v3i : vec3<i32>;
|
||||
var v4i : vec4<i32>;
|
||||
var v2u : vec2<u32>;
|
||||
var v3u : vec3<u32>;
|
||||
var v4u : vec4<u32>;
|
||||
var v2b : vec2<bool>;
|
||||
var v3b : vec3<bool>;
|
||||
var v4b : vec4<bool>;
|
||||
|
||||
var i : i32 = 0;
|
||||
v2f[i] = 1.0;
|
||||
v3f[i] = 1.0;
|
||||
v4f[i] = 1.0;
|
||||
v2i[i] = 1;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
void set_float2(inout float2 vec, int idx, float val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_float3(inout float3 vec, int idx, float val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_float4(inout float4 vec, int idx, float val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_int2(inout int2 vec, int idx, int val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_int3(inout int3 vec, int idx, int val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_int4(inout int4 vec, int idx, int val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_uint2(inout uint2 vec, int idx, uint val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_uint3(inout uint3 vec, int idx, uint val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_uint4(inout uint4 vec, int idx, uint val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
void set_bool2(inout bool2 vec, int idx, bool val) {
|
||||
vec = (idx.xx == int2(0, 1)) ? val.xx : vec;
|
||||
}
|
||||
|
||||
void set_bool3(inout bool3 vec, int idx, bool val) {
|
||||
vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
|
||||
}
|
||||
|
||||
void set_bool4(inout bool4 vec, int idx, bool val) {
|
||||
vec = (idx.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : vec;
|
||||
}
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
float2 v2f = float2(0.0f, 0.0f);
|
||||
float3 v3f = float3(0.0f, 0.0f, 0.0f);
|
||||
float4 v4f = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
int2 v2i = int2(0, 0);
|
||||
int3 v3i = int3(0, 0, 0);
|
||||
int4 v4i = int4(0, 0, 0, 0);
|
||||
uint2 v2u = uint2(0u, 0u);
|
||||
uint3 v3u = uint3(0u, 0u, 0u);
|
||||
uint4 v4u = uint4(0u, 0u, 0u, 0u);
|
||||
bool2 v2b = bool2(false, false);
|
||||
bool3 v3b = bool3(false, false, false);
|
||||
bool4 v4b = bool4(false, false, false, false);
|
||||
int i = 0;
|
||||
set_float2(v2f, i, 1.0f);
|
||||
set_float3(v3f, i, 1.0f);
|
||||
set_float4(v4f, i, 1.0f);
|
||||
set_int2(v2i, i, 1);
|
||||
set_int3(v3i, i, 1);
|
||||
set_int4(v4i, i, 1);
|
||||
set_uint2(v2u, i, 1u);
|
||||
set_uint3(v3u, i, 1u);
|
||||
set_uint4(v4u, i, 1u);
|
||||
set_bool2(v2b, i, true);
|
||||
set_bool3(v3b, i, true);
|
||||
set_bool4(v4b, i, true);
|
||||
return;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
kernel void tint_symbol() {
|
||||
float2 v2f = 0.0f;
|
||||
float3 v3f = 0.0f;
|
||||
float4 v4f = 0.0f;
|
||||
int2 v2i = 0;
|
||||
int3 v3i = 0;
|
||||
int4 v4i = 0;
|
||||
uint2 v2u = 0u;
|
||||
uint3 v3u = 0u;
|
||||
uint4 v4u = 0u;
|
||||
bool2 v2b = false;
|
||||
bool3 v3b = false;
|
||||
bool4 v4b = false;
|
||||
int i = 0;
|
||||
v2f[i] = 1.0f;
|
||||
v3f[i] = 1.0f;
|
||||
v4f[i] = 1.0f;
|
||||
v2i[i] = 1;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 92
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %main "main"
|
||||
OpName %v2f "v2f"
|
||||
OpName %v3f "v3f"
|
||||
OpName %v4f "v4f"
|
||||
OpName %v2i "v2i"
|
||||
OpName %v3i "v3i"
|
||||
OpName %v4i "v4i"
|
||||
OpName %v2u "v2u"
|
||||
OpName %v3u "v3u"
|
||||
OpName %v4u "v4u"
|
||||
OpName %v2b "v2b"
|
||||
OpName %v3b "v3b"
|
||||
OpName %v4b "v4b"
|
||||
OpName %i "i"
|
||||
%void = OpTypeVoid
|
||||
%1 = OpTypeFunction %void
|
||||
%float = OpTypeFloat 32
|
||||
%v2float = OpTypeVector %float 2
|
||||
%_ptr_Function_v2float = OpTypePointer Function %v2float
|
||||
%9 = OpConstantNull %v2float
|
||||
%v3float = OpTypeVector %float 3
|
||||
%_ptr_Function_v3float = OpTypePointer Function %v3float
|
||||
%13 = OpConstantNull %v3float
|
||||
%v4float = OpTypeVector %float 4
|
||||
%_ptr_Function_v4float = OpTypePointer Function %v4float
|
||||
%17 = OpConstantNull %v4float
|
||||
%int = OpTypeInt 32 1
|
||||
%v2int = OpTypeVector %int 2
|
||||
%_ptr_Function_v2int = OpTypePointer Function %v2int
|
||||
%22 = OpConstantNull %v2int
|
||||
%v3int = OpTypeVector %int 3
|
||||
%_ptr_Function_v3int = OpTypePointer Function %v3int
|
||||
%26 = OpConstantNull %v3int
|
||||
%v4int = OpTypeVector %int 4
|
||||
%_ptr_Function_v4int = OpTypePointer Function %v4int
|
||||
%30 = OpConstantNull %v4int
|
||||
%uint = OpTypeInt 32 0
|
||||
%v2uint = OpTypeVector %uint 2
|
||||
%_ptr_Function_v2uint = OpTypePointer Function %v2uint
|
||||
%35 = OpConstantNull %v2uint
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%_ptr_Function_v3uint = OpTypePointer Function %v3uint
|
||||
%39 = OpConstantNull %v3uint
|
||||
%v4uint = OpTypeVector %uint 4
|
||||
%_ptr_Function_v4uint = OpTypePointer Function %v4uint
|
||||
%43 = OpConstantNull %v4uint
|
||||
%bool = OpTypeBool
|
||||
%v2bool = OpTypeVector %bool 2
|
||||
%_ptr_Function_v2bool = OpTypePointer Function %v2bool
|
||||
%48 = OpConstantNull %v2bool
|
||||
%v3bool = OpTypeVector %bool 3
|
||||
%_ptr_Function_v3bool = OpTypePointer Function %v3bool
|
||||
%52 = OpConstantNull %v3bool
|
||||
%v4bool = OpTypeVector %bool 4
|
||||
%_ptr_Function_v4bool = OpTypePointer Function %v4bool
|
||||
%56 = OpConstantNull %v4bool
|
||||
%int_0 = OpConstant %int 0
|
||||
%_ptr_Function_int = OpTypePointer Function %int
|
||||
%60 = OpConstantNull %int
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%float_1 = OpConstant %float 1
|
||||
%int_1 = OpConstant %int 1
|
||||
%_ptr_Function_uint = OpTypePointer Function %uint
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Function_bool = OpTypePointer Function %bool
|
||||
%true = OpConstantTrue %bool
|
||||
%main = OpFunction %void None %1
|
||||
%4 = OpLabel
|
||||
%v2f = OpVariable %_ptr_Function_v2float Function %9
|
||||
%v3f = OpVariable %_ptr_Function_v3float Function %13
|
||||
%v4f = OpVariable %_ptr_Function_v4float Function %17
|
||||
%v2i = OpVariable %_ptr_Function_v2int Function %22
|
||||
%v3i = OpVariable %_ptr_Function_v3int Function %26
|
||||
%v4i = OpVariable %_ptr_Function_v4int Function %30
|
||||
%v2u = OpVariable %_ptr_Function_v2uint Function %35
|
||||
%v3u = OpVariable %_ptr_Function_v3uint Function %39
|
||||
%v4u = OpVariable %_ptr_Function_v4uint Function %43
|
||||
%v2b = OpVariable %_ptr_Function_v2bool Function %48
|
||||
%v3b = OpVariable %_ptr_Function_v3bool Function %52
|
||||
%v4b = OpVariable %_ptr_Function_v4bool Function %56
|
||||
%i = OpVariable %_ptr_Function_int Function %60
|
||||
OpStore %i %int_0
|
||||
%61 = OpLoad %int %i
|
||||
%63 = OpAccessChain %_ptr_Function_float %v2f %61
|
||||
OpStore %63 %float_1
|
||||
%65 = OpLoad %int %i
|
||||
%66 = OpAccessChain %_ptr_Function_float %v3f %65
|
||||
OpStore %66 %float_1
|
||||
%67 = OpLoad %int %i
|
||||
%68 = OpAccessChain %_ptr_Function_float %v4f %67
|
||||
OpStore %68 %float_1
|
||||
%69 = OpLoad %int %i
|
||||
%70 = OpAccessChain %_ptr_Function_int %v2i %69
|
||||
OpStore %70 %int_1
|
||||
%72 = OpLoad %int %i
|
||||
%73 = OpAccessChain %_ptr_Function_int %v3i %72
|
||||
OpStore %73 %int_1
|
||||
%74 = OpLoad %int %i
|
||||
%75 = OpAccessChain %_ptr_Function_int %v4i %74
|
||||
OpStore %75 %int_1
|
||||
%76 = OpLoad %int %i
|
||||
%78 = OpAccessChain %_ptr_Function_uint %v2u %76
|
||||
OpStore %78 %uint_1
|
||||
%80 = OpLoad %int %i
|
||||
%81 = OpAccessChain %_ptr_Function_uint %v3u %80
|
||||
OpStore %81 %uint_1
|
||||
%82 = OpLoad %int %i
|
||||
%83 = OpAccessChain %_ptr_Function_uint %v4u %82
|
||||
OpStore %83 %uint_1
|
||||
%84 = OpLoad %int %i
|
||||
%86 = OpAccessChain %_ptr_Function_bool %v2b %84
|
||||
OpStore %86 %true
|
||||
%88 = OpLoad %int %i
|
||||
%89 = OpAccessChain %_ptr_Function_bool %v3b %88
|
||||
OpStore %89 %true
|
||||
%90 = OpLoad %int %i
|
||||
%91 = OpAccessChain %_ptr_Function_bool %v4b %90
|
||||
OpStore %91 %true
|
||||
OpReturn
|
||||
OpFunctionEnd
|
||||
@@ -0,0 +1,28 @@
|
||||
[[stage(compute), workgroup_size(1, 1, 1)]]
|
||||
fn main() {
|
||||
var v2f : vec2<f32>;
|
||||
var v3f : vec3<f32>;
|
||||
var v4f : vec4<f32>;
|
||||
var v2i : vec2<i32>;
|
||||
var v3i : vec3<i32>;
|
||||
var v4i : vec4<i32>;
|
||||
var v2u : vec2<u32>;
|
||||
var v3u : vec3<u32>;
|
||||
var v4u : vec4<u32>;
|
||||
var v2b : vec2<bool>;
|
||||
var v3b : vec3<bool>;
|
||||
var v4b : vec4<bool>;
|
||||
var i : i32 = 0;
|
||||
v2f[i] = 1.0;
|
||||
v3f[i] = 1.0;
|
||||
v4f[i] = 1.0;
|
||||
v2i[i] = 1;
|
||||
v3i[i] = 1;
|
||||
v4i[i] = 1;
|
||||
v2u[i] = 1u;
|
||||
v3u[i] = 1u;
|
||||
v4u[i] = 1u;
|
||||
v2b[i] = true;
|
||||
v3b[i] = true;
|
||||
v4b[i] = true;
|
||||
}
|
||||
Reference in New Issue
Block a user