Commit 1dd65ca3 by John Kessenich Committed by GitHub

Merge pull request #779 from steve-lunarg/buffer-unsampled-fix

HLSL: Buffer types should be unsampled.
parents 4960baaf d3947d23
...@@ -94,7 +94,7 @@ gl_FragCoord origin is upper left ...@@ -94,7 +94,7 @@ gl_FragCoord origin is upper left
0:20 Constant: 0:20 Constant:
0:20 0 (const int) 0:20 0 (const int)
0:? Linker Objects 0:? Linker Objects
0:? 'g_tTexbfs' (layout( r32f) uniform samplerBuffer) 0:? 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
0:? 'g_tTex1df4' ( uniform texture1D) 0:? 'g_tTex1df4' ( uniform texture1D)
0:? 'color' (layout( location=0) out 4-component vector of float) 0:? 'color' (layout( location=0) out 4-component vector of float)
0:? 'anon@0' (layout( row_major std140) uniform block{layout( offset=0) uniform int i, layout( offset=4) uniform uint u, layout( offset=8) uniform float f, layout( offset=12) uniform bool b, layout( offset=16) uniform 2-component vector of int i2, layout( offset=24) uniform 2-component vector of uint u2, layout( offset=32) uniform 2-component vector of float f2, layout( offset=40) uniform 2-component vector of bool b2, layout( offset=48) uniform uint upos, layout( offset=52) uniform float fpos}) 0:? 'anon@0' (layout( row_major std140) uniform block{layout( offset=0) uniform int i, layout( offset=4) uniform uint u, layout( offset=8) uniform float f, layout( offset=12) uniform bool b, layout( offset=16) uniform 2-component vector of int i2, layout( offset=24) uniform 2-component vector of uint u2, layout( offset=32) uniform 2-component vector of float f2, layout( offset=40) uniform 2-component vector of bool b2, layout( offset=48) uniform uint upos, layout( offset=52) uniform float fpos})
...@@ -198,14 +198,14 @@ gl_FragCoord origin is upper left ...@@ -198,14 +198,14 @@ gl_FragCoord origin is upper left
0:20 Constant: 0:20 Constant:
0:20 0 (const int) 0:20 0 (const int)
0:? Linker Objects 0:? Linker Objects
0:? 'g_tTexbfs' (layout( r32f) uniform samplerBuffer) 0:? 'g_tTexbfs' (layout( r32f) readonly uniform imageBuffer)
0:? 'g_tTex1df4' ( uniform texture1D) 0:? 'g_tTex1df4' ( uniform texture1D)
0:? 'color' (layout( location=0) out 4-component vector of float) 0:? 'color' (layout( location=0) out 4-component vector of float)
0:? 'anon@0' (layout( row_major std140) uniform block{layout( offset=0) uniform int i, layout( offset=4) uniform uint u, layout( offset=8) uniform float f, layout( offset=12) uniform bool b, layout( offset=16) uniform 2-component vector of int i2, layout( offset=24) uniform 2-component vector of uint u2, layout( offset=32) uniform 2-component vector of float f2, layout( offset=40) uniform 2-component vector of bool b2, layout( offset=48) uniform uint upos, layout( offset=52) uniform float fpos}) 0:? 'anon@0' (layout( row_major std140) uniform block{layout( offset=0) uniform int i, layout( offset=4) uniform uint u, layout( offset=8) uniform float f, layout( offset=12) uniform bool b, layout( offset=16) uniform 2-component vector of int i2, layout( offset=24) uniform 2-component vector of uint u2, layout( offset=32) uniform 2-component vector of float f2, layout( offset=40) uniform 2-component vector of bool b2, layout( offset=48) uniform uint upos, layout( offset=52) uniform float fpos})
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 81 // Id's are bound by 80
Capability Shader Capability Shader
Capability Sampled1D Capability Sampled1D
...@@ -242,7 +242,7 @@ gl_FragCoord origin is upper left ...@@ -242,7 +242,7 @@ gl_FragCoord origin is upper left
Name 57 "sizeQueryTemp" Name 57 "sizeQueryTemp"
Name 66 "ps_output" Name 66 "ps_output"
Name 74 "color" Name 74 "color"
Name 80 "g_tTexbfs" Name 79 "g_tTexbfs"
MemberDecorate 17($Global) 0 Offset 0 MemberDecorate 17($Global) 0 Offset 0
MemberDecorate 17($Global) 1 Offset 4 MemberDecorate 17($Global) 1 Offset 4
MemberDecorate 17($Global) 2 Offset 8 MemberDecorate 17($Global) 2 Offset 8
...@@ -257,7 +257,8 @@ gl_FragCoord origin is upper left ...@@ -257,7 +257,8 @@ gl_FragCoord origin is upper left
Decorate 19 DescriptorSet 0 Decorate 19 DescriptorSet 0
Decorate 31(g_tTex1df4) DescriptorSet 0 Decorate 31(g_tTex1df4) DescriptorSet 0
Decorate 74(color) Location 0 Decorate 74(color) Location 0
Decorate 80(g_tTexbfs) DescriptorSet 0 Decorate 79(g_tTexbfs) DescriptorSet 0
Decorate 79(g_tTexbfs) NonWritable
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
...@@ -288,10 +289,9 @@ gl_FragCoord origin is upper left ...@@ -288,10 +289,9 @@ gl_FragCoord origin is upper left
68: TypePointer Function 7(fvec4) 68: TypePointer Function 7(fvec4)
73: TypePointer Output 7(fvec4) 73: TypePointer Output 7(fvec4)
74(color): 73(ptr) Variable Output 74(color): 73(ptr) Variable Output
77: TypeImage 6(float) Buffer sampled format:R32f 77: TypeImage 6(float) Buffer nonsampled format:R32f
78: TypeSampledImage 77 78: TypePointer UniformConstant 77
79: TypePointer UniformConstant 78 79(g_tTexbfs): 78(ptr) Variable UniformConstant
80(g_tTexbfs): 79(ptr) Variable UniformConstant
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
75:8(PS_OUTPUT) FunctionCall 10(@main() 75:8(PS_OUTPUT) FunctionCall 10(@main()
......
...@@ -6,8 +6,8 @@ Shader version: 450 ...@@ -6,8 +6,8 @@ Shader version: 450
0:4 'Index' ( in uint) 0:4 'Index' ( in uint)
0:? Sequence 0:? Sequence
0:5 Branch: Return with expression 0:5 Branch: Return with expression
0:5 textureFetch ( temp 4-component vector of float) 0:5 imageLoad ( temp 4-component vector of float)
0:5 'Position' (layout( rgba32f) uniform samplerBuffer) 0:5 'Position' (layout( rgba32f) readonly uniform imageBuffer)
0:5 Convert uint to int ( temp int) 0:5 Convert uint to int ( temp int)
0:5 'Index' ( in uint) 0:5 'Index' ( in uint)
0:9 Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float) 0:9 Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float)
...@@ -28,7 +28,7 @@ Shader version: 450 ...@@ -28,7 +28,7 @@ Shader version: 450
0:9 Function Call: @RealEntrypoint(u1; ( temp 4-component vector of float) 0:9 Function Call: @RealEntrypoint(u1; ( temp 4-component vector of float)
0:? 'Index' ( temp uint) 0:? 'Index' ( temp uint)
0:? Linker Objects 0:? Linker Objects
0:? 'Position' (layout( rgba32f) uniform samplerBuffer) 0:? 'Position' (layout( rgba32f) readonly uniform imageBuffer)
0:? '@entryPointOutput' ( out 4-component vector of float Position) 0:? '@entryPointOutput' ( out 4-component vector of float Position)
0:? 'Index' ( in uint VertexIndex) 0:? 'Index' ( in uint VertexIndex)
...@@ -43,8 +43,8 @@ Shader version: 450 ...@@ -43,8 +43,8 @@ Shader version: 450
0:4 'Index' ( in uint) 0:4 'Index' ( in uint)
0:? Sequence 0:? Sequence
0:5 Branch: Return with expression 0:5 Branch: Return with expression
0:5 textureFetch ( temp 4-component vector of float) 0:5 imageLoad ( temp 4-component vector of float)
0:5 'Position' (layout( rgba32f) uniform samplerBuffer) 0:5 'Position' (layout( rgba32f) readonly uniform imageBuffer)
0:5 Convert uint to int ( temp int) 0:5 Convert uint to int ( temp int)
0:5 'Index' ( in uint) 0:5 'Index' ( in uint)
0:9 Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float) 0:9 Function Definition: @RealEntrypoint(u1; ( temp 4-component vector of float)
...@@ -65,33 +65,34 @@ Shader version: 450 ...@@ -65,33 +65,34 @@ Shader version: 450
0:9 Function Call: @RealEntrypoint(u1; ( temp 4-component vector of float) 0:9 Function Call: @RealEntrypoint(u1; ( temp 4-component vector of float)
0:? 'Index' ( temp uint) 0:? 'Index' ( temp uint)
0:? Linker Objects 0:? Linker Objects
0:? 'Position' (layout( rgba32f) uniform samplerBuffer) 0:? 'Position' (layout( rgba32f) readonly uniform imageBuffer)
0:? '@entryPointOutput' ( out 4-component vector of float Position) 0:? '@entryPointOutput' ( out 4-component vector of float Position)
0:? 'Index' ( in uint VertexIndex) 0:? 'Index' ( in uint VertexIndex)
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 43 // Id's are bound by 41
Capability Shader Capability Shader
Capability SampledBuffer Capability SampledBuffer
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "RealEntrypoint" 36 39 EntryPoint Vertex 4 "RealEntrypoint" 34 37
Name 4 "RealEntrypoint" Name 4 "RealEntrypoint"
Name 12 "FakeEntrypoint(u1;" Name 12 "FakeEntrypoint(u1;"
Name 11 "Index" Name 11 "Index"
Name 15 "@RealEntrypoint(u1;" Name 15 "@RealEntrypoint(u1;"
Name 14 "Index" Name 14 "Index"
Name 20 "Position" Name 19 "Position"
Name 29 "param" Name 27 "param"
Name 32 "Index"
Name 34 "Index" Name 34 "Index"
Name 36 "Index" Name 37 "@entryPointOutput"
Name 39 "@entryPointOutput" Name 38 "param"
Name 40 "param" Decorate 19(Position) DescriptorSet 0
Decorate 20(Position) DescriptorSet 0 Decorate 19(Position) NonWritable
Decorate 36(Index) BuiltIn VertexIndex Decorate 34(Index) BuiltIn VertexIndex
Decorate 39(@entryPointOutput) BuiltIn Position Decorate 37(@entryPointOutput) BuiltIn Position
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0
...@@ -99,43 +100,41 @@ Shader version: 450 ...@@ -99,43 +100,41 @@ Shader version: 450
8: TypeFloat 32 8: TypeFloat 32
9: TypeVector 8(float) 4 9: TypeVector 8(float) 4
10: TypeFunction 9(fvec4) 7(ptr) 10: TypeFunction 9(fvec4) 7(ptr)
17: TypeImage 8(float) Buffer sampled format:Rgba32f 17: TypeImage 8(float) Buffer nonsampled format:Rgba32f
18: TypeSampledImage 17 18: TypePointer UniformConstant 17
19: TypePointer UniformConstant 18 19(Position): 18(ptr) Variable UniformConstant
20(Position): 19(ptr) Variable UniformConstant 22: TypeInt 32 1
23: TypeInt 32 1 33: TypePointer Input 6(int)
35: TypePointer Input 6(int) 34(Index): 33(ptr) Variable Input
36(Index): 35(ptr) Variable Input 36: TypePointer Output 9(fvec4)
38: TypePointer Output 9(fvec4) 37(@entryPointOutput): 36(ptr) Variable Output
39(@entryPointOutput): 38(ptr) Variable Output
4(RealEntrypoint): 2 Function None 3 4(RealEntrypoint): 2 Function None 3
5: Label 5: Label
34(Index): 7(ptr) Variable Function 32(Index): 7(ptr) Variable Function
40(param): 7(ptr) Variable Function 38(param): 7(ptr) Variable Function
37: 6(int) Load 36(Index) 35: 6(int) Load 34(Index)
Store 34(Index) 37 Store 32(Index) 35
41: 6(int) Load 34(Index) 39: 6(int) Load 32(Index)
Store 40(param) 41 Store 38(param) 39
42: 9(fvec4) FunctionCall 15(@RealEntrypoint(u1;) 40(param) 40: 9(fvec4) FunctionCall 15(@RealEntrypoint(u1;) 38(param)
Store 39(@entryPointOutput) 42 Store 37(@entryPointOutput) 40
Return Return
FunctionEnd FunctionEnd
12(FakeEntrypoint(u1;): 9(fvec4) Function None 10 12(FakeEntrypoint(u1;): 9(fvec4) Function None 10
11(Index): 7(ptr) FunctionParameter 11(Index): 7(ptr) FunctionParameter
13: Label 13: Label
21: 18 Load 20(Position) 20: 17 Load 19(Position)
22: 6(int) Load 11(Index) 21: 6(int) Load 11(Index)
24: 23(int) Bitcast 22 23: 22(int) Bitcast 21
25: 17 Image 21 24: 9(fvec4) ImageRead 20 23
26: 9(fvec4) ImageFetch 25 24 ReturnValue 24
ReturnValue 26
FunctionEnd FunctionEnd
15(@RealEntrypoint(u1;): 9(fvec4) Function None 10 15(@RealEntrypoint(u1;): 9(fvec4) Function None 10
14(Index): 7(ptr) FunctionParameter 14(Index): 7(ptr) FunctionParameter
16: Label 16: Label
29(param): 7(ptr) Variable Function 27(param): 7(ptr) Variable Function
30: 6(int) Load 14(Index) 28: 6(int) Load 14(Index)
Store 29(param) 30 Store 27(param) 28
31: 9(fvec4) FunctionCall 12(FakeEntrypoint(u1;) 29(param) 29: 9(fvec4) FunctionCall 12(FakeEntrypoint(u1;) 27(param)
ReturnValue 31 ReturnValue 29
FunctionEnd FunctionEnd
...@@ -545,6 +545,10 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList) ...@@ -545,6 +545,10 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type, TIntermNode*& nodeList)
qualifier.layoutFormat = type.getQualifier().layoutFormat; qualifier.layoutFormat = type.getQualifier().layoutFormat;
qualifier.precision = type.getQualifier().precision; qualifier.precision = type.getQualifier().precision;
// Propagate sampler readonly qualifier for buffers
if (type.getBasicType() == EbtSampler)
qualifier.readonly = type.getQualifier().readonly;
if (type.getQualifier().storage == EvqVaryingOut || if (type.getQualifier().storage == EvqVaryingOut ||
type.getQualifier().storage == EvqBuffer) { type.getQualifier().storage == EvqBuffer) {
qualifier.storage = type.getQualifier().storage; qualifier.storage = type.getQualifier().storage;
...@@ -1079,9 +1083,9 @@ bool HlslGrammar::acceptTextureType(TType& type) ...@@ -1079,9 +1083,9 @@ bool HlslGrammar::acceptTextureType(TType& type)
bool array = false; bool array = false;
bool ms = false; bool ms = false;
bool image = false; bool image = false;
bool readonly = false;
switch (textureType) { switch (textureType) {
case EHTokBuffer: dim = EsdBuffer; break;
case EHTokTexture1d: dim = Esd1D; break; case EHTokTexture1d: dim = Esd1D; break;
case EHTokTexture1darray: dim = Esd1D; array = true; break; case EHTokTexture1darray: dim = Esd1D; array = true; break;
case EHTokTexture2d: dim = Esd2D; break; case EHTokTexture2d: dim = Esd2D; break;
...@@ -1091,6 +1095,7 @@ bool HlslGrammar::acceptTextureType(TType& type) ...@@ -1091,6 +1095,7 @@ bool HlslGrammar::acceptTextureType(TType& type)
case EHTokTextureCubearray: dim = EsdCube; array = true; break; case EHTokTextureCubearray: dim = EsdCube; array = true; break;
case EHTokTexture2DMS: dim = Esd2D; ms = true; break; case EHTokTexture2DMS: dim = Esd2D; ms = true; break;
case EHTokTexture2DMSarray: dim = Esd2D; array = true; ms = true; break; case EHTokTexture2DMSarray: dim = Esd2D; array = true; ms = true; break;
case EHTokBuffer: dim = EsdBuffer; readonly=true; image=true; break;
case EHTokRWBuffer: dim = EsdBuffer; image=true; break; case EHTokRWBuffer: dim = EsdBuffer; image=true; break;
case EHTokRWTexture1d: dim = Esd1D; array=false; image=true; break; case EHTokRWTexture1d: dim = Esd1D; array=false; image=true; break;
case EHTokRWTexture1darray: dim = Esd1D; array=true; image=true; break; case EHTokRWTexture1darray: dim = Esd1D; array=true; image=true; break;
...@@ -1156,7 +1161,7 @@ bool HlslGrammar::acceptTextureType(TType& type) ...@@ -1156,7 +1161,7 @@ bool HlslGrammar::acceptTextureType(TType& type)
} else if (ms) { } else if (ms) {
expected("texture type for multisample"); expected("texture type for multisample");
return false; return false;
} else if (image) { } else if (image && !readonly) {
expected("type for RWTexture/RWBuffer"); expected("type for RWTexture/RWBuffer");
return false; return false;
} }
...@@ -1187,7 +1192,9 @@ bool HlslGrammar::acceptTextureType(TType& type) ...@@ -1187,7 +1192,9 @@ bool HlslGrammar::acceptTextureType(TType& type)
sampler.vectorSize = txType.getVectorSize(); sampler.vectorSize = txType.getVectorSize();
type.shallowCopy(TType(sampler, EvqUniform, arraySizes)); type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
type.getQualifier().layoutFormat = format; type.getQualifier().layoutFormat = format;
type.getQualifier().readonly = readonly;
return true; return true;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment