yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
626e81478
master
1//TEST:SIMPLE(filecheck=SPIRV):-target spirv-assembly -emit-spirv-via-glsl -entry fragmentMain -stage fragment -DENABLE_CLAMP 2//TEST:SIMPLE(filecheck=SPIRV):-target spirv -entry fragmentMain -stage fragment -DENABLE_CLAMP 3//DISABLED_TEST:SIMPLE(filecheck=SPIRV):-target spirv-assembly -entry fragmentMain -stage fragment -DENABLE_CLAMP -emit-spirv-directly 4 5//DISABLED_TEST:SIMPLE(filecheck=DXIL):-target dxil-assembly -entry fragmentMain -stage fragment 6//TEST:SIMPLE(filecheck=HLSL):-target hlsl -entry fragmentMain -stage fragment 7 8// TODO: The SPIRV test is fine locally, but seems to lead to an impossible to debug hang in CI 9 10//DISABLED_TEST:SIMPLE:-target spirv-assembly -entry fragmentMain -stage fragment -DENABLE_CLAMP 11//DISABLED_TEST:SIMPLE:-target dxil-assembly -entry fragmentMain -stage fragment 12//DISABLED_TEST:SIMPLE:-target hlsl -entry fragmentMain -stage fragment 13 14// In order to make sure that all of the data produced in each 15// query is referenced (and thus cannot be DCE'd away), we maintain 16// single accumulator that will have the bits of each query result 17// mixed into it. 18 19void accumulate(inout uint r, uint u) 20{ 21 r = r ^ u; 22} 23 24void accumulate(inout uint r, bool b) 25{ 26 accumulate(r, uint(b)); 27} 28 29void accumulate(inout uint r, uint2 u) 30{ 31 accumulate(r, u.x); 32 accumulate(r, u.y); 33} 34 35void accumulate(inout uint r, uint3 u) 36{ 37 accumulate(r, u.x); 38 accumulate(r, u.y); 39 accumulate(r, u.z); 40} 41 42void accumulate_2D(inout uint r, TextureFootprint2D f) 43{ 44 accumulate(r, f.anchor); 45// HLSL-DAG: NvFootprintExtractAnchorTileLoc2D 46 47 accumulate(r, f.offset); 48// HLSL-DAG: NvFootprintExtractOffset2D 49 50 accumulate(r, f.mask); 51// HLSL-DAG: NvFootprintExtractBitmask 52 53 accumulate(r, f.lod); 54// HLSL-DAG: NvFootprintExtractLOD 55 56 accumulate(r, f.granularity); 57// HLSL-DAG: NvFootprintExtractReturnGran 58 59 accumulate(r, f.isSingleLevel); 60} 61 62void accumulate_3D(inout uint r, TextureFootprint3D f) 63{ 64 accumulate(r, f.anchor); 65// HLSL-DAG: NvFootprintExtractAnchorTileLoc3D 66 67 accumulate(r, f.offset); 68// HLSL-DAG: NvFootprintExtractOffset3D 69 70 accumulate(r, f.mask); 71// HLSL-DAG: NvFootprintExtractBitmask 72 73 accumulate(r, f.lod); 74// HLSL-DAG: NvFootprintExtractLOD 75 76 accumulate(r, f.granularity); 77// HLSL-DAG: NvFootprintExtractReturnGran 78 79 accumulate(r, f.isSingleLevel); 80} 81 82// SPRIV: OpExtension "SPV_NV_shader_image_footprint" 83 84void fragmentMain( 85 float v : VARYING, 86 87 uniform Texture2D texture_2D, 88// SPIRV-DAG: OpTypeImage {{.*}} 2D 89 90// HLSL-DAG: Texture2D{{.*}}register(t0) 91 92 uniform Texture3D texture_3D, 93// SPIRV-DAG: OpTypeImage {{.*}} 3D 94 95// HLSL-DAG: Texture3D{{.*}}register(t1) 96 97 uniform SamplerState sampler, 98 uniform RWStructuredBuffer<uint> outputBuffer, 99 uniform float4 c, 100 uniform float4 gx, 101 uniform float4 gy, 102 uniform uint g, 103 uniform float lodBias, 104 uniform float lodClamp, 105 uniform float lod) 106{ 107 uint index = uint(v); 108 uint r = 0; 109 110 TextureFootprint2D.Granularity granularity = g; 111 112#ifdef ENABLE_CLAMP 113#define CLAMP(ARG) ARG 114#else 115#define CLAMP(ARG) /* empty */ 116#endif 117 118#define TEST_COMMON(ND, COARSE_OR_FINE) \ 119 accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE (granularity, sampler, coords )) ;\ 120 accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##Bias (granularity, sampler, coords, lodBias )) ;\ 121CLAMP( accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##Clamp (granularity, sampler, coords, lodClamp ))) ;\ 122CLAMP( accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##BiasClamp (granularity, sampler, coords, lodBias, lodClamp))) ;\ 123 accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##Level (granularity, sampler, coords, lod )) ;\ 124/* end */ 125 126#define TEST_GRAD(ND, COARSE_OR_FINE) \ 127 accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##Grad (granularity, sampler, coords, dx, dy )) ;\ 128CLAMP( accumulate##ND(r, texture##ND.queryFootprint##COARSE_OR_FINE##GradClamp (granularity, sampler, coords, dx, dy, lodClamp ))) ;\ 129/* end */ 130 131 132#define TEST_2D(COARSE_OR_FINE) \ 133 TEST_COMMON(_2D, COARSE_OR_FINE) \ 134 TEST_GRAD(_2D, COARSE_OR_FINE) \ 135 /* end */ 136 137#define TEST_3D(COARSE_OR_FINE) \ 138 TEST_COMMON(_3D, COARSE_OR_FINE) \ 139 /* end */ 140 141// SPIRV-DAG: [[TRUE:%[a-zA-Z0-9_]+]] = OpConstantTrue 142// SPIRV-DAG: [[FALSE:%[a-zA-Z0-9_]+]] = OpConstantFalse 143 144 { 145 let coords = c.xy; 146 let dx = gx.xy; 147 let dy = gy.xy; 148 149 TEST_2D(Coarse); 150 151// SPIRV: OpImageSampleFootprintNV 152// SPIRV-SAME: [[TRUE]] 153// HLSL-DAG: NvFootprintCoarse{{.*}}NV_EXTN_TEXTURE_2D 154 155// SPIRV: OpImageSampleFootprintNV 156// SPIRV-SAME: [[TRUE]] Bias 157// HLSL-DAG: NvFootprintCoarseBias{{.*}}NV_EXTN_TEXTURE_2D 158 159// SPIRV: OpImageSampleFootprintNV 160// SPIRV-SAME: [[TRUE]] MinLod 161 162// SPIRV: OpImageSampleFootprintNV 163// SPIRV-SAME: [[TRUE]] Bias|MinLod 164 165// SPIRV: OpImageSampleFootprintNV 166// SPIRV-SAME: [[TRUE]] Lod 167// HLSL-DAG: NvFootprintCoarseLevel{{.*}}NV_EXTN_TEXTURE_2D 168 169// SPIRV: OpImageSampleFootprintNV 170// SPIRV-SAME: [[TRUE]] Grad 171// HLSL-DAG: NvFootprintCoarseGrad{{.*}}NV_EXTN_TEXTURE_2D 172 173// SPIRV: OpImageSampleFootprintNV 174// SPIRV-SAME: [[TRUE]] Grad|MinLod 175 176 TEST_2D(Fine); 177 178// SPIRV: OpImageSampleFootprintNV 179// SPIRV-SAME: [[FALSE]] 180// HLSL-DAG: NvFootprintFine{{.*}}NV_EXTN_TEXTURE_2D 181 182// SPIRV: OpImageSampleFootprintNV 183// SPIRV-SAME: [[FALSE]] Bias 184// HLSL-DAG: NvFootprintFineBias{{.*}}NV_EXTN_TEXTURE_2D 185 186// SPIRV: OpImageSampleFootprintNV 187// SPIRV-SAME: [[FALSE]] MinLod 188 189// SPIRV: OpImageSampleFootprintNV 190// SPIRV-SAME: [[FALSE]] Bias|MinLod 191 192// SPIRV: OpImageSampleFootprintNV 193// SPIRV-SAME: [[FALSE]] Lod 194// HLSL-DAG: NvFootprintFineLevel{{.*}}NV_EXTN_TEXTURE_2D 195 196// SPIRV: OpImageSampleFootprintNV 197// SPIRV-SAME: [[FALSE]] Grad 198// HLSL-DAG: NvFootprintFineGrad{{.*}}NV_EXTN_TEXTURE_2D 199 200// SPIRV: OpImageSampleFootprintNV 201// SPIRV-SAME: [[FALSE]] Grad|MinLod 202 203 } 204 205 { 206 let coords = c.xyz; 207 let dx = gx.xyz; 208 let dy = gy.xyz; 209 210 TEST_3D(Coarse); 211 212// SPIRV: OpImageSampleFootprintNV 213// SPIRV-SAME: [[TRUE]] 214// HLSL-DAG: NvFootprintCoarse{{.*}}NV_EXTN_TEXTURE_3D 215 216// SPIRV: OpImageSampleFootprintNV 217// SPIRV-SAME: [[TRUE]] Bias 218// HLSL-DAG: NvFootprintCoarseBias{{.*}}NV_EXTN_TEXTURE_3D 219 220// SPIRV: OpImageSampleFootprintNV 221// SPIRV-SAME: [[TRUE]] MinLod 222 223// SPIRV: OpImageSampleFootprintNV 224// SPIRV-SAME: [[TRUE]] Bias|MinLod 225 226// SPIRV: OpImageSampleFootprintNV 227// SPIRV-SAME: [[TRUE]] Lod 228// HLSL-DAG: NvFootprintCoarseLevel{{.*}}NV_EXTN_TEXTURE_3D 229 230 TEST_3D(Fine); 231 232// SPIRV: OpImageSampleFootprintNV 233// SPIRV-SAME: [[FALSE]] 234// HLSL-DAG: NvFootprintFine{{.*}}NV_EXTN_TEXTURE_3D 235 236// SPIRV: OpImageSampleFootprintNV 237// SPIRV-SAME: [[FALSE]] Bias 238// HLSL-DAG: NvFootprintFineBias{{.*}}NV_EXTN_TEXTURE_3D 239 240// SPIRV: OpImageSampleFootprintNV 241// SPIRV-SAME: [[FALSE]] MinLod 242 243// SPIRV: OpImageSampleFootprintNV 244// SPIRV-SAME: [[FALSE]] Bias|MinLod 245 246// SPIRV: OpImageSampleFootprintNV 247// SPIRV-SAME: [[FALSE]] Lod 248// HLSL-DAG: NvFootprintFineLevel{{.*}}NV_EXTN_TEXTURE_3D 249 250 } 251 252 outputBuffer[index] = r; 253}