Raw File
cast-zero-to-struct.slang
// cast-zero-to-struct.slang

// Test that HLSL legacy syntax for casting from literal zero
// to a `struct` type works.

//TEST(compute):COMPARE_COMPUTE: -shaderobj
//TEST(compute):COMPARE_COMPUTE:-cpu -shaderobj

struct S
{
	int2 a;
	int2 b;
	int2 c;
}

int test(int val)
{
	S s = (S) 0;

	s.a.x = val;
	s.b.y = val;
	s.c.x = val;

	int2 t = s.a + s.b*256 + s.c*65536;
	return t.x + t.y*16;
}

//TEST_INPUT: ubuffer(data=[0 0 0 0], stride=4):out,name=gOutputBuffer
RWStructuredBuffer<int> gOutputBuffer;

[numthreads(4, 1, 1)]
void computeMain(int3 tid : SV_DispatchThreadID)
{
    int inVal = tid.x;
    int outVal = test(inVal);
    gOutputBuffer[tid.x] = outVal;
}
back to top