tint/test-runner: Split expectations for FXC and DXC

Change tint's `--fxc` flag to take the path of the FXC compiler DLL.
Have tint attempt to validate with both FXC and DXC if `--validate` is
passed.

Fix the 'dirsWithNoPassExpectations' logic which looks like it got
broken with the tint -> dawn merge. It also incorrectly applied
filepath.FromSlash() on windows.

Change-Id: I0f46aa5c21bc48a2abc48402c41f846aff4a8633
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/96800
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Ben Clayton <bclayton@chromium.org>
This commit is contained in:
Ben Clayton
2022-07-22 17:43:27 +00:00
committed by Dawn LUCI CQ
parent 0778d9a48f
commit 7d34de88f1
5122 changed files with 73624 additions and 206 deletions

View File

@@ -0,0 +1,16 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
struct S {
int data[64];
};
RWByteAddressBuffer result : register(u1, space0);
[numthreads(1, 1, 1)]
void f() {
S s = (S)0;
result.Store(0u, asuint(s.data[asint(ubo[0].x)]));
return;
}

View File

@@ -0,0 +1,16 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
struct S {
int data[64];
};
RWByteAddressBuffer result : register(u1, space0);
static S s = (S)0;
[numthreads(1, 1, 1)]
void f() {
result.Store(0u, asuint(s.data[asint(ubo[0].x)]));
return;
}

View File

@@ -0,0 +1,13 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
RWByteAddressBuffer result : register(u2, space0);
RWByteAddressBuffer ssbo : register(u1, space0);
[numthreads(1, 1, 1)]
void f() {
result.Store(0u, asuint(asint(ssbo.Load((4u * uint(asint(ubo[0].x)))))));
return;
}

View File

@@ -0,0 +1,12 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[5];
};
RWByteAddressBuffer result : register(u2, space0);
[numthreads(1, 1, 1)]
void f() {
const uint scalar_offset = ((16u * uint(asint(ubo[4].x)))) / 4;
result.Store(0u, asuint(asint(ubo[scalar_offset / 4][scalar_offset % 4])));
return;
}

View File

@@ -0,0 +1,31 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
struct S {
int data[64];
};
RWByteAddressBuffer result : register(u1, space0);
groupshared S s;
struct tint_symbol_2 {
uint local_invocation_index : SV_GroupIndex;
};
void f_inner(uint local_invocation_index) {
{
[loop] for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
const uint i = idx;
s.data[i] = 0;
}
}
GroupMemoryBarrierWithGroupSync();
result.Store(0u, asuint(s.data[asint(ubo[0].x)]));
}
[numthreads(1, 1, 1)]
void f(tint_symbol_2 tint_symbol_1) {
f_inner(tint_symbol_1.local_invocation_index);
return;
}

View File

@@ -0,0 +1,21 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
struct S {
int data[64];
};
RWByteAddressBuffer result : register(u1, space0);
[numthreads(1, 1, 1)]
void f() {
S s = (S)0;
{
int tint_symbol_2[64] = s.data;
tint_symbol_2[asint(ubo[0].x)] = 1;
s.data = tint_symbol_2;
}
result.Store(0u, asuint(s.data[3]));
return;
}

View File

@@ -0,0 +1,25 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
struct S {
int data[64];
};
RWByteAddressBuffer result : register(u1, space0);
void x(inout S p) {
{
int tint_symbol_2[64] = p.data;
tint_symbol_2[asint(ubo[0].x)] = 1;
p.data = tint_symbol_2;
}
}
[numthreads(1, 1, 1)]
void f() {
S s = (S)0;
x(s);
result.Store(0u, asuint(s.data[3]));
return;
}

View File

@@ -0,0 +1,21 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
struct S {
int data[64];
};
RWByteAddressBuffer result : register(u1, space0);
static S s = (S)0;
[numthreads(1, 1, 1)]
void f() {
{
int tint_symbol_2[64] = s.data;
tint_symbol_2[asint(ubo[0].x)] = 1;
s.data = tint_symbol_2;
}
result.Store(0u, asuint(s.data[3]));
return;
}

View File

@@ -0,0 +1,25 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
struct S {
int data[64];
};
RWByteAddressBuffer result : register(u1, space0);
static S s = (S)0;
void x(inout S p) {
{
int tint_symbol_2[64] = p.data;
tint_symbol_2[asint(ubo[0].x)] = 1;
p.data = tint_symbol_2;
}
}
[numthreads(1, 1, 1)]
void f() {
x(s);
result.Store(0u, asuint(s.data[3]));
return;
}

View File

@@ -0,0 +1,14 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
RWByteAddressBuffer result : register(u2, space0);
RWByteAddressBuffer ssbo : register(u1, space0);
[numthreads(1, 1, 1)]
void f() {
ssbo.Store((4u * uint(asint(ubo[0].x))), asuint(1));
result.Store(0u, asuint(asint(ssbo.Load(12u))));
return;
}

