mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
For bug #2580: sparseTextureGatherOffsetsARB should only take constant offsets.
This commit is contained in:
parent
2c7c84c8ac
commit
18cfc3f106
@ -48,6 +48,31 @@ void foo()
|
||||
float f = imageAtomicExchange(i2dmsa, ivec3(in3), 2, 4.5);
|
||||
}
|
||||
|
||||
#extension GL_ARB_sparse_texture2: enable
|
||||
|
||||
uniform sampler2D s2D;
|
||||
uniform isampler2DArray is2DArray;
|
||||
uniform sampler2DRectShadow s2DRectShadow;
|
||||
|
||||
in flat ivec2 offsets[4];
|
||||
in vec2 c2;
|
||||
in vec3 c3;
|
||||
|
||||
void testOffsets()
|
||||
{
|
||||
vec4 texel = vec4(0.0);
|
||||
ivec4 itexel = ivec4(0);
|
||||
const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
|
||||
sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel);
|
||||
sparseTextureGatherOffsetsARB(is2DArray, c3, constOffsets, itexel, 2);
|
||||
sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, constOffsets, texel);
|
||||
|
||||
sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel); // Error : Non constant offsets
|
||||
sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2); // Error : Non constant offsets
|
||||
sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel); // Error : Non constant offsets
|
||||
|
||||
}
|
||||
|
||||
in float gl_CullDistance[6];
|
||||
|
||||
float cull(int i)
|
||||
|
@ -1,10 +1,14 @@
|
||||
450.frag
|
||||
ERROR: 0:63: 'location' : cannot use in a block array where new locations are needed for each block element
|
||||
ERROR: 0:68: 'early_fragment_tests' : can only apply to a standalone qualifier
|
||||
ERROR: 2 compilation errors. No code generated.
|
||||
ERROR: 0:70: 'offsets' : argument must be compile-time constant
|
||||
ERROR: 0:71: 'offsets' : argument must be compile-time constant
|
||||
ERROR: 0:72: 'offsets' : argument must be compile-time constant
|
||||
ERROR: 0:88: 'location' : cannot use in a block array where new locations are needed for each block element
|
||||
ERROR: 0:93: 'early_fragment_tests' : can only apply to a standalone qualifier
|
||||
ERROR: 5 compilation errors. No code generated.
|
||||
|
||||
|
||||
Shader version: 450
|
||||
Requested GL_ARB_sparse_texture2
|
||||
ERROR: node is still EOpNull!
|
||||
0:8 Function Definition: main( ( global void)
|
||||
0:8 Function Parameters:
|
||||
@ -133,26 +137,107 @@ ERROR: node is still EOpNull!
|
||||
0:48 2 (const int)
|
||||
0:48 Constant:
|
||||
0:48 4.500000
|
||||
0:53 Function Definition: cull(i1; ( global float)
|
||||
0:53 Function Parameters:
|
||||
0:53 'i' ( in int)
|
||||
0:55 Sequence
|
||||
0:55 Branch: Return with expression
|
||||
0:55 Test condition and select ( temp float)
|
||||
0:55 Condition
|
||||
0:55 Compare Greater Than or Equal ( temp bool)
|
||||
0:55 'i' ( in int)
|
||||
0:55 Constant:
|
||||
0:55 6 (const int)
|
||||
0:55 true case
|
||||
0:55 direct index ( smooth temp float CullDistance)
|
||||
0:55 'gl_CullDistance' ( smooth in 6-element array of float CullDistance)
|
||||
0:55 Constant:
|
||||
0:55 5 (const int)
|
||||
0:55 false case
|
||||
0:55 indirect index ( smooth temp float CullDistance)
|
||||
0:55 'gl_CullDistance' ( smooth in 6-element array of float CullDistance)
|
||||
0:55 'i' ( in int)
|
||||
0:61 Function Definition: testOffsets( ( global void)
|
||||
0:61 Function Parameters:
|
||||
0:63 Sequence
|
||||
0:63 Sequence
|
||||
0:63 move second child to first child ( temp 4-component vector of float)
|
||||
0:63 'texel' ( temp 4-component vector of float)
|
||||
0:63 Constant:
|
||||
0:63 0.000000
|
||||
0:63 0.000000
|
||||
0:63 0.000000
|
||||
0:63 0.000000
|
||||
0:64 Sequence
|
||||
0:64 move second child to first child ( temp 4-component vector of int)
|
||||
0:64 'itexel' ( temp 4-component vector of int)
|
||||
0:64 Constant:
|
||||
0:64 0 (const int)
|
||||
0:64 0 (const int)
|
||||
0:64 0 (const int)
|
||||
0:64 0 (const int)
|
||||
0:66 sparseTextureGatherOffsets ( global int)
|
||||
0:66 's2D' ( uniform sampler2D)
|
||||
0:66 'c2' ( smooth in 2-component vector of float)
|
||||
0:66 Constant:
|
||||
0:66 1 (const int)
|
||||
0:66 2 (const int)
|
||||
0:66 3 (const int)
|
||||
0:66 4 (const int)
|
||||
0:66 15 (const int)
|
||||
0:66 16 (const int)
|
||||
0:66 -2 (const int)
|
||||
0:66 0 (const int)
|
||||
0:66 'texel' ( temp 4-component vector of float)
|
||||
0:67 sparseTextureGatherOffsets ( global int)
|
||||
0:67 'is2DArray' ( uniform isampler2DArray)
|
||||
0:67 'c3' ( smooth in 3-component vector of float)
|
||||
0:67 Constant:
|
||||
0:67 1 (const int)
|
||||
0:67 2 (const int)
|
||||
0:67 3 (const int)
|
||||
0:67 4 (const int)
|
||||
0:67 15 (const int)
|
||||
0:67 16 (const int)
|
||||
0:67 -2 (const int)
|
||||
0:67 0 (const int)
|
||||
0:67 'itexel' ( temp 4-component vector of int)
|
||||
0:67 Constant:
|
||||
0:67 2 (const int)
|
||||
0:68 sparseTextureGatherOffsets ( global int)
|
||||
0:68 's2DRectShadow' ( uniform sampler2DRectShadow)
|
||||
0:68 'c2' ( smooth in 2-component vector of float)
|
||||
0:68 Constant:
|
||||
0:68 2.000000
|
||||
0:68 Constant:
|
||||
0:68 1 (const int)
|
||||
0:68 2 (const int)
|
||||
0:68 3 (const int)
|
||||
0:68 4 (const int)
|
||||
0:68 15 (const int)
|
||||
0:68 16 (const int)
|
||||
0:68 -2 (const int)
|
||||
0:68 0 (const int)
|
||||
0:68 'texel' ( temp 4-component vector of float)
|
||||
0:70 sparseTextureGatherOffsets ( global int)
|
||||
0:70 's2D' ( uniform sampler2D)
|
||||
0:70 'c2' ( smooth in 2-component vector of float)
|
||||
0:70 'offsets' ( flat in 4-element array of 2-component vector of int)
|
||||
0:70 'texel' ( temp 4-component vector of float)
|
||||
0:71 sparseTextureGatherOffsets ( global int)
|
||||
0:71 'is2DArray' ( uniform isampler2DArray)
|
||||
0:71 'c3' ( smooth in 3-component vector of float)
|
||||
0:71 'offsets' ( flat in 4-element array of 2-component vector of int)
|
||||
0:71 'itexel' ( temp 4-component vector of int)
|
||||
0:71 Constant:
|
||||
0:71 2 (const int)
|
||||
0:72 sparseTextureGatherOffsets ( global int)
|
||||
0:72 's2DRectShadow' ( uniform sampler2DRectShadow)
|
||||
0:72 'c2' ( smooth in 2-component vector of float)
|
||||
0:72 Constant:
|
||||
0:72 2.000000
|
||||
0:72 'offsets' ( flat in 4-element array of 2-component vector of int)
|
||||
0:72 'texel' ( temp 4-component vector of float)
|
||||
0:78 Function Definition: cull(i1; ( global float)
|
||||
0:78 Function Parameters:
|
||||
0:78 'i' ( in int)
|
||||
0:80 Sequence
|
||||
0:80 Branch: Return with expression
|
||||
0:80 Test condition and select ( temp float)
|
||||
0:80 Condition
|
||||
0:80 Compare Greater Than or Equal ( temp bool)
|
||||
0:80 'i' ( in int)
|
||||
0:80 Constant:
|
||||
0:80 6 (const int)
|
||||
0:80 true case
|
||||
0:80 direct index ( smooth temp float CullDistance)
|
||||
0:80 'gl_CullDistance' ( smooth in 6-element array of float CullDistance)
|
||||
0:80 Constant:
|
||||
0:80 5 (const int)
|
||||
0:80 false case
|
||||
0:80 indirect index ( smooth temp float CullDistance)
|
||||
0:80 'gl_CullDistance' ( smooth in 6-element array of float CullDistance)
|
||||
0:80 'i' ( in int)
|
||||
0:? Linker Objects
|
||||
0:? 'in1' ( smooth in float)
|
||||
0:? 'in2' ( smooth in 2-component vector of float)
|
||||
@ -163,6 +248,12 @@ ERROR: node is still EOpNull!
|
||||
0:? 'us2dmsa' ( uniform usampler2DMSArray)
|
||||
0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS)
|
||||
0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray)
|
||||
0:? 's2D' ( uniform sampler2D)
|
||||
0:? 'is2DArray' ( uniform isampler2DArray)
|
||||
0:? 's2DRectShadow' ( uniform sampler2DRectShadow)
|
||||
0:? 'offsets' ( flat in 4-element array of 2-component vector of int)
|
||||
0:? 'c2' ( smooth in 2-component vector of float)
|
||||
0:? 'c3' ( smooth in 3-component vector of float)
|
||||
0:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m})
|
||||
0:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g})
|
||||
0:? 'f' ( smooth in float)
|
||||
@ -172,6 +263,7 @@ Linked fragment stage:
|
||||
|
||||
|
||||
Shader version: 450
|
||||
Requested GL_ARB_sparse_texture2
|
||||
ERROR: node is still EOpNull!
|
||||
0:8 Function Definition: main( ( global void)
|
||||
0:8 Function Parameters:
|
||||
@ -279,6 +371,12 @@ ERROR: node is still EOpNull!
|
||||
0:? 'us2dmsa' ( uniform usampler2DMSArray)
|
||||
0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS)
|
||||
0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray)
|
||||
0:? 's2D' ( uniform sampler2D)
|
||||
0:? 'is2DArray' ( uniform isampler2DArray)
|
||||
0:? 's2DRectShadow' ( uniform sampler2DRectShadow)
|
||||
0:? 'offsets' ( flat in 4-element array of 2-component vector of int)
|
||||
0:? 'c2' ( smooth in 2-component vector of float)
|
||||
0:? 'c3' ( smooth in 3-component vector of float)
|
||||
0:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m})
|
||||
0:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g})
|
||||
0:? 'f' ( smooth in float)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2,7 +2,7 @@ spv.sparseTexture.frag
|
||||
Validation failed
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 8000a
|
||||
// Id's are bound by 438
|
||||
// Id's are bound by 442
|
||||
|
||||
Capability Shader
|
||||
Capability ImageGatherExtended
|
||||
@ -12,7 +12,7 @@ Validation failed
|
||||
Capability SampledCubeArray
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 33 48 89 365 393 405 423
|
||||
EntryPoint Fragment 4 "main" 33 48 89 397 409 427
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source GLSL 450
|
||||
SourceExtension "GL_ARB_sparse_texture2"
|
||||
@ -40,13 +40,12 @@ Validation failed
|
||||
Name 228 "is2DArray"
|
||||
Name 261 "sCubeShadow"
|
||||
Name 294 "s2DRectShadow"
|
||||
Name 365 "offsets"
|
||||
Name 390 "i2D"
|
||||
Name 393 "ic2"
|
||||
Name 402 "ii3D"
|
||||
Name 405 "ic3"
|
||||
Name 414 "i2DMS"
|
||||
Name 423 "outColor"
|
||||
Name 394 "i2D"
|
||||
Name 397 "ic2"
|
||||
Name 406 "ii3D"
|
||||
Name 409 "ic3"
|
||||
Name 418 "i2DMS"
|
||||
Name 427 "outColor"
|
||||
Decorate 29(s2D) DescriptorSet 0
|
||||
Decorate 29(s2D) Binding 0
|
||||
Decorate 33(c2) Location 0
|
||||
@ -74,19 +73,17 @@ Validation failed
|
||||
Decorate 261(sCubeShadow) Binding 3
|
||||
Decorate 294(s2DRectShadow) DescriptorSet 0
|
||||
Decorate 294(s2DRectShadow) Binding 5
|
||||
Decorate 365(offsets) Flat
|
||||
Decorate 365(offsets) Location 5
|
||||
Decorate 390(i2D) DescriptorSet 0
|
||||
Decorate 390(i2D) Binding 12
|
||||
Decorate 393(ic2) Flat
|
||||
Decorate 393(ic2) Location 3
|
||||
Decorate 402(ii3D) DescriptorSet 0
|
||||
Decorate 402(ii3D) Binding 13
|
||||
Decorate 405(ic3) Flat
|
||||
Decorate 405(ic3) Location 4
|
||||
Decorate 414(i2DMS) DescriptorSet 0
|
||||
Decorate 414(i2DMS) Binding 14
|
||||
Decorate 423(outColor) Location 0
|
||||
Decorate 394(i2D) DescriptorSet 0
|
||||
Decorate 394(i2D) Binding 12
|
||||
Decorate 397(ic2) Flat
|
||||
Decorate 397(ic2) Location 3
|
||||
Decorate 406(ii3D) DescriptorSet 0
|
||||
Decorate 406(ii3D) Binding 13
|
||||
Decorate 409(ic3) Flat
|
||||
Decorate 409(ic3) Location 4
|
||||
Decorate 418(i2DMS) DescriptorSet 0
|
||||
Decorate 418(i2DMS) Binding 14
|
||||
Decorate 427(outColor) Location 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 1
|
||||
@ -189,31 +186,38 @@ Validation failed
|
||||
340: 143(ivec2) ConstantComposite 192 192
|
||||
362: 20(int) Constant 4
|
||||
363: TypeArray 143(ivec2) 362
|
||||
364: TypePointer Input 363
|
||||
365(offsets): 364(ptr) Variable Input
|
||||
388: TypeImage 10(float) 2D nonsampled format:Rgba32f
|
||||
389: TypePointer UniformConstant 388
|
||||
390(i2D): 389(ptr) Variable UniformConstant
|
||||
392: TypePointer Input 143(ivec2)
|
||||
393(ic2): 392(ptr) Variable Input
|
||||
400: TypeImage 6(int) 3D nonsampled format:Rgba32i
|
||||
401: TypePointer UniformConstant 400
|
||||
402(ii3D): 401(ptr) Variable UniformConstant
|
||||
404: TypePointer Input 129(ivec3)
|
||||
405(ic3): 404(ptr) Variable Input
|
||||
412: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f
|
||||
413: TypePointer UniformConstant 412
|
||||
414(i2DMS): 413(ptr) Variable UniformConstant
|
||||
422: TypePointer Output 11(fvec4)
|
||||
423(outColor): 422(ptr) Variable Output
|
||||
425: TypeBool
|
||||
364: 6(int) Constant 1
|
||||
365: 143(ivec2) ConstantComposite 364 130
|
||||
366: 143(ivec2) ConstantComposite 144 192
|
||||
367: 6(int) Constant 15
|
||||
368: 6(int) Constant 16
|
||||
369: 143(ivec2) ConstantComposite 367 368
|
||||
370: 6(int) Constant 4294967294
|
||||
371: 143(ivec2) ConstantComposite 370 9
|
||||
372: 363 ConstantComposite 365 366 369 371
|
||||
392: TypeImage 10(float) 2D nonsampled format:Rgba32f
|
||||
393: TypePointer UniformConstant 392
|
||||
394(i2D): 393(ptr) Variable UniformConstant
|
||||
396: TypePointer Input 143(ivec2)
|
||||
397(ic2): 396(ptr) Variable Input
|
||||
404: TypeImage 6(int) 3D nonsampled format:Rgba32i
|
||||
405: TypePointer UniformConstant 404
|
||||
406(ii3D): 405(ptr) Variable UniformConstant
|
||||
408: TypePointer Input 129(ivec3)
|
||||
409(ic3): 408(ptr) Variable Input
|
||||
416: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f
|
||||
417: TypePointer UniformConstant 416
|
||||
418(i2DMS): 417(ptr) Variable UniformConstant
|
||||
426: TypePointer Output 11(fvec4)
|
||||
427(outColor): 426(ptr) Variable Output
|
||||
429: TypeBool
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(resident): 7(ptr) Variable Function
|
||||
13(texel): 12(ptr) Variable Function
|
||||
18(itexel): 17(ptr) Variable Function
|
||||
23(utexel): 22(ptr) Variable Function
|
||||
427: 12(ptr) Variable Function
|
||||
431: 12(ptr) Variable Function
|
||||
Store 8(resident) 9
|
||||
Store 13(texel) 15
|
||||
Store 18(itexel) 19
|
||||
@ -534,79 +538,76 @@ Validation failed
|
||||
Store 8(resident) 359
|
||||
360: 27 Load 29(s2D)
|
||||
361: 31(fvec2) Load 33(c2)
|
||||
366: 363 Load 365(offsets)
|
||||
367: 35(ResType) ImageSparseGather 360 361 9 ConstOffsets 366
|
||||
368: 11(fvec4) CompositeExtract 367 1
|
||||
Store 13(texel) 368
|
||||
369: 6(int) CompositeExtract 367 0
|
||||
370: 6(int) Load 8(resident)
|
||||
371: 6(int) BitwiseOr 370 369
|
||||
Store 8(resident) 371
|
||||
372: 226 Load 228(is2DArray)
|
||||
373: 46(fvec3) Load 48(c3)
|
||||
374: 363 Load 365(offsets)
|
||||
375: 62(ResType) ImageSparseGather 372 373 130 ConstOffsets 374
|
||||
376: 16(ivec4) CompositeExtract 375 1
|
||||
Store 18(itexel) 376
|
||||
377: 6(int) CompositeExtract 375 0
|
||||
378: 6(int) Load 8(resident)
|
||||
379: 6(int) BitwiseOr 378 377
|
||||
Store 8(resident) 379
|
||||
380: 292 Load 294(s2DRectShadow)
|
||||
381: 31(fvec2) Load 33(c2)
|
||||
382: 363 Load 365(offsets)
|
||||
383: 35(ResType) ImageSparseDrefGather 380 381 50 ConstOffsets 382
|
||||
384: 11(fvec4) CompositeExtract 383 1
|
||||
Store 13(texel) 384
|
||||
385: 6(int) CompositeExtract 383 0
|
||||
386: 6(int) Load 8(resident)
|
||||
387: 6(int) BitwiseOr 386 385
|
||||
Store 8(resident) 387
|
||||
391: 388 Load 390(i2D)
|
||||
394: 143(ivec2) Load 393(ic2)
|
||||
395: 35(ResType) ImageSparseRead 391 394
|
||||
396: 11(fvec4) CompositeExtract 395 1
|
||||
Store 13(texel) 396
|
||||
397: 6(int) CompositeExtract 395 0
|
||||
398: 6(int) Load 8(resident)
|
||||
399: 6(int) BitwiseOr 398 397
|
||||
Store 8(resident) 399
|
||||
403: 400 Load 402(ii3D)
|
||||
406: 129(ivec3) Load 405(ic3)
|
||||
407: 62(ResType) ImageSparseRead 403 406
|
||||
408: 16(ivec4) CompositeExtract 407 1
|
||||
Store 18(itexel) 408
|
||||
409: 6(int) CompositeExtract 407 0
|
||||
410: 6(int) Load 8(resident)
|
||||
411: 6(int) BitwiseOr 410 409
|
||||
Store 8(resident) 411
|
||||
415: 412 Load 414(i2DMS)
|
||||
416: 143(ivec2) Load 393(ic2)
|
||||
417: 35(ResType) ImageSparseRead 415 416 Sample 144
|
||||
418: 11(fvec4) CompositeExtract 417 1
|
||||
Store 13(texel) 418
|
||||
419: 6(int) CompositeExtract 417 0
|
||||
420: 6(int) Load 8(resident)
|
||||
421: 6(int) BitwiseOr 420 419
|
||||
Store 8(resident) 421
|
||||
373: 35(ResType) ImageSparseGather 360 361 9 ConstOffsets 372
|
||||
374: 11(fvec4) CompositeExtract 373 1
|
||||
Store 13(texel) 374
|
||||
375: 6(int) CompositeExtract 373 0
|
||||
376: 6(int) Load 8(resident)
|
||||
377: 6(int) BitwiseOr 376 375
|
||||
Store 8(resident) 377
|
||||
378: 226 Load 228(is2DArray)
|
||||
379: 46(fvec3) Load 48(c3)
|
||||
380: 62(ResType) ImageSparseGather 378 379 130 ConstOffsets 372
|
||||
381: 16(ivec4) CompositeExtract 380 1
|
||||
Store 18(itexel) 381
|
||||
382: 6(int) CompositeExtract 380 0
|
||||
383: 6(int) Load 8(resident)
|
||||
384: 6(int) BitwiseOr 383 382
|
||||
Store 8(resident) 384
|
||||
385: 292 Load 294(s2DRectShadow)
|
||||
386: 31(fvec2) Load 33(c2)
|
||||
387: 35(ResType) ImageSparseDrefGather 385 386 50 ConstOffsets 372
|
||||
388: 11(fvec4) CompositeExtract 387 1
|
||||
Store 13(texel) 388
|
||||
389: 6(int) CompositeExtract 387 0
|
||||
390: 6(int) Load 8(resident)
|
||||
391: 6(int) BitwiseOr 390 389
|
||||
Store 8(resident) 391
|
||||
395: 392 Load 394(i2D)
|
||||
398: 143(ivec2) Load 397(ic2)
|
||||
399: 35(ResType) ImageSparseRead 395 398
|
||||
400: 11(fvec4) CompositeExtract 399 1
|
||||
Store 13(texel) 400
|
||||
401: 6(int) CompositeExtract 399 0
|
||||
402: 6(int) Load 8(resident)
|
||||
403: 6(int) BitwiseOr 402 401
|
||||
Store 8(resident) 403
|
||||
407: 404 Load 406(ii3D)
|
||||
410: 129(ivec3) Load 409(ic3)
|
||||
411: 62(ResType) ImageSparseRead 407 410
|
||||
412: 16(ivec4) CompositeExtract 411 1
|
||||
Store 18(itexel) 412
|
||||
413: 6(int) CompositeExtract 411 0
|
||||
414: 6(int) Load 8(resident)
|
||||
415: 6(int) BitwiseOr 414 413
|
||||
Store 8(resident) 415
|
||||
419: 416 Load 418(i2DMS)
|
||||
420: 143(ivec2) Load 397(ic2)
|
||||
421: 35(ResType) ImageSparseRead 419 420 Sample 144
|
||||
422: 11(fvec4) CompositeExtract 421 1
|
||||
Store 13(texel) 422
|
||||
423: 6(int) CompositeExtract 421 0
|
||||
424: 6(int) Load 8(resident)
|
||||
426: 425(bool) ImageSparseTexelsResident 424
|
||||
SelectionMerge 429 None
|
||||
BranchConditional 426 428 431
|
||||
428: Label
|
||||
430: 11(fvec4) Load 13(texel)
|
||||
Store 427 430
|
||||
Branch 429
|
||||
431: Label
|
||||
432: 16(ivec4) Load 18(itexel)
|
||||
433: 11(fvec4) ConvertSToF 432
|
||||
434: 21(ivec4) Load 23(utexel)
|
||||
435: 11(fvec4) ConvertUToF 434
|
||||
436: 11(fvec4) FAdd 433 435
|
||||
Store 427 436
|
||||
Branch 429
|
||||
429: Label
|
||||
437: 11(fvec4) Load 427
|
||||
Store 423(outColor) 437
|
||||
425: 6(int) BitwiseOr 424 423
|
||||
Store 8(resident) 425
|
||||
428: 6(int) Load 8(resident)
|
||||
430: 429(bool) ImageSparseTexelsResident 428
|
||||
SelectionMerge 433 None
|
||||
BranchConditional 430 432 435
|
||||
432: Label
|
||||
434: 11(fvec4) Load 13(texel)
|
||||
Store 431 434
|
||||
Branch 433
|
||||
435: Label
|
||||
436: 16(ivec4) Load 18(itexel)
|
||||
437: 11(fvec4) ConvertSToF 436
|
||||
438: 21(ivec4) Load 23(utexel)
|
||||
439: 11(fvec4) ConvertUToF 438
|
||||
440: 11(fvec4) FAdd 437 439
|
||||
Store 431 440
|
||||
Branch 433
|
||||
433: Label
|
||||
441: 11(fvec4) Load 431
|
||||
Store 427(outColor) 441
|
||||
Return
|
||||
FunctionEnd
|
||||
|
@ -889,19 +889,20 @@ f16vec4 testSparseTextureGatherOffset()
|
||||
f16vec4 testSparseTextureGatherOffsets()
|
||||
{
|
||||
f16vec4 texel = f16vec4(0.0hf);
|
||||
const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
|
||||
|
||||
sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel, 0);
|
||||
sparseTextureGatherOffsetsARB(s2D, f16c2, offsets, texel, 0, f16bias);
|
||||
sparseTextureGatherOffsetsARB(s2DArray, c3, offsets, texel, 0);
|
||||
sparseTextureGatherOffsetsARB(s2DArray, f16c3, offsets, texel, 0, f16bias);
|
||||
sparseTextureGatherOffsetsARB(s2DRect, c2, offsets, texel, 0);
|
||||
sparseTextureGatherOffsetsARB(s2DRect, f16c2, offsets, texel, 0);
|
||||
sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, offsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DShadow, f16c2, compare, offsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, offsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DArrayShadow, f16c3, compare, offsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, offsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DRectShadow, f16c2, compare, offsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel, 0);
|
||||
sparseTextureGatherOffsetsARB(s2D, f16c2, constOffsets, texel, 0, f16bias);
|
||||
sparseTextureGatherOffsetsARB(s2DArray, c3, constOffsets, texel, 0);
|
||||
sparseTextureGatherOffsetsARB(s2DArray, f16c3, constOffsets, texel, 0, f16bias);
|
||||
sparseTextureGatherOffsetsARB(s2DRect, c2, constOffsets, texel, 0);
|
||||
sparseTextureGatherOffsetsARB(s2DRect, f16c2, constOffsets, texel, 0);
|
||||
sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, constOffsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DShadow, f16c2, compare, constOffsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, constOffsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DArrayShadow, f16c3, compare, constOffsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, constOffsets, texel);
|
||||
sparseTextureGatherOffsetsARB(s2DRectShadow, f16c2, compare, constOffsets, texel);
|
||||
|
||||
return texel;
|
||||
}
|
||||
|
@ -27,8 +27,6 @@ in vec4 c4;
|
||||
in flat ivec2 ic2;
|
||||
in flat ivec3 ic3;
|
||||
|
||||
in flat ivec2 offsets[4];
|
||||
|
||||
out vec4 outColor;
|
||||
|
||||
void main()
|
||||
@ -79,9 +77,10 @@ void main()
|
||||
resident |= sparseTextureGatherOffsetARB(is2DArray, c3, ivec2(5), itexel, 2);
|
||||
resident |= sparseTextureGatherOffsetARB(s2DRectShadow, c2, 2.0, ivec2(7), texel);
|
||||
|
||||
resident |= sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel);
|
||||
resident |= sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2);
|
||||
resident |= sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel);
|
||||
const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
|
||||
resident |= sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel);
|
||||
resident |= sparseTextureGatherOffsetsARB(is2DArray, c3, constOffsets, itexel, 2);
|
||||
resident |= sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, constOffsets, texel);
|
||||
|
||||
resident |= sparseImageLoadARB(i2D, ic2, texel);
|
||||
resident |= sparseImageLoadARB(ii3D, ic3, itexel);
|
||||
|
@ -2096,7 +2096,13 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
|
||||
profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
|
||||
requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
|
||||
}
|
||||
|
||||
// As per GL_ARB_sparse_texture2 extension "Offsets" parameter must be constant integral expression
|
||||
// for sparseTextureGatherOffsetsARB just as textureGatherOffsets
|
||||
if (callNode.getOp() == EOpSparseTextureGatherOffsets) {
|
||||
int offsetsArg = arg0->getType().getSampler().shadow ? 3 : 2;
|
||||
if (!(*argp)[offsetsArg]->getAsConstantUnion())
|
||||
error(loc, "argument must be compile-time constant", "offsets", "");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user