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
cfd7ce87
Commit
cfd7ce87
authored
Sep 05, 2016
by
John Kessenich
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
HLSL: Support register(..., spaceN) for setting the descriptor set.
This was suggested in issue #454.
parent
e3218e27
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
49 additions
and
16 deletions
+49
-16
hlsl.buffer.frag.out
Test/baseResults/hlsl.buffer.frag.out
+5
-5
hlsl.buffer.frag
Test/hlsl.buffer.frag
+1
-1
revision.h
glslang/Include/revision.h
+1
-1
hlslGrammar.cpp
hlsl/hlslGrammar.cpp
+18
-7
hlslParseHelper.cpp
hlsl/hlslParseHelper.cpp
+23
-1
hlslParseHelper.h
hlsl/hlslParseHelper.h
+1
-1
No files found.
Test/baseResults/hlsl.buffer.frag.out
View file @
cfd7ce87
...
...
@@ -23,7 +23,7 @@ gl_FragCoord origin is upper left
0:27 Constant:
0:27 0 (const uint)
0:27 v3: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
0:27 'anon@2' (layout(binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
0:27 'anon@2' (layout(
set=10
binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
0:27 Constant:
0:27 0 (const uint)
0:27 v4: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
...
...
@@ -34,7 +34,7 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v1})
0:? 'anon@1' (layout(column_major std430 ) buffer block{layout(column_major std430 ) buffer 4-component vector of float v2})
0:? 'anon@2' (layout(binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
0:? 'anon@2' (layout(
set=10
binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
0:? 'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
...
...
@@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
0:27 Constant:
0:27 0 (const uint)
0:27 v3: direct index for structure (layout(column_major std140 ) uniform 4-component vector of float)
0:27 'anon@2' (layout(binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
0:27 'anon@2' (layout(
set=10
binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
0:27 Constant:
0:27 0 (const uint)
0:27 v4: direct index for structure (layout(column_major std430 offset=16 ) buffer 4-component vector of float)
...
...
@@ -76,7 +76,7 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 'anon@0' (layout(column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v1})
0:? 'anon@1' (layout(column_major std430 ) buffer block{layout(column_major std430 ) buffer 4-component vector of float v2})
0:? 'anon@2' (layout(binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
0:? 'anon@2' (layout(
set=10
binding=2 column_major std140 ) uniform block{layout(column_major std140 ) uniform 4-component vector of float v3, layout(column_major std140 offset=20 ) uniform int i3})
0:? 'anon@3' (layout(binding=8 column_major std430 ) buffer block{layout(column_major std430 offset=16 ) buffer 4-component vector of float v4, layout(column_major std430 offset=48 ) buffer int i4, layout(column_major std430 offset=60 ) buffer float f1, layout(column_major std430 offset=64 ) buffer float f3, layout(column_major std430 offset=68 ) buffer float f4, layout(column_major std430 offset=72 ) buffer float f5, layout(column_major std430 ) buffer float f6, layout(column_major std430 ) buffer float f7})
// Module Version 10000
...
...
@@ -122,7 +122,7 @@ gl_FragCoord origin is upper left
MemberDecorate 28 0 Offset 0
MemberDecorate 28 1 Offset 20
Decorate 28 Block
Decorate 30 DescriptorSet 0
Decorate 30 DescriptorSet
1
0
Decorate 30 Binding 2
MemberDecorate 34 0 Offset 16
MemberDecorate 34 1 Offset 48
...
...
Test/hlsl.buffer.frag
View file @
cfd7ce87
...
...
@@ -6,7 +6,7 @@ tbuffer {
float4
v2
;
};
cbuffer
cbufName
:
register
(
b2
)
{
cbuffer
cbufName
:
register
(
b2
,
space10
)
{
float4
v3
;
int
i3
:
packoffset
(
c1
.
y
);
};
...
...
glslang/Include/revision.h
View file @
cfd7ce87
...
...
@@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "Overload400-PrecQual.147
0
"
#define GLSLANG_REVISION "Overload400-PrecQual.147
2
"
#define GLSLANG_DATE "05-Sep-2016"
hlsl/hlslGrammar.cpp
View file @
cfd7ce87
...
...
@@ -2591,11 +2591,11 @@ void HlslGrammar::acceptArraySpecifier(TArraySizes*& arraySizes)
}
// post_decls
// : COLON semantic
// optional
// COLON PACKOFFSET LEFT_PAREN c[Subcomponent][.component]
RIGHT_PAREN // optional
// COLON REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt RIGHT_PAREN // optional
// : COLON semantic // optional
// COLON PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN // optional
// COLON REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt
(COMMA SPACEN)opt
RIGHT_PAREN // optional
// COLON LAYOUT layout_qualifier_list
// annotations
// optional
// annotations // optional
//
void
HlslGrammar
::
acceptPostDecls
(
TQualifier
&
qualifier
)
{
...
...
@@ -2632,7 +2632,8 @@ void HlslGrammar::acceptPostDecls(TQualifier& qualifier)
expected
(
"layout, semantic, packoffset, or register"
);
return
;
}
else
if
(
*
idToken
.
string
==
"register"
)
{
// REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt RIGHT_PAREN
// REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt (COMMA SPACEN)opt RIGHT_PAREN
// LEFT_PAREN
if
(
!
acceptTokenClass
(
EHTokLeftParen
))
{
expected
(
"("
);
return
;
...
...
@@ -2643,7 +2644,8 @@ void HlslGrammar::acceptPostDecls(TQualifier& qualifier)
expected
(
"register number description"
);
return
;
}
if
(
acceptTokenClass
(
EHTokComma
))
{
if
(
registerDesc
.
string
->
size
()
>
1
&&
!
isdigit
((
*
registerDesc
.
string
)[
1
])
&&
acceptTokenClass
(
EHTokComma
))
{
// Then we didn't really see the registerDesc yet, it was
// actually the profile. Adjust...
profile
=
registerDesc
;
...
...
@@ -2666,11 +2668,20 @@ void HlslGrammar::acceptPostDecls(TQualifier& qualifier)
break
;
}
}
// (COMMA SPACEN)opt
HlslToken
spaceDesc
;
if
(
acceptTokenClass
(
EHTokComma
))
{
if
(
!
acceptIdentifier
(
spaceDesc
))
{
expected
(
"space identifier"
);
return
;
}
}
// RIGHT_PAREN
if
(
!
acceptTokenClass
(
EHTokRightParen
))
{
expected
(
")"
);
break
;
}
parseContext
.
handleRegister
(
registerDesc
.
loc
,
qualifier
,
profile
.
string
,
*
registerDesc
.
string
,
subComponent
);
parseContext
.
handleRegister
(
registerDesc
.
loc
,
qualifier
,
profile
.
string
,
*
registerDesc
.
string
,
subComponent
,
spaceDesc
.
string
);
}
else
{
// semantic, in idToken.string
parseContext
.
handleSemantic
(
idToken
.
loc
,
qualifier
,
*
idToken
.
string
);
...
...
hlsl/hlslParseHelper.cpp
View file @
cfd7ce87
...
...
@@ -2523,7 +2523,7 @@ void HlslParseContext::handlePackOffset(const TSourceLoc& loc, TQualifier& quali
// 'desc' is the type# part.
//
void
HlslParseContext
::
handleRegister
(
const
TSourceLoc
&
loc
,
TQualifier
&
qualifier
,
const
glslang
::
TString
*
profile
,
const
glslang
::
TString
&
desc
,
int
subComponent
)
const
glslang
::
TString
&
desc
,
int
subComponent
,
const
glslang
::
TString
*
spaceDesc
)
{
if
(
profile
!=
nullptr
)
warn
(
loc
,
"ignoring shader_profile"
,
"register"
,
""
);
...
...
@@ -2555,6 +2555,28 @@ void HlslParseContext::handleRegister(const TSourceLoc& loc, TQualifier& qualifi
warn
(
loc
,
"ignoring unrecognized register type"
,
"register"
,
"%c"
,
desc
[
0
]);
break
;
}
// space
unsigned
int
setNumber
;
const
auto
crackSpace
=
[
&
]()
{
const
int
spaceLen
=
5
;
if
(
spaceDesc
->
size
()
<
spaceLen
+
1
)
return
false
;
if
(
spaceDesc
->
compare
(
0
,
spaceLen
,
"space"
)
!=
0
)
return
false
;
if
(
!
isdigit
((
*
spaceDesc
)[
spaceLen
]))
return
false
;
setNumber
=
atoi
(
spaceDesc
->
substr
(
spaceLen
,
spaceDesc
->
size
()).
c_str
());
return
true
;
};
if
(
spaceDesc
)
{
if
(
!
crackSpace
())
{
error
(
loc
,
"expected spaceN"
,
"register"
,
""
);
return
;
}
qualifier
.
layoutSet
=
setNumber
;
}
}
//
...
...
hlsl/hlslParseHelper.h
View file @
cfd7ce87
...
...
@@ -102,7 +102,7 @@ public:
void
handlePackOffset
(
const
TSourceLoc
&
,
TQualifier
&
,
const
glslang
::
TString
&
location
,
const
glslang
::
TString
*
component
);
void
handleRegister
(
const
TSourceLoc
&
,
TQualifier
&
,
const
glslang
::
TString
*
profile
,
const
glslang
::
TString
&
desc
,
int
subComponent
);
int
subComponent
,
const
glslang
::
TString
*
);
TIntermAggregate
*
handleSamplerTextureCombine
(
const
TSourceLoc
&
loc
,
TIntermTyped
*
argTex
,
TIntermTyped
*
argSampler
);
...
...
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