Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
glslang
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
glslang
Commits
36dc8290
Commit
36dc8290
authored
May 02, 2017
by
Hyangran Park
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
HLSL: Manually configure descriptor set and binding number for resources
parent
22be5788
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
291 additions
and
1 deletion
+291
-1
StandAlone.cpp
StandAlone/StandAlone.cpp
+48
-0
hlsl.multiDescriptorSet.frag.out
Test/baseResults/hlsl.multiDescriptorSet.frag.out
+173
-0
hlsl.multiDescriptorSet.frag
Test/hlsl.multiDescriptorSet.frag
+45
-0
runtests
Test/runtests
+7
-0
ShaderLang.cpp
glslang/MachineIndependent/ShaderLang.cpp
+1
-0
iomapper.cpp
glslang/MachineIndependent/iomapper.cpp
+3
-0
localintermediate.h
glslang/MachineIndependent/localintermediate.h
+3
-0
ShaderLang.h
glslang/Public/ShaderLang.h
+2
-0
Hlsl.FromFile.cpp
gtests/Hlsl.FromFile.cpp
+1
-1
hlslParseHelper.cpp
hlsl/hlslParseHelper.cpp
+8
-0
No files found.
StandAlone/StandAlone.cpp
View file @
36dc8290
...
@@ -168,6 +168,7 @@ std::array<unsigned int, EShLangCount> baseImageBinding;
...
@@ -168,6 +168,7 @@ std::array<unsigned int, EShLangCount> baseImageBinding;
std
::
array
<
unsigned
int
,
EShLangCount
>
baseUboBinding
;
std
::
array
<
unsigned
int
,
EShLangCount
>
baseUboBinding
;
std
::
array
<
unsigned
int
,
EShLangCount
>
baseSsboBinding
;
std
::
array
<
unsigned
int
,
EShLangCount
>
baseSsboBinding
;
std
::
array
<
unsigned
int
,
EShLangCount
>
baseUavBinding
;
std
::
array
<
unsigned
int
,
EShLangCount
>
baseUavBinding
;
std
::
array
<
std
::
vector
<
std
::
string
>
,
EShLangCount
>
baseResourceSetBinding
;
//
//
// Create the default name for saving a binary if -o is not provided.
// Create the default name for saving a binary if -o is not provided.
...
@@ -245,6 +246,45 @@ void ProcessBindingBase(int& argc, char**& argv, std::array<unsigned int, EShLan
...
@@ -245,6 +246,45 @@ void ProcessBindingBase(int& argc, char**& argv, std::array<unsigned int, EShLan
}
}
}
}
void
ProcessResourceSetBindingBase
(
int
&
argc
,
char
**&
argv
,
std
::
array
<
std
::
vector
<
std
::
string
>
,
EShLangCount
>&
base
)
{
if
(
argc
<
2
)
usage
();
if
(
!
isdigit
(
argv
[
1
][
0
]))
{
if
(
argc
<
5
)
// this form needs one more argument
usage
();
// Parse form: --argname stage base
const
EShLanguage
lang
=
FindLanguage
(
argv
[
1
],
false
);
base
[
lang
].
push_back
(
argv
[
2
]);
base
[
lang
].
push_back
(
argv
[
3
]);
base
[
lang
].
push_back
(
argv
[
4
]);
argc
-=
4
;
argv
+=
4
;
while
(
argv
[
1
]
!=
NULL
)
{
if
(
argv
[
1
][
0
]
!=
'-'
)
{
base
[
lang
].
push_back
(
argv
[
1
]);
base
[
lang
].
push_back
(
argv
[
2
]);
base
[
lang
].
push_back
(
argv
[
3
]);
argc
-=
3
;
argv
+=
3
;
}
else
{
break
;
}
}
}
else
{
// Parse form: --argname base
for
(
int
lang
=
0
;
lang
<
EShLangCount
;
++
lang
)
base
[
lang
].
push_back
(
argv
[
1
]);
argc
--
;
argv
++
;
}
}
//
//
// Do all command-line argument parsing. This includes building up the work-items
// Do all command-line argument parsing. This includes building up the work-items
// to be processed later, and saving all the command-line options.
// to be processed later, and saving all the command-line options.
...
@@ -297,6 +337,10 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
...
@@ -297,6 +337,10 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
lowerword
==
"shift-ssbo-binding"
||
lowerword
==
"shift-ssbo-binding"
||
lowerword
==
"sbb"
)
{
lowerword
==
"sbb"
)
{
ProcessBindingBase
(
argc
,
argv
,
baseSsboBinding
);
ProcessBindingBase
(
argc
,
argv
,
baseSsboBinding
);
}
else
if
(
lowerword
==
"resource-set-bindings"
||
// synonyms
lowerword
==
"resource-set-binding"
||
lowerword
==
"rsb"
)
{
ProcessResourceSetBindingBase
(
argc
,
argv
,
baseResourceSetBinding
);
}
else
if
(
lowerword
==
"shift-uav-bindings"
||
// synonyms
}
else
if
(
lowerword
==
"shift-uav-bindings"
||
// synonyms
lowerword
==
"shift-uav-binding"
||
lowerword
==
"shift-uav-binding"
||
lowerword
==
"suavb"
)
{
lowerword
==
"suavb"
)
{
...
@@ -594,6 +638,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
...
@@ -594,6 +638,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
shader
->
setShiftUavBinding
(
baseUavBinding
[
compUnit
.
stage
]);
shader
->
setShiftUavBinding
(
baseUavBinding
[
compUnit
.
stage
]);
shader
->
setFlattenUniformArrays
((
Options
&
EOptionFlattenUniformArrays
)
!=
0
);
shader
->
setFlattenUniformArrays
((
Options
&
EOptionFlattenUniformArrays
)
!=
0
);
shader
->
setNoStorageFormat
((
Options
&
EOptionNoStorageFormat
)
!=
0
);
shader
->
setNoStorageFormat
((
Options
&
EOptionNoStorageFormat
)
!=
0
);
shader
->
setResourceSetBinding
(
baseResourceSetBinding
[
compUnit
.
stage
]);
if
(
Options
&
EOptionHlslIoMapping
)
if
(
Options
&
EOptionHlslIoMapping
)
shader
->
setHlslIoMapping
(
true
);
shader
->
setHlslIoMapping
(
true
);
...
@@ -1006,6 +1051,9 @@ void usage()
...
@@ -1006,6 +1051,9 @@ void usage()
" --shift-ssbo-binding [stage] num set base binding number for SSBOs
\n
"
" --shift-ssbo-binding [stage] num set base binding number for SSBOs
\n
"
" --sbb [stage] num synonym for --shift-ssbo-binding
\n
"
" --sbb [stage] num synonym for --shift-ssbo-binding
\n
"
"
\n
"
"
\n
"
" --resource-set-binding [stage] num set descriptor set and binding number for resources
\n
"
" --rsb [stage] type set binding synonym for --resource-set-binding
\n
"
"
\n
"
" --shift-uav-binding [stage] num set base binding number for UAVs
\n
"
" --shift-uav-binding [stage] num set base binding number for UAVs
\n
"
" --suavb [stage] num synonym for --shift-uav-binding
\n
"
" --suavb [stage] num synonym for --shift-uav-binding
\n
"
"
\n
"
"
\n
"
...
...
Test/baseResults/hlsl.multiDescriptorSet.frag.out
0 → 100644
View file @
36dc8290
hlsl.multiDescriptorSet.frag
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 95
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 78 83 89
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 9 "PS_INPUT"
MemberName 9(PS_INPUT) 0 "Pos"
MemberName 9(PS_INPUT) 1 "Tex"
Name 13 "@main(struct-PS_INPUT-vf4-vf21;"
Name 12 "input"
Name 15 "output"
Name 23 "cbChangesEveryFrame"
MemberName 23(cbChangesEveryFrame) 0 "World"
MemberName 23(cbChangesEveryFrame) 1 "vMeshColor"
Name 25 ""
Name 34 "cbNeverChanges"
MemberName 34(cbNeverChanges) 0 "View"
Name 36 ""
Name 43 "cbChangeOnResize"
MemberName 43(cbChangeOnResize) 0 "Projection"
Name 45 ""
Name 59 "txDiffuseA"
Name 63 "samLinearA"
Name 76 "input"
Name 78 "input_Pos"
Name 81 "PS_INPUT"
MemberName 81(PS_INPUT) 0 "Tex"
Name 83 "input"
Name 89 "@entryPointOutput"
Name 90 "param"
Name 93 "txDiffuseB"
Name 94 "samLinearB"
MemberDecorate 23(cbChangesEveryFrame) 0 RowMajor
MemberDecorate 23(cbChangesEveryFrame) 0 Offset 0
MemberDecorate 23(cbChangesEveryFrame) 0 MatrixStride 16
MemberDecorate 23(cbChangesEveryFrame) 1 Offset 64
Decorate 23(cbChangesEveryFrame) Block
Decorate 25 DescriptorSet 2
Decorate 25 Binding 2
MemberDecorate 34(cbNeverChanges) 0 RowMajor
MemberDecorate 34(cbNeverChanges) 0 Offset 0
MemberDecorate 34(cbNeverChanges) 0 MatrixStride 16
Decorate 34(cbNeverChanges) Block
Decorate 36 DescriptorSet 2
Decorate 36 Binding 0
MemberDecorate 43(cbChangeOnResize) 0 RowMajor
MemberDecorate 43(cbChangeOnResize) 0 Offset 0
MemberDecorate 43(cbChangeOnResize) 0 MatrixStride 16
Decorate 43(cbChangeOnResize) Block
Decorate 45 DescriptorSet 2
Decorate 45 Binding 1
Decorate 59(txDiffuseA) DescriptorSet 0
Decorate 59(txDiffuseA) Binding 0
Decorate 63(samLinearA) DescriptorSet 0
Decorate 63(samLinearA) Binding 1
Decorate 78(input_Pos) BuiltIn FragCoord
Decorate 83(input) Location 0
Decorate 89(@entryPointOutput) Location 0
Decorate 93(txDiffuseB) DescriptorSet 1
Decorate 93(txDiffuseB) Binding 0
Decorate 94(samLinearB) DescriptorSet 1
Decorate 94(samLinearB) Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeVector 6(float) 2
9(PS_INPUT): TypeStruct 7(fvec4) 8(fvec2)
10: TypePointer Function 9(PS_INPUT)
11: TypeFunction 7(fvec4) 10(ptr)
16: 6(float) Constant 0
17: 7(fvec4) ConstantComposite 16 16 16 16
18: 8(fvec2) ConstantComposite 16 16
19: 9(PS_INPUT) ConstantComposite 17 18
20: TypeInt 32 1
21: 20(int) Constant 0
22: TypeMatrix 7(fvec4) 4
23(cbChangesEveryFrame): TypeStruct 22 7(fvec4)
24: TypePointer Uniform 23(cbChangesEveryFrame)
25: 24(ptr) Variable Uniform
26: TypePointer Uniform 22
29: TypePointer Function 7(fvec4)
34(cbNeverChanges): TypeStruct 22
35: TypePointer Uniform 34(cbNeverChanges)
36: 35(ptr) Variable Uniform
43(cbChangeOnResize): TypeStruct 22
44: TypePointer Uniform 43(cbChangeOnResize)
45: 44(ptr) Variable Uniform
52: 20(int) Constant 1
53: TypePointer Function 8(fvec2)
57: TypeImage 6(float) 2D sampled format:Unknown
58: TypePointer UniformConstant 57
59(txDiffuseA): 58(ptr) Variable UniformConstant
61: TypeSampler
62: TypePointer UniformConstant 61
63(samLinearA): 62(ptr) Variable UniformConstant
65: TypeSampledImage 57
70: TypePointer Uniform 7(fvec4)
77: TypePointer Input 7(fvec4)
78(input_Pos): 77(ptr) Variable Input
81(PS_INPUT): TypeStruct 8(fvec2)
82: TypePointer Input 81(PS_INPUT)
83(input): 82(ptr) Variable Input
84: TypePointer Input 8(fvec2)
88: TypePointer Output 7(fvec4)
89(@entryPointOutput): 88(ptr) Variable Output
93(txDiffuseB): 58(ptr) Variable UniformConstant
94(samLinearB): 62(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
76(input): 10(ptr) Variable Function
90(param): 10(ptr) Variable Function
79: 7(fvec4) Load 78(input_Pos)
80: 29(ptr) AccessChain 76(input) 21
Store 80 79
85: 84(ptr) AccessChain 83(input) 21
86: 8(fvec2) Load 85
87: 53(ptr) AccessChain 76(input) 52
Store 87 86
91: 9(PS_INPUT) Load 76(input)
Store 90(param) 91
92: 7(fvec4) FunctionCall 13(@main(struct-PS_INPUT-vf4-vf21;) 90(param)
Store 89(@entryPointOutput) 92
Return
FunctionEnd
13(@main(struct-PS_INPUT-vf4-vf21;): 7(fvec4) Function None 11
12(input): 10(ptr) FunctionParameter
14: Label
15(output): 10(ptr) Variable Function
Store 15(output) 19
27: 26(ptr) AccessChain 25 21
28: 22 Load 27
30: 29(ptr) AccessChain 12(input) 21
31: 7(fvec4) Load 30
32: 7(fvec4) MatrixTimesVector 28 31
33: 29(ptr) AccessChain 15(output) 21
Store 33 32
37: 26(ptr) AccessChain 36 21
38: 22 Load 37
39: 29(ptr) AccessChain 15(output) 21
40: 7(fvec4) Load 39
41: 7(fvec4) MatrixTimesVector 38 40
42: 29(ptr) AccessChain 15(output) 21
Store 42 41
46: 26(ptr) AccessChain 45 21
47: 22 Load 46
48: 29(ptr) AccessChain 15(output) 21
49: 7(fvec4) Load 48
50: 7(fvec4) MatrixTimesVector 47 49
51: 29(ptr) AccessChain 15(output) 21
Store 51 50
54: 53(ptr) AccessChain 12(input) 52
55: 8(fvec2) Load 54
56: 53(ptr) AccessChain 15(output) 52
Store 56 55
60: 57 Load 59(txDiffuseA)
64: 61 Load 63(samLinearA)
66: 65 SampledImage 60 64
67: 53(ptr) AccessChain 15(output) 52
68: 8(fvec2) Load 67
69: 7(fvec4) ImageSampleImplicitLod 66 68
71: 70(ptr) AccessChain 25 52
72: 7(fvec4) Load 71
73: 7(fvec4) FMul 69 72
ReturnValue 73
FunctionEnd
Test/hlsl.multiDescriptorSet.frag
0 → 100644
View file @
36dc8290
Texture2D
txDiffuseA
:
register
(
t0
);
Texture2D
txDiffuseB
:
register
(
t1
);
SamplerState
samLinearA
:
register
(
s0
);
SamplerState
samLinearB
:
register
(
s1
);
cbuffer
cbNeverChanges
:
register
(
b0
)
{
matrix
View
;
};
cbuffer
cbChangeOnResize
:
register
(
b1
)
{
matrix
Projection
;
};
cbuffer
cbChangesEveryFrame
:
register
(
b2
)
{
matrix
World
;
float4
vMeshColor
;
};
struct
VS_INPUT
{
float4
Pos
:
POSITION
;
float2
Tex
:
TEXCOORD0
;
};
struct
PS_INPUT
{
float4
Pos
:
SV_POSITION
;
float2
Tex
:
TEXCOORD0
;
};
float4
main
(
PS_INPUT
input
)
:
SV_Target
{
PS_INPUT
output
=
(
PS_INPUT
)
0
;
output
.
Pos
=
mul
(
input
.
Pos
,
World
);
output
.
Pos
=
mul
(
output
.
Pos
,
View
);
output
.
Pos
=
mul
(
output
.
Pos
,
Projection
);
output
.
Tex
=
input
.
Tex
;
return
txDiffuseA
.
Sample
(
samLinearA
,
output
.
Tex
)
*
vMeshColor
;
}
Test/runtests
View file @
36dc8290
...
@@ -86,6 +86,13 @@ $EXE -i --hlsl-offsets -D -e main -H hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hls
...
@@ -86,6 +86,13 @@ $EXE -i --hlsl-offsets -D -e main -H hlsl.hlslOffset.vert > $TARGETDIR/hlsl.hls
diff
-b
$BASEDIR
/hlsl.hlslOffset.vert.out
$TARGETDIR
/hlsl.hlslOffset.vert.out
||
HASERROR
=
1
diff
-b
$BASEDIR
/hlsl.hlslOffset.vert.out
$TARGETDIR
/hlsl.hlslOffset.vert.out
||
HASERROR
=
1
#
#
# Tesing --resource-set-binding
#
echo
Configuring HLSL descriptor
set
and binding number manually
$EXE
-V
-D
-e
main
-H
hlsl.multiDescriptorSet.frag
--rsb
frag t0 0 0 t1 1 0 s0 0 1 s1 1 1 b0 2 0 b1 2 1 b2 2 2
>
$TARGETDIR
/hlsl.multiDescriptorSet.frag.out
diff
-b
$BASEDIR
/hlsl.multiDescriptorSet.frag.out
$TARGETDIR
/hlsl.multiDescriptorSet.frag.out
#
# Final checking
# Final checking
#
#
if
[
$HASERROR
-eq
0
]
if
[
$HASERROR
-eq
0
]
...
...
glslang/MachineIndependent/ShaderLang.cpp
View file @
36dc8290
...
@@ -1575,6 +1575,7 @@ void TShader::setAutoMapBindings(bool map) { intermediate->setAutoM
...
@@ -1575,6 +1575,7 @@ void TShader::setAutoMapBindings(bool map) { intermediate->setAutoM
void
TShader
::
setHlslIoMapping
(
bool
hlslIoMap
)
{
intermediate
->
setHlslIoMapping
(
hlslIoMap
);
}
void
TShader
::
setHlslIoMapping
(
bool
hlslIoMap
)
{
intermediate
->
setHlslIoMapping
(
hlslIoMap
);
}
void
TShader
::
setFlattenUniformArrays
(
bool
flatten
)
{
intermediate
->
setFlattenUniformArrays
(
flatten
);
}
void
TShader
::
setFlattenUniformArrays
(
bool
flatten
)
{
intermediate
->
setFlattenUniformArrays
(
flatten
);
}
void
TShader
::
setNoStorageFormat
(
bool
useUnknownFormat
)
{
intermediate
->
setNoStorageFormat
(
useUnknownFormat
);
}
void
TShader
::
setNoStorageFormat
(
bool
useUnknownFormat
)
{
intermediate
->
setNoStorageFormat
(
useUnknownFormat
);
}
void
TShader
::
setResourceSetBinding
(
const
std
::
vector
<
std
::
string
>&
base
)
{
intermediate
->
setResourceSetBinding
(
base
);
}
//
//
// Turn the shader strings into a parse tree in the TIntermediate.
// Turn the shader strings into a parse tree in the TIntermediate.
...
...
glslang/MachineIndependent/iomapper.cpp
View file @
36dc8290
...
@@ -349,6 +349,7 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver
...
@@ -349,6 +349,7 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver
int
baseUboBinding
;
int
baseUboBinding
;
int
baseSsboBinding
;
int
baseSsboBinding
;
int
baseUavBinding
;
int
baseUavBinding
;
std
::
vector
<
std
::
string
>
baseResourceSetBinding
;
bool
doAutoMapping
;
bool
doAutoMapping
;
typedef
std
::
vector
<
int
>
TSlotSet
;
typedef
std
::
vector
<
int
>
TSlotSet
;
typedef
std
::
unordered_map
<
int
,
TSlotSet
>
TSlotSetMap
;
typedef
std
::
unordered_map
<
int
,
TSlotSet
>
TSlotSetMap
;
...
@@ -656,6 +657,7 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSi
...
@@ -656,6 +657,7 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSi
intermediate
.
getShiftUboBinding
()
==
0
&&
intermediate
.
getShiftUboBinding
()
==
0
&&
intermediate
.
getShiftSsboBinding
()
==
0
&&
intermediate
.
getShiftSsboBinding
()
==
0
&&
intermediate
.
getShiftUavBinding
()
==
0
&&
intermediate
.
getShiftUavBinding
()
==
0
&&
intermediate
.
getResourceSetBinding
().
empty
()
&&
intermediate
.
getAutoMapBindings
()
==
false
&&
intermediate
.
getAutoMapBindings
()
==
false
&&
resolver
==
nullptr
)
resolver
==
nullptr
)
return
true
;
return
true
;
...
@@ -686,6 +688,7 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSi
...
@@ -686,6 +688,7 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate &intermediate, TInfoSi
resolverBase
->
baseUboBinding
=
intermediate
.
getShiftUboBinding
();
resolverBase
->
baseUboBinding
=
intermediate
.
getShiftUboBinding
();
resolverBase
->
baseSsboBinding
=
intermediate
.
getShiftSsboBinding
();
resolverBase
->
baseSsboBinding
=
intermediate
.
getShiftSsboBinding
();
resolverBase
->
baseUavBinding
=
intermediate
.
getShiftUavBinding
();
resolverBase
->
baseUavBinding
=
intermediate
.
getShiftUavBinding
();
resolverBase
->
baseResourceSetBinding
=
intermediate
.
getResourceSetBinding
();
resolverBase
->
doAutoMapping
=
intermediate
.
getAutoMapBindings
();
resolverBase
->
doAutoMapping
=
intermediate
.
getAutoMapBindings
();
resolver
=
resolverBase
;
resolver
=
resolverBase
;
...
...
glslang/MachineIndependent/localintermediate.h
View file @
36dc8290
...
@@ -216,6 +216,8 @@ public:
...
@@ -216,6 +216,8 @@ public:
unsigned
int
getShiftSsboBinding
()
const
{
return
shiftSsboBinding
;
}
unsigned
int
getShiftSsboBinding
()
const
{
return
shiftSsboBinding
;
}
void
setShiftUavBinding
(
unsigned
int
shift
)
{
shiftUavBinding
=
shift
;
}
void
setShiftUavBinding
(
unsigned
int
shift
)
{
shiftUavBinding
=
shift
;
}
unsigned
int
getShiftUavBinding
()
const
{
return
shiftUavBinding
;
}
unsigned
int
getShiftUavBinding
()
const
{
return
shiftUavBinding
;
}
void
setResourceSetBinding
(
const
std
::
vector
<
std
::
string
>&
shift
)
{
resourceSetBinding
=
shift
;
}
const
std
::
vector
<
std
::
string
>&
getResourceSetBinding
()
const
{
return
resourceSetBinding
;
}
void
setAutoMapBindings
(
bool
map
)
{
autoMapBindings
=
map
;
}
void
setAutoMapBindings
(
bool
map
)
{
autoMapBindings
=
map
;
}
bool
getAutoMapBindings
()
const
{
return
autoMapBindings
;
}
bool
getAutoMapBindings
()
const
{
return
autoMapBindings
;
}
void
setFlattenUniformArrays
(
bool
flatten
)
{
flattenUniformArrays
=
flatten
;
}
void
setFlattenUniformArrays
(
bool
flatten
)
{
flattenUniformArrays
=
flatten
;
}
...
@@ -512,6 +514,7 @@ protected:
...
@@ -512,6 +514,7 @@ protected:
unsigned
int
shiftUboBinding
;
unsigned
int
shiftUboBinding
;
unsigned
int
shiftSsboBinding
;
unsigned
int
shiftSsboBinding
;
unsigned
int
shiftUavBinding
;
unsigned
int
shiftUavBinding
;
std
::
vector
<
std
::
string
>
resourceSetBinding
;
bool
autoMapBindings
;
bool
autoMapBindings
;
bool
flattenUniformArrays
;
bool
flattenUniformArrays
;
bool
useUnknownFormat
;
bool
useUnknownFormat
;
...
...
glslang/Public/ShaderLang.h
View file @
36dc8290
...
@@ -40,6 +40,7 @@
...
@@ -40,6 +40,7 @@
#include "../MachineIndependent/Versions.h"
#include "../MachineIndependent/Versions.h"
#include <cstring>
#include <cstring>
#include <vector>
#ifdef _WIN32
#ifdef _WIN32
#define C_DECL __cdecl
#define C_DECL __cdecl
...
@@ -306,6 +307,7 @@ public:
...
@@ -306,6 +307,7 @@ public:
void
setShiftUavBinding
(
unsigned
int
base
);
void
setShiftUavBinding
(
unsigned
int
base
);
void
setShiftCbufferBinding
(
unsigned
int
base
);
// synonym for setShiftUboBinding
void
setShiftCbufferBinding
(
unsigned
int
base
);
// synonym for setShiftUboBinding
void
setShiftSsboBinding
(
unsigned
int
base
);
void
setShiftSsboBinding
(
unsigned
int
base
);
void
setResourceSetBinding
(
const
std
::
vector
<
std
::
string
>&
base
);
void
setAutoMapBindings
(
bool
map
);
void
setAutoMapBindings
(
bool
map
);
void
setHlslIoMapping
(
bool
hlslIoMap
);
void
setHlslIoMapping
(
bool
hlslIoMap
);
void
setFlattenUniformArrays
(
bool
flatten
);
void
setFlattenUniformArrays
(
bool
flatten
);
...
...
gtests/Hlsl.FromFile.cpp
View file @
36dc8290
...
@@ -285,7 +285,7 @@ INSTANTIATE_TEST_CASE_P(
...
@@ -285,7 +285,7 @@ INSTANTIATE_TEST_CASE_P(
{
"hlsl.typeGraphCopy.vert"
,
"main"
},
{
"hlsl.typeGraphCopy.vert"
,
"main"
},
{
"hlsl.typedef.frag"
,
"PixelShaderFunction"
},
{
"hlsl.typedef.frag"
,
"PixelShaderFunction"
},
{
"hlsl.whileLoop.frag"
,
"PixelShaderFunction"
},
{
"hlsl.whileLoop.frag"
,
"PixelShaderFunction"
},
{
"hlsl.void.frag"
,
"PixelShaderFunction"
}
,
{
"hlsl.void.frag"
,
"PixelShaderFunction"
}
}),
}),
FileNameAsCustomTestSuffix
FileNameAsCustomTestSuffix
);
);
...
...
hlsl/hlslParseHelper.cpp
View file @
36dc8290
...
@@ -4821,6 +4821,7 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
...
@@ -4821,6 +4821,7 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
}
}
// TODO: learn what all these really mean and how they interact with regNumber and subComponent
// TODO: learn what all these really mean and how they interact with regNumber and subComponent
std
::
vector
<
std
::
string
>
resourceInfo
=
intermediate
.
getResourceSetBinding
();
switch
(
std
::
tolower
(
desc
[
0
]))
{
switch
(
std
::
tolower
(
desc
[
0
]))
{
case
'b'
:
case
'b'
:
case
't'
:
case
't'
:
...
@@ -4828,6 +4829,13 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
...
@@ -4828,6 +4829,13 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
case
's'
:
case
's'
:
case
'u'
:
case
'u'
:
qualifier
.
layoutBinding
=
regNumber
+
subComponent
;
qualifier
.
layoutBinding
=
regNumber
+
subComponent
;
for
(
auto
it
=
resourceInfo
.
cbegin
();
it
!=
resourceInfo
.
cend
();
it
=
it
+
3
)
{
if
(
strcmp
(
desc
.
c_str
(),
it
[
0
].
c_str
())
==
0
)
{
qualifier
.
layoutSet
=
atoi
(
it
[
1
].
c_str
());
qualifier
.
layoutBinding
=
atoi
(
it
[
2
].
c_str
())
+
subComponent
;
break
;
}
}
break
;
break
;
default
:
default
:
warn
(
loc
,
"ignoring unrecognized register type"
,
"register"
,
"%c"
,
desc
[
0
]);
warn
(
loc
,
"ignoring unrecognized register type"
,
"register"
,
"%c"
,
desc
[
0
]);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment