1#version 450 core 2 3#extension GL_ARB_sparse_texture2: enable 4#extension GL_ARB_sparse_texture_clamp: enable 5#extension GL_AMD_texture_gather_bias_lod: enable 6 7layout(set = 0, binding = 0) uniform sampler1D s1D; 8layout(set = 0, binding = 1) uniform sampler2D s2D; 9layout(set = 0, binding = 2) uniform sampler3D s3D; 10layout(set = 0, binding = 3) uniform sampler2DRect s2DRect; 11layout(set = 0, binding = 4) uniform samplerCube sCube; 12layout(set = 0, binding = 5) uniform samplerBuffer sBuffer; 13layout(set = 0, binding = 6) uniform sampler2DMS s2DMS; 14layout(set = 0, binding = 7) uniform sampler1DArray s1DArray; 15layout(set = 0, binding = 8) uniform sampler2DArray s2DArray; 16layout(set = 0, binding = 9) uniform samplerCubeArray sCubeArray; 17layout(set = 0, binding = 10) uniform sampler2DMSArray s2DMSArray; 18 19layout(set = 0, binding = 11) uniform sampler1DShadow s1DShadow; 20layout(set = 0, binding = 12) uniform sampler2DShadow s2DShadow; 21layout(set = 0, binding = 13) uniform sampler2DRectShadow s2DRectShadow; 22layout(set = 0, binding = 14) uniform samplerCubeShadow sCubeShadow; 23layout(set = 0, binding = 15) uniform sampler1DArrayShadow s1DArrayShadow; 24layout(set = 0, binding = 16) uniform sampler2DArrayShadow s2DArrayShadow; 25layout(set = 0, binding = 17) uniform samplerCubeArrayShadow sCubeArrayShadow; 26 27layout(set = 1, binding = 0) layout(rgba16f) uniform image1D i1D; 28layout(set = 1, binding = 1) layout(rgba16f) uniform image2D i2D; 29layout(set = 1, binding = 2) layout(rgba16f) uniform image3D i3D; 30layout(set = 1, binding = 3) layout(rgba16f) uniform image2DRect i2DRect; 31layout(set = 1, binding = 4) layout(rgba16f) uniform imageCube iCube; 32layout(set = 1, binding = 5) layout(rgba16f) uniform image1DArray i1DArray; 33layout(set = 1, binding = 6) layout(rgba16f) uniform image2DArray i2DArray; 34layout(set = 1, binding = 7) layout(rgba16f) uniform imageCubeArray iCubeArray; 35layout(set = 1, binding = 8) layout(rgba16f) uniform imageBuffer iBuffer; 36layout(set = 1, binding = 9) layout(rgba16f) uniform image2DMS i2DMS; 37layout(set = 1, binding = 10) layout(rgba16f) uniform image2DMSArray i2DMSArray; 38 39layout(set = 2, binding = 0) uniform texture1D t1D; 40layout(set = 2, binding = 1) uniform texture2D t2D; 41layout(set = 2, binding = 2) uniform texture3D t3D; 42layout(set = 2, binding = 3) uniform texture2DRect t2DRect; 43layout(set = 2, binding = 4) uniform textureCube tCube; 44layout(set = 2, binding = 5) uniform texture1DArray t1DArray; 45layout(set = 2, binding = 6) uniform texture2DArray t2DArray; 46layout(set = 2, binding = 7) uniform textureCubeArray tCubeArray; 47layout(set = 2, binding = 8) uniform textureBuffer tBuffer; 48layout(set = 2, binding = 9) uniform texture2DMS t2DMS; 49layout(set = 2, binding = 10) uniform texture2DMSArray t2DMSArray; 50 51layout(set = 2, binding = 11) uniform sampler s; 52layout(set = 2, binding = 12) uniform samplerShadow sShadow; 53 54layout(set = 3, binding = 0, input_attachment_index = 0) uniform subpassInput subpass; 55layout(set = 3, binding = 1, input_attachment_index = 0) uniform subpassInputMS subpassMS; 56 57layout(location = 0) in float c1; 58layout(location = 1) in vec2 c2; 59layout(location = 2) in vec3 c3; 60layout(location = 3) in vec4 c4; 61 62layout(location = 4) in float compare; 63layout(location = 5) in float lod; 64layout(location = 6) in float bias; 65layout(location = 7) in float lodClamp; 66 67layout(location = 8) in float dPdxy1; 68layout(location = 9) in vec2 dPdxy2; 69layout(location = 10) in vec3 dPdxy3; 70 71const int offset1 = 1; 72const ivec2 offset2 = ivec2(1); 73const ivec3 offset3 = ivec3(1); 74const ivec2 offsets[4] = { offset2, offset2, offset2, offset2 }; 75 76layout(location = 0) out vec4 fragColor; 77 78vec4 testTexture() 79{ 80 vec4 texel = vec4(0.0); 81 82 texel += texture(s1D, c1); 83 texel += texture(s2D, c2); 84 texel += texture(s3D, c3); 85 texel += texture(sCube, c3); 86 texel.x += texture(s1DShadow, c3); 87 texel.x += texture(s2DShadow, c3); 88 texel.x += texture(sCubeShadow, c4); 89 texel += texture(s1DArray, c2); 90 texel += texture(s2DArray, c3); 91 texel += texture(sCubeArray, c4); 92 texel.x += texture(s1DArrayShadow, c3); 93 texel.x += texture(s2DArrayShadow, c4); 94 texel += texture(s2DRect, c2); 95 texel.x += texture(s2DRectShadow, c3); 96 texel.x += texture(sCubeArrayShadow, c4, compare); 97 98 return texel; 99} 100 101vec4 testTextureProj() 102{ 103 vec4 texel = vec4(0.0); 104 105 texel += textureProj(s1D, c2); 106 texel += textureProj(s1D, c4); 107 texel += textureProj(s2D, c3); 108 texel += textureProj(s2D, c4); 109 texel += textureProj(s3D, c4); 110 texel.x += textureProj(s1DShadow, c4); 111 texel.x += textureProj(s2DShadow, c4); 112 texel += textureProj(s2DRect, c3); 113 texel += textureProj(s2DRect, c4); 114 texel.x += textureProj(s2DRectShadow, c4); 115 116 return texel; 117} 118 119vec4 testTextureLod() 120{ 121 vec4 texel = vec4(0.0); 122 123 texel += textureLod(s1D, c1, lod); 124 texel += textureLod(s2D, c2, lod); 125 texel += textureLod(s3D, c3, lod); 126 texel += textureLod(sCube, c3, lod); 127 texel.x += textureLod(s1DShadow, c3, lod); 128 texel.x += textureLod(s2DShadow, c3, lod); 129 texel += textureLod(s1DArray, c2, lod); 130 texel += textureLod(s2DArray, c3, lod); 131 texel.x += textureLod(s1DArrayShadow, c3, lod); 132 texel += textureLod(sCubeArray, c4, lod); 133 134 return texel; 135} 136 137vec4 testTextureOffset() 138{ 139 vec4 texel = vec4(0.0); 140 141 texel += textureOffset(s1D, c1, offset1); 142 texel += textureOffset(s2D, c2, offset2); 143 texel += textureOffset(s3D, c3, offset3); 144 texel += textureOffset(s2DRect, c2, offset2); 145 texel.x += textureOffset(s2DRectShadow, c3, offset2); 146 texel.x += textureOffset(s1DShadow, c3, offset1); 147 texel.x += textureOffset(s2DShadow, c3, offset2); 148 texel += textureOffset(s1DArray, c2, offset1); 149 texel += textureOffset(s2DArray, c3, offset2); 150 texel.x += textureOffset(s1DArrayShadow, c3, offset1); 151 texel.x += textureOffset(s2DArrayShadow, c4, offset2); 152 153 return texel; 154} 155 156vec4 testTextureProjOffset() 157{ 158 vec4 texel = vec4(0.0); 159 160 texel += textureProjOffset(s1D, c2, offset1); 161 texel += textureProjOffset(s1D, c4, offset1); 162 texel += textureProjOffset(s2D, c3, offset2); 163 texel += textureProjOffset(s2D, c4, offset2); 164 texel += textureProjOffset(s3D, c4, offset3); 165 texel += textureProjOffset(s2DRect, c3, offset2); 166 texel += textureProjOffset(s2DRect, c4, offset2); 167 texel.x += textureProjOffset(s2DRectShadow, c4, offset2); 168 texel.x += textureProjOffset(s1DShadow, c4, offset1); 169 texel.x += textureProjOffset(s2DShadow, c4, offset2); 170 171 return texel; 172} 173 174vec4 testTextureLodOffset() 175{ 176 vec4 texel = vec4(0.0); 177 178 texel += textureLodOffset(s1D, c1, lod, offset1); 179 texel += textureLodOffset(s2D, c2, lod, offset2); 180 texel += textureLodOffset(s3D, c3, lod, offset3); 181 texel.x += textureLodOffset(s1DShadow, c3, lod, offset1); 182 texel.x += textureLodOffset(s2DShadow, c3, lod, offset2); 183 texel += textureLodOffset(s1DArray, c2, lod, offset1); 184 texel += textureLodOffset(s2DArray, c3, lod, offset2); 185 texel.x += textureLodOffset(s1DArrayShadow, c3, lod, offset1); 186 187 return texel; 188} 189 190vec4 testTextureProjLodOffset() 191{ 192 vec4 texel = vec4(0.0); 193 194 texel += textureProjLodOffset(s1D, c2, lod, offset1); 195 texel += textureProjLodOffset(s1D, c4, lod, offset1); 196 texel += textureProjLodOffset(s2D, c3, lod, offset2); 197 texel += textureProjLodOffset(s2D, c4, lod, offset2); 198 texel += textureProjLodOffset(s3D, c4, lod, offset3); 199 texel.x += textureProjLodOffset(s1DShadow, c4, lod, offset1); 200 texel.x += textureProjLodOffset(s2DShadow, c4, lod, offset2); 201 202 return texel; 203} 204 205vec4 testTexelFetch() 206{ 207 vec4 texel = vec4(0.0); 208 209 texel += texelFetch(s1D, int(c1), int(lod)); 210 texel += texelFetch(s2D, ivec2(c2), int(lod)); 211 texel += texelFetch(s3D, ivec3(c3), int(lod)); 212 texel += texelFetch(s2DRect, ivec2(c2)); 213 texel += texelFetch(s1DArray, ivec2(c2), int(lod)); 214 texel += texelFetch(s2DArray, ivec3(c3), int(lod)); 215 texel += texelFetch(sBuffer, int(c1)); 216 texel += texelFetch(s2DMS, ivec2(c2), 1); 217 texel += texelFetch(s2DMSArray, ivec3(c3), 2); 218 219 return texel; 220} 221 222vec4 testTexelFetchOffset() 223{ 224 vec4 texel = vec4(0.0); 225 226 texel += texelFetchOffset(s1D, int(c1), int(lod), offset1); 227 texel += texelFetchOffset(s2D, ivec2(c2), int(lod), offset2); 228 texel += texelFetchOffset(s3D, ivec3(c3), int(lod), offset3); 229 texel += texelFetchOffset(s2DRect, ivec2(c2), offset2); 230 texel += texelFetchOffset(s1DArray, ivec2(c2), int(lod), offset1); 231 texel += texelFetchOffset(s2DArray, ivec3(c3), int(lod), offset2); 232 233 return texel; 234} 235 236vec4 testTextureGrad() 237{ 238 vec4 texel = vec4(0.0); 239 240 texel += textureGrad(s1D, c1, dPdxy1, dPdxy1); 241 texel += textureGrad(s2D, c2, dPdxy2, dPdxy2); 242 texel += textureGrad(s3D, c3, dPdxy3, dPdxy3); 243 texel += textureGrad(sCube, c3, dPdxy3, dPdxy3); 244 texel += textureGrad(s2DRect, c2, dPdxy2, dPdxy2); 245 texel.x += textureGrad(s2DRectShadow, c3, dPdxy2, dPdxy2); 246 texel.x += textureGrad(s1DShadow, c3, dPdxy1, dPdxy1); 247 texel.x += textureGrad(s2DShadow, c3, dPdxy2, dPdxy2); 248 texel.x += textureGrad(sCubeShadow, c4, dPdxy3, dPdxy3); 249 texel += textureGrad(s1DArray, c2, dPdxy1, dPdxy1); 250 texel += textureGrad(s2DArray, c3, dPdxy2, dPdxy2); 251 texel.x += textureGrad(s1DArrayShadow, c3, dPdxy1, dPdxy1); 252 texel.x += textureGrad(s2DArrayShadow, c4, dPdxy2, dPdxy2); 253 texel += textureGrad(sCubeArray, c4, dPdxy3, dPdxy3); 254 255 return texel; 256} 257 258vec4 testTextureGradOffset() 259{ 260 vec4 texel = vec4(0.0); 261 262 texel += textureGradOffset(s1D, c1, dPdxy1, dPdxy1, offset1); 263 texel += textureGradOffset(s2D, c2, dPdxy2, dPdxy2, offset2); 264 texel += textureGradOffset(s3D, c3, dPdxy3, dPdxy3, offset3); 265 texel += textureGradOffset(s2DRect, c2, dPdxy2, dPdxy2, offset2); 266 texel.x += textureGradOffset(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2); 267 texel.x += textureGradOffset(s1DShadow, c3, dPdxy1, dPdxy1, offset1); 268 texel.x += textureGradOffset(s2DShadow, c3, dPdxy2, dPdxy2, offset2); 269 texel += textureGradOffset(s1DArray, c2, dPdxy1, dPdxy1, offset1); 270 texel += textureGradOffset(s2DArray, c3, dPdxy2, dPdxy2, offset2); 271 texel.x += textureGradOffset(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1); 272 texel.x += textureGradOffset(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2); 273 274 return texel; 275} 276 277vec4 testTextureProjGrad() 278{ 279 vec4 texel = vec4(0.0); 280 281 texel += textureProjGrad(s1D, c2, dPdxy1, dPdxy1); 282 texel += textureProjGrad(s1D, c4, dPdxy1, dPdxy1); 283 texel += textureProjGrad(s2D, c3, dPdxy2, dPdxy2); 284 texel += textureProjGrad(s2D, c4, dPdxy2, dPdxy2); 285 texel += textureProjGrad(s3D, c4, dPdxy3, dPdxy3); 286 texel += textureProjGrad(s2DRect, c3, dPdxy2, dPdxy2); 287 texel += textureProjGrad(s2DRect, c4, dPdxy2, dPdxy2); 288 texel.x += textureProjGrad(s2DRectShadow, c4, dPdxy2, dPdxy2); 289 texel.x += textureProjGrad(s1DShadow, c4, dPdxy1, dPdxy1); 290 texel.x += textureProjGrad(s2DShadow, c4, dPdxy2, dPdxy2); 291 292 return texel; 293} 294 295vec4 testTextureProjGradoffset() 296{ 297 vec4 texel = vec4(0.0); 298 299 texel += textureProjGradOffset(s1D, c2, dPdxy1, dPdxy1, offset1); 300 texel += textureProjGradOffset(s1D, c4, dPdxy1, dPdxy1, offset1); 301 texel += textureProjGradOffset(s2D, c3, dPdxy2, dPdxy2, offset2); 302 texel += textureProjGradOffset(s2D, c4, dPdxy2, dPdxy2, offset2); 303 texel += textureProjGradOffset(s2DRect, c3, dPdxy2, dPdxy2, offset2); 304 texel += textureProjGradOffset(s2DRect, c4, dPdxy2, dPdxy2, offset2); 305 texel.x += textureProjGradOffset(s2DRectShadow, c4, dPdxy2, dPdxy2, offset2); 306 texel += textureProjGradOffset(s3D, c4, dPdxy3, dPdxy3, offset3); 307 texel.x += textureProjGradOffset(s1DShadow, c4, dPdxy1, dPdxy1, offset1); 308 texel.x += textureProjGradOffset(s2DShadow, c4, dPdxy2, dPdxy2, offset2); 309 310 return texel; 311} 312 313vec4 testTextureGather() 314{ 315 vec4 texel = vec4(0.0); 316 317 texel += textureGather(s2D, c2, 0); 318 texel += textureGather(s2DArray, c3, 0); 319 texel += textureGather(sCube, c3, 0); 320 texel += textureGather(sCubeArray, c4, 0); 321 texel += textureGather(s2DRect, c2, 0); 322 texel += textureGather(s2DShadow, c2, compare); 323 texel += textureGather(s2DArrayShadow, c3, compare); 324 texel += textureGather(sCubeShadow, c3, compare); 325 texel += textureGather(sCubeArrayShadow, c4, compare); 326 texel += textureGather(s2DRectShadow, c2, compare); 327 328 return texel; 329} 330 331vec4 testTextureGatherOffset() 332{ 333 vec4 texel = vec4(0.0); 334 335 texel += textureGatherOffset(s2D, c2, offset2, 0); 336 texel += textureGatherOffset(s2DArray, c3, offset2, 0); 337 texel += textureGatherOffset(s2DRect, c2, offset2, 0); 338 texel += textureGatherOffset(s2DShadow, c2, compare, offset2); 339 texel += textureGatherOffset(s2DArrayShadow, c3, compare, offset2); 340 texel += textureGatherOffset(s2DRectShadow, c2, compare, offset2); 341 342 return texel; 343} 344 345vec4 testTextureGatherOffsets() 346{ 347 vec4 texel = vec4(0.0); 348 349 texel += textureGatherOffsets(s2D, c2, offsets, 0); 350 texel += textureGatherOffsets(s2DArray, c3, offsets, 0); 351 texel += textureGatherOffsets(s2DRect, c2, offsets, 0); 352 texel += textureGatherOffsets(s2DShadow, c2, compare, offsets); 353 texel += textureGatherOffsets(s2DArrayShadow, c3, compare, offsets); 354 texel += textureGatherOffsets(s2DRectShadow, c2, compare, offsets); 355 356 return texel; 357} 358 359vec4 testTextureGatherLod() 360{ 361 vec4 texel = vec4(0.0); 362 363 texel += textureGatherLodAMD(s2D, c2, lod, 0); 364 texel += textureGatherLodAMD(s2DArray, c3, lod, 0); 365 texel += textureGatherLodAMD(sCube, c3, lod, 0); 366 texel += textureGatherLodAMD(sCubeArray, c4, lod, 0); 367 368 return texel; 369} 370 371vec4 testTextureGatherLodOffset() 372{ 373 vec4 texel = vec4(0.0); 374 375 texel += textureGatherLodOffsetAMD(s2D, c2, lod, offset2, 0); 376 texel += textureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, 0); 377 378 return texel; 379} 380 381vec4 testTextureGatherLodOffsets() 382{ 383 vec4 texel = vec4(0.0); 384 385 texel += textureGatherLodOffsetsAMD(s2D, c2, lod, offsets, 0); 386 texel += textureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, 0); 387 388 return texel; 389} 390 391ivec4 testTextureSize() 392{ 393 ivec4 size = ivec4(0); 394 395 size.x += textureSize(s1D, int(lod)); 396 size.xy += textureSize(s2D, int(lod)); 397 size.xyz += textureSize(s3D, int(lod)); 398 size.xy += textureSize(sCube, int(lod)); 399 size.x += textureSize(s1DShadow, int(lod)); 400 size.xy += textureSize(s2DShadow, int(lod)); 401 size.xy += textureSize(sCubeShadow, int(lod)); 402 size.xyz += textureSize(sCubeArray, int(lod)); 403 size.xyz += textureSize(sCubeArrayShadow, int(lod)); 404 size.xy += textureSize(s2DRect); 405 size.xy += textureSize(s2DRectShadow); 406 size.xy += textureSize(s1DArray, int(lod)); 407 size.xyz += textureSize(s2DArray, int(lod)); 408 size.xy += textureSize(s1DArrayShadow, int(lod)); 409 size.xyz += textureSize(s2DArrayShadow, int(lod)); 410 size.x += textureSize(sBuffer); 411 size.xy += textureSize(s2DMS); 412 size.xyz += textureSize(s2DMSArray); 413 414 return size; 415} 416 417vec2 testTextureQueryLod() 418{ 419 vec2 lod = vec2(0.0); 420 421 lod += textureQueryLod(s1D, c1); 422 lod += textureQueryLod(s2D, c2); 423 lod += textureQueryLod(s3D, c3); 424 lod += textureQueryLod(sCube, c3); 425 lod += textureQueryLod(s1DArray, c1); 426 lod += textureQueryLod(s2DArray, c2); 427 lod += textureQueryLod(sCubeArray, c3); 428 lod += textureQueryLod(s1DShadow, c1); 429 lod += textureQueryLod(s2DShadow, c2); 430 lod += textureQueryLod(sCubeArrayShadow, c3); 431 lod += textureQueryLod(s1DArrayShadow, c1); 432 lod += textureQueryLod(s2DArrayShadow, c2); 433 lod += textureQueryLod(sCubeArrayShadow, c3); 434 435 return lod; 436} 437 438int testTextureQueryLevels() 439{ 440 int levels = 0; 441 442 levels += textureQueryLevels(s1D); 443 levels += textureQueryLevels(s2D); 444 levels += textureQueryLevels(s3D); 445 levels += textureQueryLevels(sCube); 446 levels += textureQueryLevels(s1DShadow); 447 levels += textureQueryLevels(s2DShadow); 448 levels += textureQueryLevels(sCubeShadow); 449 levels += textureQueryLevels(sCubeArray); 450 levels += textureQueryLevels(sCubeArrayShadow); 451 levels += textureQueryLevels(s1DArray); 452 levels += textureQueryLevels(s2DArray); 453 levels += textureQueryLevels(s1DArrayShadow); 454 levels += textureQueryLevels(s2DArrayShadow); 455 456 return levels; 457} 458 459int testTextureSamples() 460{ 461 int samples = 0; 462 463 samples += textureSamples(s2DMS); 464 samples += textureSamples(s2DMSArray); 465 466 return samples; 467} 468 469vec4 testImageLoad() 470{ 471 vec4 texel = vec4(0.0); 472 473 texel += imageLoad(i1D, int(c1)); 474 texel += imageLoad(i2D, ivec2(c2)); 475 texel += imageLoad(i3D, ivec3(c3)); 476 texel += imageLoad(i2DRect, ivec2(c2)); 477 texel += imageLoad(iCube, ivec3(c3)); 478 texel += imageLoad(iBuffer, int(c1)); 479 texel += imageLoad(i1DArray, ivec2(c2)); 480 texel += imageLoad(i2DArray, ivec3(c3)); 481 texel += imageLoad(iCubeArray, ivec3(c3)); 482 texel += imageLoad(i2DMS, ivec2(c2), 1); 483 texel += imageLoad(i2DMSArray, ivec3(c3), 1); 484 485 return texel; 486} 487 488void testImageStore(vec4 data) 489{ 490 imageStore(i1D, int(c1), data); 491 imageStore(i2D, ivec2(c2), data); 492 imageStore(i3D, ivec3(c3), data); 493 imageStore(i2DRect, ivec2(c2), data); 494 imageStore(iCube, ivec3(c3), data); 495 imageStore(iBuffer, int(c1), data); 496 imageStore(i1DArray, ivec2(c2), data); 497 imageStore(i2DArray, ivec3(c3), data); 498 imageStore(iCubeArray, ivec3(c3), data); 499 imageStore(i2DMS, ivec2(c2), 1, data); 500 imageStore(i2DMSArray, ivec3(c3), 1, data); 501} 502 503vec4 testSparseTexture() 504{ 505 vec4 texel = vec4(0.0); 506 507 sparseTextureARB(s2D, c2, texel); 508 sparseTextureARB(s3D, c3, texel); 509 sparseTextureARB(sCube, c3, texel); 510 sparseTextureARB(s2DShadow, c3, texel.x); 511 sparseTextureARB(sCubeShadow, c4, texel.x); 512 sparseTextureARB(s2DArray, c3, texel); 513 sparseTextureARB(sCubeArray, c4, texel); 514 sparseTextureARB(s2DArrayShadow, c4, texel.x); 515 sparseTextureARB(s2DRect, c2, texel); 516 sparseTextureARB(s2DRectShadow, c3, texel.x); 517 sparseTextureARB(sCubeArrayShadow, c4, compare, texel.x); 518 519 return texel; 520} 521 522vec4 testSparseTextureLod() 523{ 524 vec4 texel = vec4(0.0); 525 526 sparseTextureLodARB(s2D, c2, lod, texel); 527 sparseTextureLodARB(s3D, c3, lod, texel); 528 sparseTextureLodARB(sCube, c3, lod, texel); 529 sparseTextureLodARB(s2DShadow, c3, lod, texel.x); 530 sparseTextureLodARB(s2DArray, c3, lod, texel); 531 sparseTextureLodARB(sCubeArray, c4, lod, texel); 532 533 return texel; 534} 535 536vec4 testSparseTextureOffset() 537{ 538 vec4 texel = vec4(0.0); 539 540 sparseTextureOffsetARB(s2D, c2, offset2, texel); 541 sparseTextureOffsetARB(s3D, c3, offset3, texel); 542 sparseTextureOffsetARB(s2DRect, c2, offset2, texel); 543 sparseTextureOffsetARB(s2DRectShadow, c3, offset2, texel.x); 544 sparseTextureOffsetARB(s2DShadow, c3, offset2, texel.x); 545 sparseTextureOffsetARB(s2DArray, c3, offset2, texel); 546 sparseTextureOffsetARB(s2DArrayShadow, c4, offset2, texel.x); 547 548 return texel; 549} 550 551vec4 testSparseTextureLodOffset() 552{ 553 vec4 texel = vec4(0.0); 554 555 sparseTextureLodOffsetARB(s2D, c2, lod, offset2, texel); 556 sparseTextureLodOffsetARB(s3D, c3, lod, offset3, texel); 557 sparseTextureLodOffsetARB(s2DShadow, c3, lod, offset2, texel.x); 558 sparseTextureLodOffsetARB(s2DArray, c3, lod, offset2, texel); 559 560 return texel; 561} 562 563vec4 testSparseTextureGrad() 564{ 565 vec4 texel = vec4(0.0); 566 567 sparseTextureGradARB(s2D, c2, dPdxy2, dPdxy2, texel); 568 sparseTextureGradARB(s3D, c3, dPdxy3, dPdxy3, texel); 569 sparseTextureGradARB(sCube, c3, dPdxy3, dPdxy3, texel); 570 sparseTextureGradARB(s2DRect, c2, dPdxy2, dPdxy2, texel); 571 sparseTextureGradARB(s2DRectShadow, c3, dPdxy2, dPdxy2, texel.x); 572 sparseTextureGradARB(s2DShadow, c3, dPdxy2, dPdxy2, texel.x); 573 sparseTextureGradARB(sCubeShadow, c4, dPdxy3, dPdxy3, texel.x); 574 sparseTextureGradARB(s2DArray, c3, dPdxy2, dPdxy2, texel); 575 sparseTextureGradARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, texel.x); 576 sparseTextureGradARB(sCubeArray, c4, dPdxy3, dPdxy3, texel); 577 578 return texel; 579} 580 581vec4 testSparseTextureGradOffset() 582{ 583 vec4 texel = vec4(0.0); 584 585 sparseTextureGradOffsetARB(s2D, c2, dPdxy2, dPdxy2, offset2, texel); 586 sparseTextureGradOffsetARB(s3D, c3, dPdxy3, dPdxy3, offset3, texel); 587 sparseTextureGradOffsetARB(s2DRect, c2, dPdxy2, dPdxy2, offset2, texel); 588 sparseTextureGradOffsetARB(s2DRectShadow, c3, dPdxy2, dPdxy2, offset2, texel.x); 589 sparseTextureGradOffsetARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, texel.x); 590 sparseTextureGradOffsetARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, texel); 591 sparseTextureGradOffsetARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, texel.x); 592 593 return texel; 594} 595 596vec4 testSparseTexelFetch() 597{ 598 vec4 texel = vec4(0.0); 599 600 sparseTexelFetchARB(s2D, ivec2(c2), int(lod), texel); 601 sparseTexelFetchARB(s3D, ivec3(c3), int(lod), texel); 602 sparseTexelFetchARB(s2DRect, ivec2(c2), texel); 603 sparseTexelFetchARB(s2DArray, ivec3(c3), int(lod), texel); 604 sparseTexelFetchARB(s2DMS, ivec2(c2), 1, texel); 605 sparseTexelFetchARB(s2DMSArray, ivec3(c3), 2, texel); 606 607 return texel; 608} 609 610vec4 testSparseTexelFetchOffset() 611{ 612 vec4 texel = vec4(0.0); 613 614 sparseTexelFetchOffsetARB(s2D, ivec2(c2), int(lod), offset2, texel); 615 sparseTexelFetchOffsetARB(s3D, ivec3(c3), int(lod), offset3, texel); 616 sparseTexelFetchOffsetARB(s2DRect, ivec2(c2), offset2, texel); 617 sparseTexelFetchOffsetARB(s2DArray, ivec3(c3), int(lod), offset2, texel); 618 619 return texel; 620} 621 622vec4 testSparseTextureGather() 623{ 624 vec4 texel = vec4(0.0); 625 626 sparseTextureGatherARB(s2D, c2, texel, 0); 627 sparseTextureGatherARB(s2DArray, c3, texel, 0); 628 sparseTextureGatherARB(sCube, c3, texel, 0); 629 sparseTextureGatherARB(sCubeArray, c4, texel, 0); 630 sparseTextureGatherARB(s2DRect, c2, texel, 0); 631 sparseTextureGatherARB(s2DShadow, c2, compare, texel); 632 sparseTextureGatherARB(s2DArrayShadow, c3, compare, texel); 633 sparseTextureGatherARB(sCubeShadow, c3, compare, texel); 634 sparseTextureGatherARB(sCubeArrayShadow, c4, compare, texel); 635 sparseTextureGatherARB(s2DRectShadow, c2, compare, texel); 636 637 return texel; 638} 639 640vec4 testSparseTextureGatherOffset() 641{ 642 vec4 texel = vec4(0.0); 643 644 sparseTextureGatherOffsetARB(s2D, c2, offset2, texel, 0); 645 sparseTextureGatherOffsetARB(s2DArray, c3, offset2, texel, 0); 646 sparseTextureGatherOffsetARB(s2DRect, c2, offset2, texel, 0); 647 sparseTextureGatherOffsetARB(s2DShadow, c2, compare, offset2, texel); 648 sparseTextureGatherOffsetARB(s2DArrayShadow, c3, compare, offset2, texel); 649 sparseTextureGatherOffsetARB(s2DRectShadow, c2, compare, offset2, texel); 650 651 return texel; 652} 653 654vec4 testSparseTextureGatherOffsets() 655{ 656 vec4 texel = vec4(0.0); 657 const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); 658 659 sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel, 0); 660 sparseTextureGatherOffsetsARB(s2DArray, c3, constOffsets, texel, 0); 661 sparseTextureGatherOffsetsARB(s2DRect, c2, constOffsets, texel, 0); 662 sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, constOffsets, texel); 663 sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, constOffsets, texel); 664 sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, constOffsets, texel); 665 666 return texel; 667} 668 669vec4 testSparseTextureGatherLod() 670{ 671 vec4 texel = vec4(0.0); 672 673 sparseTextureGatherLodAMD(s2D, c2, lod, texel, 0); 674 sparseTextureGatherLodAMD(s2DArray, c3, lod, texel, 0); 675 sparseTextureGatherLodAMD(sCube, c3, lod, texel, 0); 676 sparseTextureGatherLodAMD(sCubeArray, c4, lod, texel, 0); 677 678 return texel; 679} 680 681vec4 testSparseTextureGatherLodOffset() 682{ 683 vec4 texel = vec4(0.0); 684 685 sparseTextureGatherLodOffsetAMD(s2D, c2, lod, offset2, texel, 0); 686 sparseTextureGatherLodOffsetAMD(s2DArray, c3, lod, offset2, texel, 0); 687 688 return texel; 689} 690 691vec4 testSparseTextureGatherLodOffsets() 692{ 693 vec4 texel = vec4(0.0); 694 695 sparseTextureGatherLodOffsetsAMD(s2D, c2, lod, offsets, texel, 0); 696 sparseTextureGatherLodOffsetsAMD(s2DArray, c3, lod, offsets, texel, 0); 697 698 return texel; 699} 700 701vec4 testSparseImageLoad() 702{ 703 vec4 texel = vec4(0.0); 704 705 sparseImageLoadARB(i2D, ivec2(c2), texel); 706 sparseImageLoadARB(i3D, ivec3(c3), texel); 707 sparseImageLoadARB(i2DRect, ivec2(c2), texel); 708 sparseImageLoadARB(iCube, ivec3(c3), texel); 709 sparseImageLoadARB(i2DArray, ivec3(c3), texel); 710 sparseImageLoadARB(iCubeArray, ivec3(c3), texel); 711 sparseImageLoadARB(i2DMS, ivec2(c2), 1, texel); 712 sparseImageLoadARB(i2DMSArray, ivec3(c3), 2, texel); 713 714 return texel; 715} 716 717vec4 testSparseTextureClamp() 718{ 719 vec4 texel = vec4(0.0); 720 721 sparseTextureClampARB(s2D, c2, lodClamp, texel); 722 sparseTextureClampARB(s3D, c3, lodClamp, texel); 723 sparseTextureClampARB(sCube, c3, lodClamp, texel); 724 sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x); 725 sparseTextureClampARB(sCubeShadow, c4, lodClamp, texel.x); 726 sparseTextureClampARB(s2DArray, c3, lodClamp, texel); 727 sparseTextureClampARB(sCubeArray, c4, lodClamp, texel); 728 sparseTextureClampARB(s2DArrayShadow, c4, lodClamp, texel.x); 729 sparseTextureClampARB(sCubeArrayShadow, c4, compare, lodClamp, texel.x); 730 731 return texel; 732} 733 734vec4 testTextureClamp() 735{ 736 vec4 texel = vec4(0.0); 737 738 texel += textureClampARB(s1D, c1, lodClamp); 739 texel += textureClampARB(s2D, c2, lodClamp); 740 texel += textureClampARB(s3D, c3, lodClamp); 741 texel += textureClampARB(sCube, c3, lodClamp); 742 texel.x += textureClampARB(s1DShadow, c3, lodClamp); 743 texel.x += textureClampARB(s2DShadow, c3, lodClamp); 744 texel.x += textureClampARB(sCubeShadow, c4, lodClamp); 745 texel += textureClampARB(s1DArray, c2, lodClamp); 746 texel += textureClampARB(s2DArray, c3, lodClamp); 747 texel += textureClampARB(sCubeArray, c4, lodClamp); 748 texel.x += textureClampARB(s1DArrayShadow, c3, lodClamp); 749 texel.x += textureClampARB(s2DArrayShadow, c4, lodClamp); 750 texel.x += textureClampARB(sCubeArrayShadow, c4, compare, lodClamp); 751 752 return texel; 753} 754 755vec4 testSparseTextureOffsetClamp() 756{ 757 vec4 texel = vec4(0.0); 758 759 sparseTextureOffsetClampARB(s2D, c2, offset2, lodClamp, texel); 760 sparseTextureOffsetClampARB(s3D, c3, offset3, lodClamp, texel); 761 sparseTextureOffsetClampARB(s2DShadow, c3, offset2, lodClamp, texel.x); 762 sparseTextureOffsetClampARB(s2DArray, c3, offset2, lodClamp, texel); 763 sparseTextureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp, texel.x); 764 765 return texel; 766} 767 768vec4 testTextureOffsetClamp() 769{ 770 vec4 texel = vec4(0.0); 771 772 texel += textureOffsetClampARB(s1D, c1, offset1, lodClamp); 773 texel += textureOffsetClampARB(s2D, c2, offset2, lodClamp); 774 texel += textureOffsetClampARB(s3D, c3, offset3, lodClamp); 775 texel.x += textureOffsetClampARB(s1DShadow, c3, offset1, lodClamp); 776 texel.x += textureOffsetClampARB(s2DShadow, c3, offset2, lodClamp); 777 texel += textureOffsetClampARB(s1DArray, c2, offset1, lodClamp); 778 texel += textureOffsetClampARB(s2DArray, c3, offset2, lodClamp); 779 texel.x += textureOffsetClampARB(s1DArrayShadow, c3, offset1, lodClamp); 780 texel.x += textureOffsetClampARB(s2DArrayShadow, c4, offset2, lodClamp); 781 782 return texel; 783} 784 785vec4 testSparseTextureGradClamp() 786{ 787 vec4 texel = vec4(0.0); 788 789 sparseTextureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp, texel); 790 sparseTextureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp, texel); 791 sparseTextureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp, texel); 792 sparseTextureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp, texel.x); 793 sparseTextureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp, texel.x); 794 sparseTextureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp, texel); 795 sparseTextureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp, texel.x); 796 sparseTextureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp, texel); 797 798 return texel; 799} 800 801vec4 testTextureGradClamp() 802{ 803 vec4 texel = vec4(0.0); 804 805 texel += textureGradClampARB(s1D, c1, dPdxy1, dPdxy1, lodClamp); 806 texel += textureGradClampARB(s2D, c2, dPdxy2, dPdxy2, lodClamp); 807 texel += textureGradClampARB(s3D, c3, dPdxy3, dPdxy3, lodClamp); 808 texel += textureGradClampARB(sCube, c3, dPdxy3, dPdxy3, lodClamp); 809 texel.x += textureGradClampARB(s1DShadow, c3, dPdxy1, dPdxy1, lodClamp); 810 texel.x += textureGradClampARB(s2DShadow, c3, dPdxy2, dPdxy2, lodClamp); 811 texel.x += textureGradClampARB(sCubeShadow, c4, dPdxy3, dPdxy3, lodClamp); 812 texel += textureGradClampARB(s1DArray, c2, dPdxy1, dPdxy1, lodClamp); 813 texel += textureGradClampARB(s2DArray, c3, dPdxy2, dPdxy2, lodClamp); 814 texel.x += textureGradClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, lodClamp); 815 texel.x += textureGradClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, lodClamp); 816 texel += textureGradClampARB(sCubeArray, c4, dPdxy3, dPdxy3, lodClamp); 817 818 return texel; 819} 820 821vec4 testSparseTextureGradOffsetClamp() 822{ 823 vec4 texel = vec4(0.0); 824 825 sparseTextureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp, texel); 826 sparseTextureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp, texel); 827 sparseTextureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel.x); 828 sparseTextureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp, texel); 829 sparseTextureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp, texel.x); 830 831 return texel; 832} 833 834vec4 testTextureGradOffsetClamp() 835{ 836 vec4 texel = vec4(0.0); 837 838 texel += textureGradOffsetClampARB(s1D, c1, dPdxy1, dPdxy1, offset1, lodClamp); 839 texel += textureGradOffsetClampARB(s2D, c2, dPdxy2, dPdxy2, offset2, lodClamp); 840 texel += textureGradOffsetClampARB(s3D, c3, dPdxy3, dPdxy3, offset3, lodClamp); 841 texel.x += textureGradOffsetClampARB(s1DShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp); 842 texel.x += textureGradOffsetClampARB(s2DShadow, c3, dPdxy2, dPdxy2, offset2, lodClamp); 843 texel += textureGradOffsetClampARB(s1DArray, c2, dPdxy1, dPdxy1, offset1, lodClamp); 844 texel += textureGradOffsetClampARB(s2DArray, c3, dPdxy2, dPdxy2, offset2, lodClamp); 845 texel.x += textureGradOffsetClampARB(s1DArrayShadow, c3, dPdxy1, dPdxy1, offset1, lodClamp); 846 texel.x += textureGradOffsetClampARB(s2DArrayShadow, c4, dPdxy2, dPdxy2, offset2, lodClamp); 847 848 return texel; 849} 850 851vec4 testCombinedTextureSampler() 852{ 853 vec4 texel = vec4(0.0); 854 855 texel += texture(sampler1D(t1D, s), c1); 856 texel += texture(sampler2D(t2D, s), c2); 857 texel += texture(sampler3D(t3D, s), c3); 858 texel += texture(samplerCube(tCube, s), c3); 859 texel.x += texture(sampler1DShadow(t1D, sShadow), c3); 860 texel.x += texture(sampler2DShadow(t2D, sShadow), c3); 861 texel.x += texture(samplerCubeShadow(tCube, sShadow), c4); 862 texel += texture(sampler1DArray(t1DArray, s), c2); 863 texel += texture(sampler2DArray(t2DArray, s), c3); 864 texel += texture(samplerCubeArray(tCubeArray, s), c4); 865 texel.x += texture(sampler1DArrayShadow(t1DArray, sShadow), c3); 866 texel.x += texture(sampler2DArrayShadow(t2DArray, sShadow), c4); 867 texel += texture(sampler2DRect(t2DRect, s), c2); 868 texel.x += texture(sampler2DRectShadow(t2DRect, sShadow), c3); 869 texel.x += texture(samplerCubeArrayShadow(tCubeArray, sShadow), c4, compare); 870 871 return texel; 872} 873 874vec4 testSubpassLoad() 875{ 876 return subpassLoad(subpass) + subpassLoad(subpassMS, 2); 877} 878 879void main() 880{ 881 vec4 result = vec4(0.0); 882 883 result += testTexture(); 884 result += testTextureProj(); 885 result += testTextureLod(); 886 result += testTextureOffset(); 887 result += testTextureLodOffset(); 888 result += testTextureProjLodOffset(); 889 result += testTexelFetch(); 890 result += testTexelFetchOffset(); 891 result += testTextureGrad(); 892 result += testTextureGradOffset(); 893 result += testTextureProjGrad(); 894 result += testTextureProjGradoffset(); 895 result += testTextureGather(); 896 result += testTextureGatherOffset(); 897 result += testTextureGatherOffsets(); 898 result += testTextureGatherLod(); 899 result += testTextureGatherLodOffset(); 900 result += testTextureGatherLodOffsets(); 901 902 result += vec4(testTextureSize()); 903 result.xy += vec2(testTextureQueryLod()); 904 result.x += testTextureQueryLevels(); 905 result.x += testTextureSamples(); 906 907 result += testImageLoad(); 908 testImageStore(result); 909 910 result += testSparseTexture(); 911 result += testSparseTextureLod(); 912 result += testSparseTextureOffset(); 913 result += testSparseTextureLodOffset(); 914 result += testSparseTextureGrad(); 915 result += testSparseTextureGradOffset(); 916 result += testSparseTexelFetch(); 917 result += testSparseTexelFetchOffset(); 918 result += testSparseTextureGather(); 919 result += testSparseTextureGatherOffset(); 920 result += testSparseTextureGatherOffsets(); 921 result += testSparseTextureGatherLod(); 922 result += testSparseTextureGatherLodOffset(); 923 result += testSparseTextureGatherLodOffsets(); 924 925 result += testSparseImageLoad(); 926 927 result += testSparseTextureClamp(); 928 result += testTextureClamp(); 929 result += testSparseTextureOffsetClamp(); 930 result += testTextureOffsetClamp(); 931 result += testSparseTextureGrad(); 932 result += testTextureGrad(); 933 result += testSparseTextureGradOffsetClamp(); 934 result += testTextureGradOffsetClamp(); 935 936 result += testCombinedTextureSampler(); 937 result += testSubpassLoad(); 938 939 fragColor = result; 940} 941 942