mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
SPV: Support texelFetch() on a textureBuffer (no sampler).
Fixes Vulkan Khronos-internal issue 770.
This commit is contained in:
parent
a5c5fb6118
commit
c10191d132
@ -13,7 +13,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
|
|||||||
Source GLSL 400
|
Source GLSL 400
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 9 "arraySize"
|
Name 9 "arraySize"
|
||||||
Name 14 "foo(vf4[s1518];"
|
Name 14 "foo(vf4[s1521];"
|
||||||
Name 13 "p"
|
Name 13 "p"
|
||||||
Name 17 "builtin_spec_constant("
|
Name 17 "builtin_spec_constant("
|
||||||
Name 20 "color"
|
Name 20 "color"
|
||||||
@ -104,10 +104,10 @@ Warning, version 400 is not yet complete; most version-specific features are pre
|
|||||||
Store 20(color) 46
|
Store 20(color) 46
|
||||||
48: 10 Load 22(ucol)
|
48: 10 Load 22(ucol)
|
||||||
Store 47(param) 48
|
Store 47(param) 48
|
||||||
49: 2 FunctionCall 14(foo(vf4[s1518];) 47(param)
|
49: 2 FunctionCall 14(foo(vf4[s1521];) 47(param)
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
14(foo(vf4[s1518];): 2 Function None 12
|
14(foo(vf4[s1521];): 2 Function None 12
|
||||||
13(p): 11(ptr) FunctionParameter
|
13(p): 11(ptr) FunctionParameter
|
||||||
15: Label
|
15: Label
|
||||||
54: 24(ptr) AccessChain 53(dupUcol) 23
|
54: 24(ptr) AccessChain 53(dupUcol) 23
|
||||||
|
66
Test/baseResults/spv.textureBuffer.vert.out
Executable file
66
Test/baseResults/spv.textureBuffer.vert.out
Executable file
@ -0,0 +1,66 @@
|
|||||||
|
spv.textureBuffer.vert
|
||||||
|
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
|
||||||
|
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 80001
|
||||||
|
// Id's are bound by 42
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
Capability SampledBuffer
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint Vertex 4 "main"
|
||||||
|
Source GLSL 450
|
||||||
|
Name 4 "main"
|
||||||
|
Name 9 "tBuf"
|
||||||
|
Name 13 "s"
|
||||||
|
Name 23 "sBuf"
|
||||||
|
Name 32 "utBuf"
|
||||||
|
Name 38 "itBuf"
|
||||||
|
Decorate 9(tBuf) DescriptorSet 0
|
||||||
|
Decorate 13(s) DescriptorSet 0
|
||||||
|
Decorate 23(sBuf) DescriptorSet 0
|
||||||
|
Decorate 32(utBuf) DescriptorSet 0
|
||||||
|
Decorate 38(itBuf) DescriptorSet 0
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeFloat 32
|
||||||
|
7: TypeImage 6(float) Buffer sampled format:Unknown
|
||||||
|
8: TypePointer UniformConstant 7
|
||||||
|
9(tBuf): 8(ptr) Variable UniformConstant
|
||||||
|
11: TypeSampler
|
||||||
|
12: TypePointer UniformConstant 11
|
||||||
|
13(s): 12(ptr) Variable UniformConstant
|
||||||
|
15: TypeSampledImage 7
|
||||||
|
17: TypeInt 32 1
|
||||||
|
18: 17(int) Constant 13
|
||||||
|
20: TypeVector 6(float) 4
|
||||||
|
22: TypePointer UniformConstant 15
|
||||||
|
23(sBuf): 22(ptr) Variable UniformConstant
|
||||||
|
29: TypeInt 32 0
|
||||||
|
30: TypeImage 29(int) Buffer sampled format:Unknown
|
||||||
|
31: TypePointer UniformConstant 30
|
||||||
|
32(utBuf): 31(ptr) Variable UniformConstant
|
||||||
|
34: TypeVector 29(int) 4
|
||||||
|
36: TypeImage 17(int) Buffer sampled format:Unknown
|
||||||
|
37: TypePointer UniformConstant 36
|
||||||
|
38(itBuf): 37(ptr) Variable UniformConstant
|
||||||
|
40: TypeVector 17(int) 4
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
10: 7 Load 9(tBuf)
|
||||||
|
14: 11 Load 13(s)
|
||||||
|
16: 15 SampledImage 10 14
|
||||||
|
19: 7 Image 16
|
||||||
|
21: 20(fvec4) ImageFetch 19 18
|
||||||
|
24: 15 Load 23(sBuf)
|
||||||
|
25: 7 Image 24
|
||||||
|
26: 20(fvec4) ImageFetch 25 18
|
||||||
|
27: 7 Load 9(tBuf)
|
||||||
|
28: 20(fvec4) ImageFetch 27 18
|
||||||
|
33: 30 Load 32(utBuf)
|
||||||
|
35: 34(ivec4) ImageFetch 33 18
|
||||||
|
39: 36 Load 38(itBuf)
|
||||||
|
41: 40(ivec4) ImageFetch 39 18
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
17
Test/spv.textureBuffer.vert
Normal file
17
Test/spv.textureBuffer.vert
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#version 450
|
||||||
|
|
||||||
|
uniform textureBuffer tBuf;
|
||||||
|
uniform sampler s;
|
||||||
|
uniform samplerBuffer sBuf;
|
||||||
|
|
||||||
|
uniform utextureBuffer utBuf;
|
||||||
|
uniform itextureBuffer itBuf;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
texelFetch(samplerBuffer(tBuf, s), 13);
|
||||||
|
texelFetch(sBuf, 13);
|
||||||
|
texelFetch(tBuf, 13);
|
||||||
|
texelFetch(utBuf, 13);
|
||||||
|
texelFetch(itBuf, 13);
|
||||||
|
}
|
@ -3844,6 +3844,15 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
|
|||||||
else {
|
else {
|
||||||
addSamplingFunctions(sampler, typeName, version, profile);
|
addSamplingFunctions(sampler, typeName, version, profile);
|
||||||
addGatherFunctions(sampler, typeName, version, profile);
|
addGatherFunctions(sampler, typeName, version, profile);
|
||||||
|
if (spvVersion.vulkan > 0 && sampler.dim == EsdBuffer && sampler.isCombined()) {
|
||||||
|
// Vulkan wants a textureBuffer to allow texelFetch() --
|
||||||
|
// a sampled image with no sampler.
|
||||||
|
// So, add sampling functions for both the
|
||||||
|
// samplerBuffer and textureBuffer types.
|
||||||
|
sampler.setTexture(sampler.type, sampler.dim, sampler.arrayed, sampler.shadow,
|
||||||
|
sampler.ms);
|
||||||
|
addSamplingFunctions(sampler, sampler.getString(), version, profile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -283,6 +283,7 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
"spv.test.vert",
|
"spv.test.vert",
|
||||||
"spv.texture.frag",
|
"spv.texture.frag",
|
||||||
"spv.texture.vert",
|
"spv.texture.vert",
|
||||||
|
"spv.textureBuffer.vert",
|
||||||
"spv.image.frag",
|
"spv.image.frag",
|
||||||
"spv.types.frag",
|
"spv.types.frag",
|
||||||
"spv.uint.frag",
|
"spv.uint.frag",
|
||||||
|
Loading…
Reference in New Issue
Block a user