View File

@@ -0,0 +1,32 @@
cbuffer cbuffer_ubo : register(b0, space0) {
uint4 ubo[1];
};
struct S {
int data[64];
};
RWByteAddressBuffer result : register(u1, space0);
groupshared S s;
struct tint_symbol_2 {
uint local_invocation_index : SV_GroupIndex;
};
void f_inner(uint local_invocation_index) {
{
[loop] for(uint idx = local_invocation_index; (idx < 64u); idx = (idx + 1u)) {
const uint i = idx;
s.data[i] = 0;
}
}
GroupMemoryBarrierWithGroupSync();
s.data[asint(ubo[0].x)] = 1;
result.Store(0u, asuint(s.data[3]));
}
[numthreads(1, 1, 1)]
void f(tint_symbol_2 tint_symbol_1) {
f_inner(tint_symbol_1.local_invocation_index);
return;
}

View File

@@ -0,0 +1,60 @@
bug/fxc/gradient_in_varying_loop/1112.wgsl:23:33 warning: 'textureSample' must only be called from uniform control flow
let sampleDepth : f32 = textureSample(depthTexture, Sampler, offset.xy).r;
^^^^^^^^^^^^^
bug/fxc/gradient_in_varying_loop/1112.wgsl:18:28 note: control flow depends on non-uniform value
if (offset.x < 0.0 || offset.y < 0.0 || offset.x > 1.0 || offset.y > 1.0) {
^^
bug/fxc/gradient_in_varying_loop/1112.wgsl:8:29 note: return value of 'textureSample' may be non-uniform
let random: vec3<f32> = textureSample(randomTexture, Sampler, vUV).rgb;
^^^^^^^^^^^^^
SamplerState tint_symbol : register(s0, space0);
Texture2D<float4> randomTexture : register(t1, space0);
Texture2D<float4> depthTexture : register(t2, space0);
struct tint_symbol_2 {
float2 vUV : TEXCOORD0;
};
struct tint_symbol_3 {
float4 value : SV_Target0;
};
float4 main_inner(float2 vUV) {
const float3 random = randomTexture.Sample(tint_symbol, vUV).rgb;
int i = 0;
[loop] while (true) {
if ((i < 1)) {
} else {
break;
}
const float3 offset = float3((random.x).xxx);
bool tint_tmp_2 = (offset.x < 0.0f);
if (!tint_tmp_2) {
tint_tmp_2 = (offset.y < 0.0f);
}
bool tint_tmp_1 = (tint_tmp_2);
if (!tint_tmp_1) {
tint_tmp_1 = (offset.x > 1.0f);
}
bool tint_tmp = (tint_tmp_1);
if (!tint_tmp) {
tint_tmp = (offset.y > 1.0f);
}
if ((tint_tmp)) {
i = (i + 1);
continue;
}
const float sampleDepth = depthTexture.Sample(tint_symbol, offset.xy).r;
i = (i + 1);
}
return (1.0f).xxxx;
}
tint_symbol_3 main(tint_symbol_2 tint_symbol_1) {
const float4 inner_result = main_inner(tint_symbol_1.vUV);
tint_symbol_3 wrapper_result = (tint_symbol_3)0;
wrapper_result.value = inner_result;
return wrapper_result;
}

View File

@@ -0,0 +1,38 @@
struct Particle {
float3 position[8];
float lifetime;
float4 color;
float3 velocity;
};
ByteAddressBuffer particles : register(t3, space1);
cbuffer cbuffer_sim : register(b4, space1) {
uint4 sim[1];
};
typedef float3 tint_symbol_3_ret[8];
tint_symbol_3_ret tint_symbol_3(ByteAddressBuffer buffer, uint offset) {
float3 arr[8] = (float3[8])0;
{
[loop] for(uint i_1 = 0u; (i_1 < 8u); i_1 = (i_1 + 1u)) {
arr[i_1] = asfloat(buffer.Load3((offset + (i_1 * 16u))));
}
}
return arr;
}
Particle tint_symbol_2(ByteAddressBuffer buffer, uint offset) {
const Particle tint_symbol_8 = {tint_symbol_3(buffer, (offset + 0u)), asfloat(buffer.Load((offset + 128u))), asfloat(buffer.Load4((offset + 144u))), asfloat(buffer.Load3((offset + 160u)))};
return tint_symbol_8;
}
[numthreads(1, 1, 1)]
void main() {
Particle particle = tint_symbol_2(particles, (176u * 0u));
{
float3 tint_symbol_1[8] = particle.position;
tint_symbol_1[sim[0].x] = particle.position[sim[0].x];
particle.position = tint_symbol_1;
}
return;
}

View File

@@ -0,0 +1,21 @@
void set_scalar_float2x4(inout float2x4 mat, int col, int row, float val) {
switch (col) {
case 0:
mat[0] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[0];
break;
case 1:
mat[1] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[1];
break;
}
}
cbuffer cbuffer_uniforms : register(b4, space1) {
uint4 uniforms[1];
};
[numthreads(1, 1, 1)]
void main() {
float2x4 m1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
set_scalar_float2x4(m1, 0, uniforms[0].x, 1.0f);
return;
}

View File

@@ -0,0 +1,21 @@
void set_scalar_float2x4(inout float2x4 mat, int col, int row, float val) {
switch (col) {
case 0:
mat[0] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[0];
break;
case 1:
mat[1] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[1];
break;
}
}
cbuffer cbuffer_uniforms : register(b4, space1) {
uint4 uniforms[1];
};
[numthreads(1, 1, 1)]
void main() {
float2x4 m1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
set_scalar_float2x4(m1, uniforms[0].y, uniforms[0].x, 1.0f);
return;
}

View File

@@ -0,0 +1,17 @@
void set_vector_float2x4(inout float2x4 mat, int col, float4 val) {
switch (col) {
case 0: mat[0] = val; break;
case 1: mat[1] = val; break;
}
}
cbuffer cbuffer_uniforms : register(b4, space1) {
uint4 uniforms[1];
};
[numthreads(1, 1, 1)]
void main() {
float2x4 m1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
set_vector_float2x4(m1, uniforms[0].x, (1.0f).xxxx);
return;
}

View File

@@ -0,0 +1,21 @@
void set_scalar_float2x4(inout float2x4 mat, int col, int row, float val) {
switch (col) {
case 0:
mat[0] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[0];
break;
case 1:
mat[1] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[1];
break;
}
}
cbuffer cbuffer_uniforms : register(b4, space1) {
uint4 uniforms[1];
};
static float2x4 m1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
[numthreads(1, 1, 1)]
void main() {
set_scalar_float2x4(m1, 0, uniforms[0].x, 1.0f);
return;
}

View File

@@ -0,0 +1,21 @@
void set_scalar_float2x4(inout float2x4 mat, int col, int row, float val) {
switch (col) {
case 0:
mat[0] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[0];
break;
case 1:
mat[1] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[1];
break;
}
}
cbuffer cbuffer_uniforms : register(b4, space1) {
uint4 uniforms[1];
};
static float2x4 m1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
[numthreads(1, 1, 1)]
void main() {
set_scalar_float2x4(m1, uniforms[0].y, uniforms[0].x, 1.0f);
return;
}

View File

@@ -0,0 +1,21 @@
void set_scalar_float2x4(inout float2x4 mat, int col, int row, float val) {
switch (col) {
case 0:
mat[0] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[0];
break;
case 1:
mat[1] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[1];
break;
}
}
cbuffer cbuffer_uniforms : register(b4, space1) {
uint4 uniforms[1];
};
static float2x4 m1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
[numthreads(1, 1, 1)]
void main() {
set_scalar_float2x4(m1, uniforms[0].y, 0, 1.0f);
return;
}

View File

@@ -0,0 +1,21 @@
void set_scalar_float2x4(inout float2x4 mat, int col, int row, float val) {
switch (col) {
case 0:
mat[0] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[0];
break;
case 1:
mat[1] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[1];
break;
}
}
cbuffer cbuffer_uniforms : register(b4, space1) {
uint4 uniforms[1];
};
static float2x4 m1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
[numthreads(1, 1, 1)]
void main() {
set_scalar_float2x4(m1, uniforms[0].y, 0, 1.0f);
return;
}

View File

@@ -0,0 +1,17 @@
void set_vector_float2x4(inout float2x4 mat, int col, float4 val) {
switch (col) {
case 0: mat[0] = val; break;
case 1: mat[1] = val; break;
}
}
cbuffer cbuffer_uniforms : register(b4, space1) {
uint4 uniforms[1];
};
static float2x4 m1 = float2x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
[numthreads(1, 1, 1)]
void main() {
set_vector_float2x4(m1, uniforms[0].x, (1.0f).xxxx);
return;
}

View File

@@ -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() {
{
[loop] 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() {
{
[loop] for(int i = 0; (i < 2); i = (i + 1)) {
foo();
}
}
return;
}

View File

@@ -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() {
{
[loop] for(int i = 0; (i < 2); i = (i + 1)) {
foo();
}
}
return;
}

View File

@@ -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);
{
[loop] 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;
}

View File

@@ -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);
{
[loop] 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;
}

View File

@@ -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);
{
[loop] 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;
}

View File

@@ -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;
}