blob: 0d9d7f50fddf01848353378b9259ef3ffee95ca2 [file]
// 8.5. Composite Value Decomposition Expressions (https://www.w3.org/TR/WGSL/#composite-value-decomposition-expr)
@compute @workgroup_size(1, 1, 1)
fn main() {
testVectorAccessExpression();
testMatrixAccessExpression();
testArrayAccessExpression();
testStructAccessExpression();
}
// 8.5.1. Vector Access Expression (https://www.w3.org/TR/WGSL/#vector-access-expr)
fn testVectorAccessExpression()
{
testVectorSingleComponentSelection();
testVectorMultipleComponentSelection();
testComponentReferenceFromVectorReference();
}
// 8.5.1.1. Vector Single Component Selection (https://www.w3.org/TR/WGSL/#vector-single-component)
fn testVectorSingleComponentSelection()
{
let v2 = vec2<f32>(0);
let v3 = vec3<i32>(0);
let v4 = vec4<u32>(0);
_ = v2.x;
_ = v3.x;
_ = v4.x;
_ = v2.r;
_ = v3.r;
_ = v4.r;
_ = v2.y;
_ = v3.y;
_ = v4.y;
_ = v2.g;
_ = v3.g;
_ = v4.g;
_ = v3.z;
_ = v4.z;
_ = v3.b;
_ = v4.b;
_ = v4.w;
_ = v4.a;
_ = v2[0];
_ = v3[0];
_ = v4[0];
_ = v2[1];
_ = v3[1];
_ = v4[1];
_ = v3[2];
_ = v4[2];
_ = v4[3];
}
// 8.5.1.2. Vector Multiple Component Selection (https://www.w3.org/TR/WGSL/#vector-multi-component)
fn testVectorMultipleComponentSelection()
{
let v2 = vec2<f32>(0);
let v3 = vec3<i32>(0);
let v4 = vec4<u32>(0);
_ = v2.xy;
_ = v3.yz;
_ = v4.zw;
_ = v2.rg;
_ = v3.gb;
_ = v4.ba;
_ = v2.xxy;
_ = v3.xyz;
_ = v4.yzw;
_ = v2.rrg;
_ = v3.rgb;
_ = v4.gba;
_ = v2.xxyy;
_ = v3.xxyz;
_ = v4.xyzw;
_ = v2.rrgg;
_ = v3.rrgb;
_ = v4.rgba;
}
// 8.5.1.3. Component Reference from Vector Reference (https://www.w3.org/TR/WGSL/#vector-multi-component)
fn testComponentReferenceFromVectorReference()
{
var v2 = vec2<f32>(0);
var v3 = vec3<i32>(0);
var v4 = vec4<u32>(0);
v2.x = 0;
v3.x = 0;
v4.x = 0;
v2.r = 0;
v3.r = 0;
v4.r = 0;
v2.y = 0;
v3.y = 0;
v4.y = 0;
v2.g = 0;
v3.g = 0;
v4.g = 0;
v3.z = 0;
v4.z = 0;
v3.b = 0;
v4.b = 0;
v4.w = 0;
v4.a = 0;
v2[0] = 0;
v3[0] = 0;
v4[0] = 0;
v2[1] = 0;
v3[1] = 0;
v4[1] = 0;
v3[2] = 0;
v4[2] = 0;
v4[3] = 0;
}
// 8.5.2. Matrix Access Expression (https://www.w3.org/TR/WGSL/#matrix-access-expr)
fn testMatrixAccessExpression()
{
var m2x2 = mat2x2(0, 0, 0, 0);
var m2x3 = mat2x3(0, 0, 0, 0, 0, 0);
var m2x4 = mat2x4(0, 0, 0, 0, 0, 0, 0, 0);
var m3x2 = mat3x2(0, 0, 0, 0, 0, 0);
var m3x3 = mat3x3(0, 0, 0, 0, 0, 0, 0, 0, 0);
var m3x4 = mat3x4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
var m4x2 = mat4x2(0, 0, 0, 0, 0, 0, 0, 0);
var m4x3 = mat4x3(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
var m4x4 = mat4x4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
{ let x: vec2<f32> = m2x2[0]; }
{ let x: vec2<f32> = m3x2[0]; }
{ let x: vec2<f32> = m4x2[0]; }
{ let x: vec2<f32> = m2x2[1]; }
{ let x: vec2<f32> = m3x2[1]; }
{ let x: vec2<f32> = m4x2[1]; }
{ let x: vec2<f32> = m3x2[2]; }
{ let x: vec2<f32> = m4x2[2]; }
{ let x: vec2<f32> = m4x2[3]; }
{ let x: vec3<f32> = m2x3[0]; }
{ let x: vec3<f32> = m3x3[0]; }
{ let x: vec3<f32> = m4x3[0]; }
{ let x: vec3<f32> = m2x3[1]; }
{ let x: vec3<f32> = m3x3[1]; }
{ let x: vec3<f32> = m4x3[1]; }
{ let x: vec3<f32> = m3x3[2]; }
{ let x: vec3<f32> = m4x3[2]; }
{ let x: vec3<f32> = m4x3[3]; }
{ let x: vec4<f32> = m2x4[0]; }
{ let x: vec4<f32> = m3x4[0]; }
{ let x: vec4<f32> = m4x4[0]; }
{ let x: vec4<f32> = m2x4[1]; }
{ let x: vec4<f32> = m3x4[1]; }
{ let x: vec4<f32> = m4x4[1]; }
{ let x: vec4<f32> = m3x4[2]; }
{ let x: vec4<f32> = m4x4[2]; }
{ let x: vec4<f32> = m4x4[3]; }
// Reference test
m2x2[0] = vec2<f32>(0);
m3x2[0] = vec2<f32>(0);
m4x2[0] = vec2<f32>(0);
m2x2[1] = vec2<f32>(0);
m3x2[1] = vec2<f32>(0);
m4x2[1] = vec2<f32>(0);
m3x2[2] = vec2<f32>(0);
m4x2[2] = vec2<f32>(0);
m4x2[3] = vec2<f32>(0);
m2x3[0] = vec3<f32>(0);
m3x3[0] = vec3<f32>(0);
m4x3[0] = vec3<f32>(0);
m2x3[1] = vec3<f32>(0);
m3x3[1] = vec3<f32>(0);
m4x3[1] = vec3<f32>(0);
m3x3[2] = vec3<f32>(0);
m4x3[2] = vec3<f32>(0);
m4x3[3] = vec3<f32>(0);
m2x4[0] = vec4<f32>(0);
m3x4[0] = vec4<f32>(0);
m4x4[0] = vec4<f32>(0);
m2x4[1] = vec4<f32>(0);
m3x4[1] = vec4<f32>(0);
m4x4[1] = vec4<f32>(0);
m3x4[2] = vec4<f32>(0);
m4x4[2] = vec4<f32>(0);
m4x4[3] = vec4<f32>(0);
}
// 8.5.3. Array Access Expression (https://www.w3.org/TR/WGSL/#array-access-expr)
@group(0) @binding(0) var<storage, read_write> ga: array<i32>;
fn testArrayAccessExpression()
{
var a: array<i32, 1> = array(0);
{ let x: i32 = a[0]; };
{ let x: i32 = ga[0]; };
a[0] = 0;
ga[0] = 0;
}
// 8.5.4. Structure Access Expression (https://www.w3.org/TR/WGSL/#struct-access-expr)
struct S { x: i32 };
fn testStructAccessExpression()
{
var s: S;
let x: i32 = s.x;
s.x = 0;
{
let s = &s;
s.x = 0;
}
}