mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-08 19:40:06 +00:00
Fix issue with remapping global uniform blocks
Avoid adding global uniform blocks to stages that don't already have it. Otherwise multiple stages point to the same block object, and a remapping that occurs later on will change the mapping on multiple stages.
This commit is contained in:
parent
48f08c60e2
commit
5340752190
281
Test/baseResults/vk.relaxed.changeSet.vert.out
Executable file
281
Test/baseResults/vk.relaxed.changeSet.vert.out
Executable file
@ -0,0 +1,281 @@
|
|||||||
|
vk.relaxed.changeSet.vert
|
||||||
|
Shader version: 460
|
||||||
|
0:? Sequence
|
||||||
|
0:11 Function Definition: main( ( global void)
|
||||||
|
0:11 Function Parameters:
|
||||||
|
0:13 Sequence
|
||||||
|
0:13 move second child to first child ( temp highp 4-component vector of float)
|
||||||
|
0:13 'Color' ( smooth out highp 4-component vector of float)
|
||||||
|
0:13 'aColor' ( in highp 4-component vector of float)
|
||||||
|
0:14 move second child to first child ( temp highp 2-component vector of float)
|
||||||
|
0:14 'UV' ( smooth out highp 2-component vector of float)
|
||||||
|
0:14 'aUV' ( in highp 2-component vector of float)
|
||||||
|
0:15 move second child to first child ( temp highp 4-component vector of float)
|
||||||
|
0:15 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
|
||||||
|
0:15 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance})
|
||||||
|
0:15 Constant:
|
||||||
|
0:15 0 (const uint)
|
||||||
|
0:15 matrix-times-vector ( temp highp 4-component vector of float)
|
||||||
|
0:15 projectionMatrix: direct index for structure ( uniform highp 4X4 matrix of float)
|
||||||
|
0:15 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4X4 matrix of float projectionMatrix})
|
||||||
|
0:15 Constant:
|
||||||
|
0:15 0 (const uint)
|
||||||
|
0:15 Construct vec4 ( temp highp 4-component vector of float)
|
||||||
|
0:15 'aPos' ( in highp 2-component vector of float)
|
||||||
|
0:15 Constant:
|
||||||
|
0:15 0.000000
|
||||||
|
0:15 Constant:
|
||||||
|
0:15 1.000000
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'aPos' ( in highp 2-component vector of float)
|
||||||
|
0:? 'aUV' ( in highp 2-component vector of float)
|
||||||
|
0:? 'aColor' ( in highp 4-component vector of float)
|
||||||
|
0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4X4 matrix of float projectionMatrix})
|
||||||
|
0:? 'Color' ( smooth out highp 4-component vector of float)
|
||||||
|
0:? 'UV' ( smooth out highp 2-component vector of float)
|
||||||
|
0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance})
|
||||||
|
0:? 'gl_VertexID' ( in int VertexIndex)
|
||||||
|
0:? 'gl_InstanceID' ( in int InstanceIndex)
|
||||||
|
|
||||||
|
vk.relaxed.changeSet.frag
|
||||||
|
Shader version: 460
|
||||||
|
gl_FragCoord origin is upper left
|
||||||
|
0:? Sequence
|
||||||
|
0:10 Function Definition: main( ( global void)
|
||||||
|
0:10 Function Parameters:
|
||||||
|
0:12 Sequence
|
||||||
|
0:12 move second child to first child ( temp highp 4-component vector of float)
|
||||||
|
0:12 'fragColor' (layout( location=0) out highp 4-component vector of float)
|
||||||
|
0:12 vector-scale ( temp highp 4-component vector of float)
|
||||||
|
0:12 'Color' ( smooth in highp 4-component vector of float)
|
||||||
|
0:12 direct index ( temp highp float)
|
||||||
|
0:12 texture ( global highp 4-component vector of float)
|
||||||
|
0:12 'sTexture' ( uniform highp sampler2D)
|
||||||
|
0:12 vector swizzle ( temp highp 2-component vector of float)
|
||||||
|
0:12 'UV' ( smooth in highp 2-component vector of float)
|
||||||
|
0:12 Sequence
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 0 (const int)
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 1 (const int)
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 0 (const int)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'fragColor' (layout( location=0) out highp 4-component vector of float)
|
||||||
|
0:? 'sTexture' ( uniform highp sampler2D)
|
||||||
|
0:? 'Color' ( smooth in highp 4-component vector of float)
|
||||||
|
0:? 'UV' ( smooth in highp 2-component vector of float)
|
||||||
|
|
||||||
|
|
||||||
|
Linked vertex stage:
|
||||||
|
|
||||||
|
|
||||||
|
Linked fragment stage:
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 460
|
||||||
|
0:? Sequence
|
||||||
|
0:11 Function Definition: main( ( global void)
|
||||||
|
0:11 Function Parameters:
|
||||||
|
0:13 Sequence
|
||||||
|
0:13 move second child to first child ( temp highp 4-component vector of float)
|
||||||
|
0:13 'Color' ( smooth out highp 4-component vector of float)
|
||||||
|
0:13 'aColor' ( in highp 4-component vector of float)
|
||||||
|
0:14 move second child to first child ( temp highp 2-component vector of float)
|
||||||
|
0:14 'UV' ( smooth out highp 2-component vector of float)
|
||||||
|
0:14 'aUV' ( in highp 2-component vector of float)
|
||||||
|
0:15 move second child to first child ( temp highp 4-component vector of float)
|
||||||
|
0:15 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position)
|
||||||
|
0:15 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance})
|
||||||
|
0:15 Constant:
|
||||||
|
0:15 0 (const uint)
|
||||||
|
0:15 matrix-times-vector ( temp highp 4-component vector of float)
|
||||||
|
0:15 projectionMatrix: direct index for structure ( uniform highp 4X4 matrix of float)
|
||||||
|
0:15 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4X4 matrix of float projectionMatrix})
|
||||||
|
0:15 Constant:
|
||||||
|
0:15 0 (const uint)
|
||||||
|
0:15 Construct vec4 ( temp highp 4-component vector of float)
|
||||||
|
0:15 'aPos' ( in highp 2-component vector of float)
|
||||||
|
0:15 Constant:
|
||||||
|
0:15 0.000000
|
||||||
|
0:15 Constant:
|
||||||
|
0:15 1.000000
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'aPos' ( in highp 2-component vector of float)
|
||||||
|
0:? 'aUV' ( in highp 2-component vector of float)
|
||||||
|
0:? 'aColor' ( in highp 4-component vector of float)
|
||||||
|
0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4X4 matrix of float projectionMatrix})
|
||||||
|
0:? 'Color' ( smooth out highp 4-component vector of float)
|
||||||
|
0:? 'UV' ( smooth out highp 2-component vector of float)
|
||||||
|
0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance})
|
||||||
|
0:? 'gl_VertexID' ( in int VertexIndex)
|
||||||
|
0:? 'gl_InstanceID' ( in int InstanceIndex)
|
||||||
|
Shader version: 460
|
||||||
|
gl_FragCoord origin is upper left
|
||||||
|
0:? Sequence
|
||||||
|
0:10 Function Definition: main( ( global void)
|
||||||
|
0:10 Function Parameters:
|
||||||
|
0:12 Sequence
|
||||||
|
0:12 move second child to first child ( temp highp 4-component vector of float)
|
||||||
|
0:12 'fragColor' (layout( location=0) out highp 4-component vector of float)
|
||||||
|
0:12 vector-scale ( temp highp 4-component vector of float)
|
||||||
|
0:12 'Color' ( smooth in highp 4-component vector of float)
|
||||||
|
0:12 direct index ( temp highp float)
|
||||||
|
0:12 texture ( global highp 4-component vector of float)
|
||||||
|
0:12 'sTexture' ( uniform highp sampler2D)
|
||||||
|
0:12 vector swizzle ( temp highp 2-component vector of float)
|
||||||
|
0:12 'UV' ( smooth in highp 2-component vector of float)
|
||||||
|
0:12 Sequence
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 0 (const int)
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 1 (const int)
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 0 (const int)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'fragColor' (layout( location=0) out highp 4-component vector of float)
|
||||||
|
0:? 'sTexture' ( uniform highp sampler2D)
|
||||||
|
0:? 'Color' ( smooth in highp 4-component vector of float)
|
||||||
|
0:? 'UV' ( smooth in highp 2-component vector of float)
|
||||||
|
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 8000a
|
||||||
|
// Id's are bound by 46
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint Vertex 4 "main" 9 11 15 17 24 34 44 45
|
||||||
|
Source GLSL 460
|
||||||
|
Name 4 "main"
|
||||||
|
Name 9 "Color"
|
||||||
|
Name 11 "aColor"
|
||||||
|
Name 15 "UV"
|
||||||
|
Name 17 "aUV"
|
||||||
|
Name 22 "gl_PerVertex"
|
||||||
|
MemberName 22(gl_PerVertex) 0 "gl_Position"
|
||||||
|
MemberName 22(gl_PerVertex) 1 "gl_PointSize"
|
||||||
|
MemberName 22(gl_PerVertex) 2 "gl_ClipDistance"
|
||||||
|
MemberName 22(gl_PerVertex) 3 "gl_CullDistance"
|
||||||
|
Name 24 ""
|
||||||
|
Name 28 "gl_DefaultUniformBlock"
|
||||||
|
MemberName 28(gl_DefaultUniformBlock) 0 "projectionMatrix"
|
||||||
|
Name 30 ""
|
||||||
|
Name 34 "aPos"
|
||||||
|
Name 44 "gl_VertexID"
|
||||||
|
Name 45 "gl_InstanceID"
|
||||||
|
Decorate 9(Color) Location 0
|
||||||
|
Decorate 11(aColor) Location 2
|
||||||
|
Decorate 15(UV) Location 1
|
||||||
|
Decorate 17(aUV) Location 1
|
||||||
|
MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position
|
||||||
|
MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize
|
||||||
|
MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance
|
||||||
|
MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance
|
||||||
|
Decorate 22(gl_PerVertex) Block
|
||||||
|
MemberDecorate 28(gl_DefaultUniformBlock) 0 ColMajor
|
||||||
|
MemberDecorate 28(gl_DefaultUniformBlock) 0 Offset 0
|
||||||
|
MemberDecorate 28(gl_DefaultUniformBlock) 0 MatrixStride 16
|
||||||
|
Decorate 28(gl_DefaultUniformBlock) Block
|
||||||
|
Decorate 30 DescriptorSet 0
|
||||||
|
Decorate 30 Binding 0
|
||||||
|
Decorate 34(aPos) Location 0
|
||||||
|
Decorate 44(gl_VertexID) BuiltIn VertexIndex
|
||||||
|
Decorate 45(gl_InstanceID) BuiltIn InstanceIndex
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeFloat 32
|
||||||
|
7: TypeVector 6(float) 4
|
||||||
|
8: TypePointer Output 7(fvec4)
|
||||||
|
9(Color): 8(ptr) Variable Output
|
||||||
|
10: TypePointer Input 7(fvec4)
|
||||||
|
11(aColor): 10(ptr) Variable Input
|
||||||
|
13: TypeVector 6(float) 2
|
||||||
|
14: TypePointer Output 13(fvec2)
|
||||||
|
15(UV): 14(ptr) Variable Output
|
||||||
|
16: TypePointer Input 13(fvec2)
|
||||||
|
17(aUV): 16(ptr) Variable Input
|
||||||
|
19: TypeInt 32 0
|
||||||
|
20: 19(int) Constant 1
|
||||||
|
21: TypeArray 6(float) 20
|
||||||
|
22(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 21 21
|
||||||
|
23: TypePointer Output 22(gl_PerVertex)
|
||||||
|
24: 23(ptr) Variable Output
|
||||||
|
25: TypeInt 32 1
|
||||||
|
26: 25(int) Constant 0
|
||||||
|
27: TypeMatrix 7(fvec4) 4
|
||||||
|
28(gl_DefaultUniformBlock): TypeStruct 27
|
||||||
|
29: TypePointer Uniform 28(gl_DefaultUniformBlock)
|
||||||
|
30: 29(ptr) Variable Uniform
|
||||||
|
31: TypePointer Uniform 27
|
||||||
|
34(aPos): 16(ptr) Variable Input
|
||||||
|
36: 6(float) Constant 0
|
||||||
|
37: 6(float) Constant 1065353216
|
||||||
|
43: TypePointer Input 25(int)
|
||||||
|
44(gl_VertexID): 43(ptr) Variable Input
|
||||||
|
45(gl_InstanceID): 43(ptr) Variable Input
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
12: 7(fvec4) Load 11(aColor)
|
||||||
|
Store 9(Color) 12
|
||||||
|
18: 13(fvec2) Load 17(aUV)
|
||||||
|
Store 15(UV) 18
|
||||||
|
32: 31(ptr) AccessChain 30 26
|
||||||
|
33: 27 Load 32
|
||||||
|
35: 13(fvec2) Load 34(aPos)
|
||||||
|
38: 6(float) CompositeExtract 35 0
|
||||||
|
39: 6(float) CompositeExtract 35 1
|
||||||
|
40: 7(fvec4) CompositeConstruct 38 39 36 37
|
||||||
|
41: 7(fvec4) MatrixTimesVector 33 40
|
||||||
|
42: 8(ptr) AccessChain 24 26
|
||||||
|
Store 42 41
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 8000a
|
||||||
|
// Id's are bound by 27
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint Fragment 4 "main" 9 11 20
|
||||||
|
ExecutionMode 4 OriginUpperLeft
|
||||||
|
Source GLSL 460
|
||||||
|
Name 4 "main"
|
||||||
|
Name 9 "fragColor"
|
||||||
|
Name 11 "Color"
|
||||||
|
Name 16 "sTexture"
|
||||||
|
Name 20 "UV"
|
||||||
|
Decorate 9(fragColor) Location 0
|
||||||
|
Decorate 11(Color) Location 0
|
||||||
|
Decorate 16(sTexture) DescriptorSet 1
|
||||||
|
Decorate 16(sTexture) Binding 0
|
||||||
|
Decorate 20(UV) Location 1
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeFloat 32
|
||||||
|
7: TypeVector 6(float) 4
|
||||||
|
8: TypePointer Output 7(fvec4)
|
||||||
|
9(fragColor): 8(ptr) Variable Output
|
||||||
|
10: TypePointer Input 7(fvec4)
|
||||||
|
11(Color): 10(ptr) Variable Input
|
||||||
|
13: TypeImage 6(float) 2D sampled format:Unknown
|
||||||
|
14: TypeSampledImage 13
|
||||||
|
15: TypePointer UniformConstant 14
|
||||||
|
16(sTexture): 15(ptr) Variable UniformConstant
|
||||||
|
18: TypeVector 6(float) 2
|
||||||
|
19: TypePointer Input 18(fvec2)
|
||||||
|
20(UV): 19(ptr) Variable Input
|
||||||
|
23: TypeInt 32 0
|
||||||
|
24: 23(int) Constant 0
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
12: 7(fvec4) Load 11(Color)
|
||||||
|
17: 14 Load 16(sTexture)
|
||||||
|
21: 18(fvec2) Load 20(UV)
|
||||||
|
22: 7(fvec4) ImageSampleImplicitLod 17 21
|
||||||
|
25: 6(float) CompositeExtract 22 0
|
||||||
|
26: 7(fvec4) VectorTimesScalar 12 25
|
||||||
|
Store 9(fragColor) 26
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
13
Test/vk.relaxed.changeSet.frag
Executable file
13
Test/vk.relaxed.changeSet.frag
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#version 460
|
||||||
|
|
||||||
|
layout(location = 0) out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform sampler2D sTexture;
|
||||||
|
|
||||||
|
in vec4 Color;
|
||||||
|
in vec2 UV;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
fragColor = Color * texture(sTexture, UV.st).r;
|
||||||
|
}
|
16
Test/vk.relaxed.changeSet.vert
Executable file
16
Test/vk.relaxed.changeSet.vert
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#version 460
|
||||||
|
|
||||||
|
in vec2 aPos;
|
||||||
|
in vec2 aUV;
|
||||||
|
in vec4 aColor;
|
||||||
|
uniform mat4 projectionMatrix;
|
||||||
|
|
||||||
|
out vec4 Color;
|
||||||
|
out vec2 UV;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
Color = aColor;
|
||||||
|
UV = aUV;
|
||||||
|
gl_Position = projectionMatrix * vec4(aPos, 0, 1);
|
||||||
|
}
|
@ -2124,7 +2124,12 @@ bool TProgram::crossStageCheck(EShMessages) {
|
|||||||
|
|
||||||
// copy final definition of global block back into each stage
|
// copy final definition of global block back into each stage
|
||||||
for (unsigned int i = 0; i < activeStages.size(); ++i) {
|
for (unsigned int i = 0; i < activeStages.size(); ++i) {
|
||||||
activeStages[i]->mergeGlobalUniformBlocks(*infoSink, uniforms);
|
// We only want to merge into already existing global uniform blocks.
|
||||||
|
// A stage that doesn't already know about the global doesn't care about it's content.
|
||||||
|
// Otherwise we end up pointing to the same object between different stages
|
||||||
|
// and that will break binding/set remappings
|
||||||
|
bool mergeExistingOnly = true;
|
||||||
|
activeStages[i]->mergeGlobalUniformBlocks(*infoSink, uniforms, mergeExistingOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
// compare cross stage symbols for each stage boundary
|
// compare cross stage symbols for each stage boundary
|
||||||
|
@ -108,7 +108,8 @@ void TIntermediate::mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit
|
|||||||
unitLinkerObjects.resize(end - unitLinkerObjects.begin());
|
unitLinkerObjects.resize(end - unitLinkerObjects.begin());
|
||||||
|
|
||||||
// merge uniforms and do error checking
|
// merge uniforms and do error checking
|
||||||
mergeGlobalUniformBlocks(infoSink, unit);
|
bool mergeExistingOnly = false;
|
||||||
|
mergeGlobalUniformBlocks(infoSink, unit, mergeExistingOnly);
|
||||||
mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage());
|
mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,7 +363,8 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit)
|
|||||||
remapIds(idMaps, idShift + 1, unit);
|
remapIds(idMaps, idShift + 1, unit);
|
||||||
|
|
||||||
mergeBodies(infoSink, globals, unitGlobals);
|
mergeBodies(infoSink, globals, unitGlobals);
|
||||||
mergeGlobalUniformBlocks(infoSink, unit);
|
bool mergeExistingOnly = false;
|
||||||
|
mergeGlobalUniformBlocks(infoSink, unit, mergeExistingOnly);
|
||||||
mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage());
|
mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage());
|
||||||
ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end());
|
ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end());
|
||||||
}
|
}
|
||||||
@ -525,7 +527,7 @@ static inline bool isSameInterface(TIntermSymbol* symbol, EShLanguage stage, TIn
|
|||||||
// merge the members of different stages to allow them to be linked properly
|
// merge the members of different stages to allow them to be linked properly
|
||||||
// as a single block
|
// as a single block
|
||||||
//
|
//
|
||||||
void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit)
|
void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit, bool mergeExistingOnly)
|
||||||
{
|
{
|
||||||
TIntermSequence& linkerObjects = findLinkerObjects()->getSequence();
|
TIntermSequence& linkerObjects = findLinkerObjects()->getSequence();
|
||||||
TIntermSequence& unitLinkerObjects = unit.findLinkerObjects()->getSequence();
|
TIntermSequence& unitLinkerObjects = unit.findLinkerObjects()->getSequence();
|
||||||
@ -552,7 +554,7 @@ void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate&
|
|||||||
auto itUnitBlock = unitDefaultBlocks.begin();
|
auto itUnitBlock = unitDefaultBlocks.begin();
|
||||||
for (; itUnitBlock != unitDefaultBlocks.end(); itUnitBlock++) {
|
for (; itUnitBlock != unitDefaultBlocks.end(); itUnitBlock++) {
|
||||||
|
|
||||||
bool add = true;
|
bool add = !mergeExistingOnly;
|
||||||
auto itBlock = defaultBlocks.begin();
|
auto itBlock = defaultBlocks.begin();
|
||||||
|
|
||||||
for (; itBlock != defaultBlocks.end(); itBlock++) {
|
for (; itBlock != defaultBlocks.end(); itBlock++) {
|
||||||
|
@ -915,7 +915,7 @@ public:
|
|||||||
void merge(TInfoSink&, TIntermediate&);
|
void merge(TInfoSink&, TIntermediate&);
|
||||||
void finalCheck(TInfoSink&, bool keepUncalled);
|
void finalCheck(TInfoSink&, bool keepUncalled);
|
||||||
|
|
||||||
void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit);
|
void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit, bool mergeExistingOnly);
|
||||||
void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit);
|
void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit);
|
||||||
void checkStageIO(TInfoSink&, TIntermediate&);
|
void checkStageIO(TInfoSink&, TIntermediate&);
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ namespace {
|
|||||||
|
|
||||||
struct vkRelaxedData {
|
struct vkRelaxedData {
|
||||||
std::vector<std::string> fileNames;
|
std::vector<std::string> fileNames;
|
||||||
|
std::vector<std::vector<std::string>> resourceSetBindings;
|
||||||
};
|
};
|
||||||
|
|
||||||
using VulkanRelaxedTest = GlslangTest <::testing::TestWithParam<vkRelaxedData>>;
|
using VulkanRelaxedTest = GlslangTest <::testing::TestWithParam<vkRelaxedData>>;
|
||||||
@ -191,6 +192,7 @@ bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) {
|
|||||||
TEST_P(VulkanRelaxedTest, FromFile)
|
TEST_P(VulkanRelaxedTest, FromFile)
|
||||||
{
|
{
|
||||||
const auto& fileNames = GetParam().fileNames;
|
const auto& fileNames = GetParam().fileNames;
|
||||||
|
const auto& resourceSetBindings = GetParam().resourceSetBindings;
|
||||||
Semantics semantics = Semantics::Vulkan;
|
Semantics semantics = Semantics::Vulkan;
|
||||||
const size_t fileCount = fileNames.size();
|
const size_t fileCount = fileNames.size();
|
||||||
const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv);
|
const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv);
|
||||||
@ -230,6 +232,12 @@ TEST_P(VulkanRelaxedTest, FromFile)
|
|||||||
result.linkingOutput = program.getInfoLog();
|
result.linkingOutput = program.getInfoLog();
|
||||||
result.linkingError = program.getInfoDebugLog();
|
result.linkingError = program.getInfoDebugLog();
|
||||||
|
|
||||||
|
if (!resourceSetBindings.empty()) {
|
||||||
|
assert(resourceSetBindings.size() == fileNames.size());
|
||||||
|
for (int i = 0; i < shaders.size(); i++)
|
||||||
|
shaders[i]->setResourceSetBinding(resourceSetBindings[i]);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int stage = 0;
|
unsigned int stage = 0;
|
||||||
glslang::TIntermediate* firstIntermediate = nullptr;
|
glslang::TIntermediate* firstIntermediate = nullptr;
|
||||||
while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; }
|
while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; }
|
||||||
@ -287,6 +295,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|||||||
{{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}},
|
{{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}},
|
||||||
{{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}},
|
{{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}},
|
||||||
{{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}},
|
{{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}},
|
||||||
|
{{"vk.relaxed.changeSet.vert", "vk.relaxed.changeSet.frag" }, { {"0"}, {"1"} } },
|
||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
Loading…
Reference in New Issue
Block a user