yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Mukund KeshavaFix CUDA issues with texture reads and surface writes (#7780)0bc89f27b

master
7.1 KiB204 linesraw
1// Test for verifying subscript operator support in cuda.
2
3//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
4//TEST_INPUT: Texture1D(size=4, content = one):name cudaT1D
5Texture1D<float> cudaT1D;
6//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D
7Texture2D<float> cudaT2D;
8//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D_f2
9Texture2D<float2> cudaT2D_f2;
10//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D_f4
11Texture2D<float4> cudaT2D_f4;
12//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D
13Texture3D<float> cudaT3D;
14//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D_f2
15Texture3D<float2> cudaT3D_f2;
16//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D_f4
17Texture3D<float4> cudaT3D_f4;
18//TEST_INPUT: TextureCube(size=16, content = one):name cudaTCube
19TextureCube<float> cudaTCube;
20//TEST_INPUT: Texture2D(size=16, content = one, arrayLength=3):name cudaT2DArray
21Texture2DArray<float> cudaT2DArray;
22//TEST_INPUT: Texture2D(size=16, content = one, arrayLength=3):name cudaT2DArray_f2
23Texture2DArray<float2> cudaT2DArray_f2;
24//TEST_INPUT: Texture2D(size=16, content = one, arrayLength=3):name cudaT2DArray_f4
25Texture2DArray<float4> cudaT2DArray_f4;
26
27// New texture declarations for uint and int variants
28//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D_uint
29Texture2D<uint> cudaT2D_uint;
30//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D_uint2
31Texture2D<uint2> cudaT2D_uint2;
32//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D_uint4
33Texture2D<uint4> cudaT2D_uint4;
34//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D_int
35Texture2D<int> cudaT2D_int;
36//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D_int2
37Texture2D<int2> cudaT2D_int2;
38//TEST_INPUT: Texture2D(size=8, content = one):name cudaT2D_int4
39Texture2D<int4> cudaT2D_int4;
40
41//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D_uint
42Texture3D<uint> cudaT3D_uint;
43//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D_uint2
44Texture3D<uint2> cudaT3D_uint2;
45//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D_uint4
46Texture3D<uint4> cudaT3D_uint4;
47//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D_int
48Texture3D<int> cudaT3D_int;
49//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D_int2
50Texture3D<int2> cudaT3D_int2;
51//TEST_INPUT: Texture3D(size=8, content = one):name cudaT3D_int4
52Texture3D<int4> cudaT3D_int4;
53
54//TEST_INPUT: ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name cudaOutputBuffer
55RWStructuredBuffer<float> cudaOutputBuffer;
56
57[numthreads(11, 1, 1)]
58[shader("compute")]
59void computeMain(int3 dispatchThreadID : SV_DispatchThreadID)
60{
61    int idx = dispatchThreadID.x;
62    
63    switch (idx)
64    {
65    case 1:
66        {
67            int var = 0;
68            float result = cudaT1D[0];
69            // This is not supported in PTX.
70            //cudaOutputBuffer[idx] = result;
71        }    
72    break;
73    
74    case 2:
75        {
76            int2 var = int2(1, 2);
77            float result = cudaT2D[var];
78            cudaOutputBuffer[idx] = result;
79            
80            float2 result2 = cudaT2D_f2[var];
81            cudaOutputBuffer[idx] += result2.x;
82            cudaOutputBuffer[idx] += result2.y;
83
84            float4 result4 = cudaT2D_f4[var];
85            cudaOutputBuffer[idx] += result4.x;
86            cudaOutputBuffer[idx] += result4.y;
87            cudaOutputBuffer[idx] += result4.z;
88            cudaOutputBuffer[idx] += result4.w;
89        }
90    break;
91
92    case 3:
93        {
94            int3 var = int3(1, 1, 1);
95            float result = cudaT3D[var];
96            cudaOutputBuffer[idx] = result;
97            
98            float2 result2 = cudaT3D_f2[var];
99            cudaOutputBuffer[idx] += result2.x;
100            cudaOutputBuffer[idx] += result2.y;
101
102            float4 result4 = cudaT3D_f4[var];
103            cudaOutputBuffer[idx] += result4.x;
104            cudaOutputBuffer[idx] += result4.y;
105            cudaOutputBuffer[idx] += result4.z;
106            cudaOutputBuffer[idx] += result4.w;
107        }
108    break;
109
110    case 4:
111        {
112            int3 var = int3(0, 0, 1);
113            float result = cudaT2DArray[var];
114            cudaOutputBuffer[idx] = result;
115            
116            float2 result2 = cudaT2DArray_f2[var];
117            cudaOutputBuffer[idx] += result2.x;
118            cudaOutputBuffer[idx] += result2.y;
119
120            float4 result4 = cudaT2DArray_f4[var];
121            cudaOutputBuffer[idx] += result4.x;
122            cudaOutputBuffer[idx] += result4.y;
123            cudaOutputBuffer[idx] += result4.z;
124            cudaOutputBuffer[idx] += result4.w;
125        }
126    break;
127
128    case 5:
129        {
130            // Test 2D textures with uint variants
131            int2 var = int2(1, 2);
132            uint result = cudaT2D_uint[var];
133            cudaOutputBuffer[idx] = float(result);
134            
135            uint2 result2 = cudaT2D_uint2[var];
136            cudaOutputBuffer[idx] += float(result2.x);
137            cudaOutputBuffer[idx] += float(result2.y);
138
139            uint4 result4 = cudaT2D_uint4[var];
140            cudaOutputBuffer[idx] += float(result4.x);
141            cudaOutputBuffer[idx] += float(result4.y);
142            cudaOutputBuffer[idx] += float(result4.z);
143            cudaOutputBuffer[idx] += float(result4.w);
144        }
145    break;
146
147    case 6:
148        {
149            // Test 2D textures with int variants
150            int2 var = int2(1, 2);
151            int result = cudaT2D_int[var];
152            cudaOutputBuffer[idx] = float(result);
153            
154            int2 result2 = cudaT2D_int2[var];
155            cudaOutputBuffer[idx] += float(result2.x);
156            cudaOutputBuffer[idx] += float(result2.y);
157
158            int4 result4 = cudaT2D_int4[var];
159            cudaOutputBuffer[idx] += float(result4.x);
160            cudaOutputBuffer[idx] += float(result4.y);
161            cudaOutputBuffer[idx] += float(result4.z);
162            cudaOutputBuffer[idx] += float(result4.w);
163        }
164    break;
165
166    case 7:
167        {
168            // Test 3D textures with uint variants
169            int3 var = int3(1, 1, 1);
170            uint result = cudaT3D_uint[var];
171            cudaOutputBuffer[idx] = float(result);
172            
173            uint2 result2 = cudaT3D_uint2[var];
174            cudaOutputBuffer[idx] += float(result2.x);
175            cudaOutputBuffer[idx] += float(result2.y);
176
177            uint4 result4 = cudaT3D_uint4[var];
178            cudaOutputBuffer[idx] += float(result4.x);
179            cudaOutputBuffer[idx] += float(result4.y);
180            cudaOutputBuffer[idx] += float(result4.z);
181            cudaOutputBuffer[idx] += float(result4.w);
182        }
183    break;
184
185    case 8:
186        {
187            // Test 3D textures with int variants
188            int3 var = int3(1, 1, 1);
189            int result = cudaT3D_int[var];
190            cudaOutputBuffer[idx] = float(result);
191            
192            int2 result2 = cudaT3D_int2[var];
193            cudaOutputBuffer[idx] += float(result2.x);
194            cudaOutputBuffer[idx] += float(result2.y);
195
196            int4 result4 = cudaT3D_int4[var];
197            cudaOutputBuffer[idx] += float(result4.x);
198            cudaOutputBuffer[idx] += float(result4.y);
199            cudaOutputBuffer[idx] += float(result4.z);
200            cudaOutputBuffer[idx] += float(result4.w);
201        }
202    break;
203    }
204}