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
b38f0716
Commit
b38f0716
authored
Jul 30, 2016
by
John Kessenich
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
HLSL: Add back in the [subcomponent] part of a 'register' decl.
parent
dd50d025
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
96 additions
and
55 deletions
+96
-55
hlsl.struct.frag.out
Test/baseResults/hlsl.struct.frag.out
+50
-35
hlsl.struct.frag
Test/hlsl.struct.frag
+3
-0
revision.h
glslang/Include/revision.h
+1
-1
hlslGrammar.cpp
hlsl/hlslGrammar.cpp
+24
-10
hlslParseHelper.cpp
hlsl/hlslParseHelper.cpp
+14
-7
hlslParseHelper.h
hlsl/hlslParseHelper.h
+4
-2
No files found.
Test/baseResults/hlsl.struct.frag.out
View file @
b38f0716
hlsl.struct.frag
WARNING: 0:26: 'register' : ignoring shader_profile
WARNING: 0:27: 'register' : ignoring shader_profile
WARNING: 0:30: 'register' : ignoring shader_profile
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:4
0
Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
0:3
1
Function Parameters:
0:3
1
'input' (in 4-component vector of float)
0:4
3
Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
0:3
4
Function Parameters:
0:3
4
'input' (in 4-component vector of float)
0:? Sequence
0:3
6
Compare Equal (temp bool)
0:3
6
's3' (temp structure{temp 3-component vector of bool b3})
0:3
6
's3' (temp structure{temp 3-component vector of bool b3})
0:
37
move second child to first child (temp 4-component vector of float)
0:
37
i: direct index for structure (temp 4-component vector of float)
0:
37
's2' (global structure{temp 4-component vector of float i})
0:
37
Constant:
0:
37
0 (const int)
0:
37
ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord)
0:
37
's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
0:
37
Constant:
0:
37
7 (const int)
0:
39
Branch: Return with expression
0:
39
'input' (in 4-component vector of float)
0:3
9
Compare Equal (temp bool)
0:3
9
's3' (temp structure{temp 3-component vector of bool b3})
0:3
9
's3' (temp structure{temp 3-component vector of bool b3})
0:
40
move second child to first child (temp 4-component vector of float)
0:
40
i: direct index for structure (temp 4-component vector of float)
0:
40
's2' (global structure{temp 4-component vector of float i})
0:
40
Constant:
0:
40
0 (const int)
0:
40
ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord)
0:
40
's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
0:
40
Constant:
0:
40
7 (const int)
0:
42
Branch: Return with expression
0:
42
'input' (in 4-component vector of float)
0:? Linker Objects
0:? 's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
0:? 's2' (global structure{temp 4-component vector of float i})
0:? 's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
0:? 'ff5' (layout(binding=5 offset=20 ) global 3-component vector of float)
0:? 'ff6' (layout(binding=8 offset=36 ) global 3-component vector of float)
Linked fragment stage:
...
...
@@ -35,32 +38,34 @@ Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:4
0
Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
0:3
1
Function Parameters:
0:3
1
'input' (in 4-component vector of float)
0:4
3
Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
0:3
4
Function Parameters:
0:3
4
'input' (in 4-component vector of float)
0:? Sequence
0:3
6
Compare Equal (temp bool)
0:3
6
's3' (temp structure{temp 3-component vector of bool b3})
0:3
6
's3' (temp structure{temp 3-component vector of bool b3})
0:
37
move second child to first child (temp 4-component vector of float)
0:
37
i: direct index for structure (temp 4-component vector of float)
0:
37
's2' (global structure{temp 4-component vector of float i})
0:
37
Constant:
0:
37
0 (const int)
0:
37
ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord)
0:
37
's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
0:
37
Constant:
0:
37
7 (const int)
0:
39
Branch: Return with expression
0:
39
'input' (in 4-component vector of float)
0:3
9
Compare Equal (temp bool)
0:3
9
's3' (temp structure{temp 3-component vector of bool b3})
0:3
9
's3' (temp structure{temp 3-component vector of bool b3})
0:
40
move second child to first child (temp 4-component vector of float)
0:
40
i: direct index for structure (temp 4-component vector of float)
0:
40
's2' (global structure{temp 4-component vector of float i})
0:
40
Constant:
0:
40
0 (const int)
0:
40
ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord)
0:
40
's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
0:
40
Constant:
0:
40
7 (const int)
0:
42
Branch: Return with expression
0:
42
'input' (in 4-component vector of float)
0:? Linker Objects
0:? 's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
0:? 's2' (global structure{temp 4-component vector of float i})
0:? 's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float FragCoord ff4})
0:? 'ff5' (layout(binding=5 offset=20 ) global 3-component vector of float)
0:? 'ff6' (layout(binding=8 offset=36 ) global 3-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 4
0
// Id's are bound by 4
4
Capability Shader
1: ExtInstImport "GLSL.std.450"
...
...
@@ -92,8 +97,14 @@ gl_FragCoord origin is upper left
MemberName 37(myS) 2 "a"
MemberName 37(myS) 3 "d"
Name 39 "s1"
Name 42 "ff5"
Name 43 "ff6"
MemberDecorate 25 4 BuiltIn FrontFacing
MemberDecorate 25 7 BuiltIn FragCoord
Decorate 42(ff5) Offset 20
Decorate 42(ff5) Binding 5
Decorate 43(ff6) Offset 36
Decorate 43(ff6) Binding 8
2: TypeVoid
3: TypeFunction 2
6: TypeBool
...
...
@@ -118,6 +129,10 @@ gl_FragCoord origin is upper left
37(myS): TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
38: TypePointer Private 37(myS)
39(s1): 38(ptr) Variable Private
40: TypeVector 17(float) 3
41: TypePointer Private 40(fvec3)
42(ff5): 41(ptr) Variable Private
43(ff6): 41(ptr) Variable Private
4(PixelShaderFunction): 2 Function None 3
5: Label
10(s3): 9(ptr) Variable Function
...
...
Test/hlsl.struct.frag
View file @
b38f0716
...
...
@@ -27,6 +27,9 @@ struct {
float4
ff4
:
VPOS
:
packoffset
(
c0
.
y
)
:
register
(
ps_5_0
,
s0
)
<
int
bambam
=
30
;
>
;
}
s4
;
float3
ff5
:
packoffset
(
c1
.
y
)
:
register
(
ps_5_0
,
s
[
5
]);
float3
ff6
:
packoffset
(
c2
.
y
)
:
register
(
s3
[
5
]);
float4
PixelShaderFunction
(
float4
input
)
:
COLOR0
{
struct
FS
{
...
...
glslang/Include/revision.h
View file @
b38f0716
...
...
@@ -3,4 +3,4 @@
// For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "SPIRV99.1367"
#define GLSLANG_DATE "
29
-Jul-2016"
#define GLSLANG_DATE "
30
-Jul-2016"
hlsl/hlslGrammar.cpp
View file @
b38f0716
...
...
@@ -2523,10 +2523,10 @@ 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#
RIGHT_PAREN
// optional
// annotations // optional
// : 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
// annotations
// optional
//
void
HlslGrammar
::
acceptPostDecls
(
TType
&
type
)
{
...
...
@@ -2561,31 +2561,45 @@ void HlslGrammar::acceptPostDecls(TType& type)
expected
(
"semantic or packoffset or register"
);
return
;
}
else
if
(
*
idToken
.
string
==
"register"
)
{
// REGISTER LEFT_PAREN [shader_profile,] Type# RIGHT_PAREN
// REGISTER LEFT_PAREN [shader_profile,] Type#
[subcomp]opt
RIGHT_PAREN
if
(
!
acceptTokenClass
(
EHTokLeftParen
))
{
expected
(
"("
);
return
;
}
HlslToken
registerDesc
;
HlslToken
registerDesc
;
// for Type#
HlslToken
profile
;
if
(
!
acceptIdentifier
(
registerDesc
))
{
expected
(
"register number description"
);
return
;
}
HlslToken
profile
;
if
(
acceptTokenClass
(
EHTokComma
))
{
//
t
hen we didn't really see the registerDesc yet, it was
// actually the profile
//
T
hen we didn't really see the registerDesc yet, it was
// actually the profile
. Adjust...
profile
=
registerDesc
;
if
(
!
acceptIdentifier
(
registerDesc
))
{
expected
(
"register number description"
);
return
;
}
}
int
subComponent
=
0
;
if
(
acceptTokenClass
(
EHTokLeftBracket
))
{
// LEFT_BRACKET subcomponent RIGHT_BRACKET
if
(
!
peekTokenClass
(
EHTokIntConstant
))
{
expected
(
"literal integer"
);
return
;
}
subComponent
=
token
.
i
;
advanceToken
();
if
(
!
acceptTokenClass
(
EHTokRightBracket
))
{
expected
(
"]"
);
break
;
}
}
if
(
!
acceptTokenClass
(
EHTokRightParen
))
{
expected
(
")"
);
break
;
}
parseContext
.
handleRegister
(
registerDesc
.
loc
,
type
,
profile
.
string
,
*
registerDesc
.
string
);
parseContext
.
handleRegister
(
registerDesc
.
loc
,
type
,
profile
.
string
,
*
registerDesc
.
string
,
subComponent
);
}
else
{
// semantic, in idToken.string
parseContext
.
handleSemantic
(
type
,
*
idToken
.
string
);
...
...
hlsl/hlslParseHelper.cpp
View file @
b38f0716
...
...
@@ -2181,27 +2181,34 @@ void HlslParseContext::handlePackOffset(const TSourceLoc& loc, TType& type, cons
// 'desc' is the type# part.
//
void
HlslParseContext
::
handleRegister
(
const
TSourceLoc
&
loc
,
TType
&
type
,
const
glslang
::
TString
*
profile
,
const
glslang
::
TString
&
desc
)
const
glslang
::
TString
&
desc
,
int
subComponent
)
{
if
(
profile
!=
nullptr
)
warn
(
loc
,
"ignoring shader_profile"
,
"register"
,
""
);
if
(
desc
.
size
()
<
2
)
{
error
(
loc
,
"expected register type
and number
"
,
"register"
,
""
);
if
(
desc
.
size
()
<
1
)
{
error
(
loc
,
"expected register type"
,
"register"
,
""
);
return
;
}
if
(
!
isdigit
(
desc
[
1
]))
{
error
(
loc
,
"expected register number after register type"
,
"register"
,
""
);
return
;
int
regNumber
=
0
;
if
(
desc
.
size
()
>
1
)
{
if
(
isdigit
(
desc
[
1
]))
regNumber
=
atoi
(
desc
.
substr
(
1
,
desc
.
size
()).
c_str
());
else
{
error
(
loc
,
"expected register number after register type"
,
"register"
,
""
);
return
;
}
}
// TODO: learn what all these really mean and how they interact with regNumber and subComponent
switch
(
desc
[
0
])
{
case
'b'
:
case
't'
:
case
'c'
:
case
's'
:
type
.
getQualifier
().
layoutBinding
=
atoi
(
desc
.
substr
(
1
,
desc
.
size
()).
c_str
())
;
type
.
getQualifier
().
layoutBinding
=
regNumber
+
subComponent
;
break
;
default
:
warn
(
loc
,
"ignoring unrecognized register type"
,
"register"
,
"%c"
,
desc
[
0
]);
...
...
hlsl/hlslParseHelper.h
View file @
b38f0716
...
...
@@ -95,8 +95,10 @@ public:
void
builtInOpCheck
(
const
TSourceLoc
&
,
const
TFunction
&
,
TIntermOperator
&
);
TFunction
*
handleConstructorCall
(
const
TSourceLoc
&
,
const
TType
&
);
void
handleSemantic
(
TType
&
type
,
const
TString
&
semantic
);
void
handlePackOffset
(
const
TSourceLoc
&
,
TType
&
type
,
const
glslang
::
TString
&
location
,
const
glslang
::
TString
*
component
);
void
handleRegister
(
const
TSourceLoc
&
,
TType
&
type
,
const
glslang
::
TString
*
profile
,
const
glslang
::
TString
&
desc
);
void
handlePackOffset
(
const
TSourceLoc
&
,
TType
&
type
,
const
glslang
::
TString
&
location
,
const
glslang
::
TString
*
component
);
void
handleRegister
(
const
TSourceLoc
&
,
TType
&
type
,
const
glslang
::
TString
*
profile
,
const
glslang
::
TString
&
desc
,
int
subComponent
);
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