yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
0bc89f27b
master
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}