//TEST_IGNORE_FILE: Currently failing due to Spire compiler issues. //TEST:COMPARE_HLSL: -target dxbc-assembly -profile cs_4_0 -entry CSMain //-------------------------------------------------------------------------------------- // File: BasicCompute11.hlsl // // This file contains the Compute Shader to perform array A + array B // // Copyright (c) Microsoft Corporation. All rights reserved. //-------------------------------------------------------------------------------------- #ifdef USE_STRUCTURED_BUFFERS struct BufType { int i; float f; #ifdef TEST_DOUBLE double d; #endif }; StructuredBuffer Buffer0 : register(t0); StructuredBuffer Buffer1 : register(t1); RWStructuredBuffer BufferOut : register(u0); [numthreads(1, 1, 1)] void CSMain( uint3 DTid : SV_DispatchThreadID ) { BufferOut[DTid.x].i = Buffer0[DTid.x].i + Buffer1[DTid.x].i; BufferOut[DTid.x].f = Buffer0[DTid.x].f + Buffer1[DTid.x].f; #ifdef TEST_DOUBLE BufferOut[DTid.x].d = Buffer0[DTid.x].d + Buffer1[DTid.x].d; #endif } #else // The following code is for raw buffers ByteAddressBuffer Buffer0 : register(t0); ByteAddressBuffer Buffer1 : register(t1); RWByteAddressBuffer BufferOut : register(u0); [numthreads(1, 1, 1)] void CSMain( uint3 DTid : SV_DispatchThreadID ) { #ifdef TEST_DOUBLE int i0 = asint( Buffer0.Load( DTid.x*16 ) ); float f0 = asfloat( Buffer0.Load( DTid.x*16+4 ) ); double d0 = asdouble( Buffer0.Load( DTid.x*16+8 ), Buffer0.Load( DTid.x*16+12 ) ); int i1 = asint( Buffer1.Load( DTid.x*16 ) ); float f1 = asfloat( Buffer1.Load( DTid.x*16+4 ) ); double d1 = asdouble( Buffer1.Load( DTid.x*16+8 ), Buffer1.Load( DTid.x*16+12 ) ); BufferOut.Store( DTid.x*16, asuint(i0 + i1) ); BufferOut.Store( DTid.x*16+4, asuint(f0 + f1) ); uint dl, dh; asuint( d0 + d1, dl, dh ); BufferOut.Store( DTid.x*16+8, dl ); BufferOut.Store( DTid.x*16+12, dh ); #else int i0 = asint( Buffer0.Load( DTid.x*8 ) ); float f0 = asfloat( Buffer0.Load( DTid.x*8+4 ) ); int i1 = asint( Buffer1.Load( DTid.x*8 ) ); float f1 = asfloat( Buffer1.Load( DTid.x*8+4 ) ); BufferOut.Store( DTid.x*8, asuint(i0 + i1) ); BufferOut.Store( DTid.x*8+4, asuint(f0 + f1) ); #endif // TEST_DOUBLE } #endif // USE_STRUCTURED_BUFFERS