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
7b1dcd66
Commit
7b1dcd66
authored
Apr 20, 2017
by
steve-lunarg
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
HLSL: add readonly qualifier to tbuffer, so they end up as SRV
parent
be283550
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
80 additions
and
21 deletions
+80
-21
hlsl.automap.frag.out
Test/baseResults/hlsl.automap.frag.out
+2
-0
hlsl.buffer.frag.out
Test/baseResults/hlsl.buffer.frag.out
+0
-0
hlsl.layout.frag.out
Test/baseResults/hlsl.layout.frag.out
+15
-12
hlsl.automap.frag
Test/hlsl.automap.frag
+6
-6
ShaderLang.cpp
glslang/MachineIndependent/ShaderLang.cpp
+9
-0
iomapper.cpp
glslang/MachineIndependent/iomapper.cpp
+42
-1
hlslGrammar.cpp
hlsl/hlslGrammar.cpp
+6
-2
No files found.
Test/baseResults/hlsl.automap.frag.out
View file @
7b1dcd66
...
@@ -15,6 +15,7 @@ u4: offset -1, type 9051, size 1, index -1, binding 44
...
@@ -15,6 +15,7 @@ u4: offset -1, type 9051, size 1, index -1, binding 44
u5.@data: offset 0, type 1405, size 0, index 2, binding -1
u5.@data: offset 0, type 1405, size 0, index 2, binding -1
u6.@data: offset 0, type 1406, size 1, index 3, binding -1
u6.@data: offset 0, type 1406, size 1, index 3, binding -1
cb1: offset 0, type 1404, size 1, index 4, binding -1
cb1: offset 0, type 1404, size 1, index 4, binding -1
tb1: offset 0, type 1404, size 1, index 5, binding -1
Uniform block reflection:
Uniform block reflection:
t4: offset -1, type ffffffff, size 0, index -1, binding 14
t4: offset -1, type ffffffff, size 0, index -1, binding 14
...
@@ -22,6 +23,7 @@ t5: offset -1, type ffffffff, size 0, index -1, binding 15
...
@@ -22,6 +23,7 @@ t5: offset -1, type ffffffff, size 0, index -1, binding 15
u5: offset -1, type ffffffff, size 0, index -1, binding 45
u5: offset -1, type ffffffff, size 0, index -1, binding 45
u6: offset -1, type ffffffff, size 0, index -1, binding 46
u6: offset -1, type ffffffff, size 0, index -1, binding 46
cb: offset -1, type ffffffff, size 4, index -1, binding 51
cb: offset -1, type ffffffff, size 4, index -1, binding 51
tb: offset -1, type ffffffff, size 4, index -1, binding 17
Vertex attribute reflection:
Vertex attribute reflection:
Test/baseResults/hlsl.buffer.frag.out
View file @
7b1dcd66
This diff is collapsed.
Click to expand it.
Test/baseResults/hlsl.layout.frag.out
View file @
7b1dcd66
...
@@ -12,23 +12,23 @@ gl_FragCoord origin is upper left
...
@@ -12,23 +12,23 @@ gl_FragCoord origin is upper left
0:17 add ( temp 4-component vector of float)
0:17 add ( temp 4-component vector of float)
0:17 'input' ( in 4-component vector of float)
0:17 'input' ( in 4-component vector of float)
0:17 v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17 v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17 'anon@0' (layout( set=3 binding=5 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:17 'anon@0' (layout( set=3 binding=5 row_major std430)
readonly
buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:17 Constant:
0:17 Constant:
0:17 0 (const uint)
0:17 0 (const uint)
0:17 v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
0:17 v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
0:17 'anon@1' (layout( row_major std430 push_constant) buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:17 'anon@1' (layout( row_major std430 push_constant)
readonly
buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:17 Constant:
0:17 Constant:
0:17 0 (const uint)
0:17 0 (const uint)
0:17 v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17 v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17 'anon@2' (layout( set=4 binding=7 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:17 'anon@2' (layout( set=4 binding=7 row_major std430)
readonly
buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:17 Constant:
0:17 Constant:
0:17 0 (const uint)
0:17 0 (const uint)
0:? Linker Objects
0:? Linker Objects
0:? 'anon@0' (layout( set=3 binding=5 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:? 'anon@0' (layout( set=3 binding=5 row_major std430)
readonly
buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:? 'anon@1' (layout( row_major std430 push_constant) buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:? 'anon@1' (layout( row_major std430 push_constant)
readonly
buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:? 'specConst' ( specialization-constant const int)
0:? 'specConst' ( specialization-constant const int)
0:? 10 (const int)
0:? 10 (const int)
0:? 'anon@2' (layout( set=4 binding=7 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:? 'anon@2' (layout( set=4 binding=7 row_major std430)
readonly
buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
Linked fragment stage:
Linked fragment stage:
...
@@ -48,23 +48,23 @@ gl_FragCoord origin is upper left
...
@@ -48,23 +48,23 @@ gl_FragCoord origin is upper left
0:17 add ( temp 4-component vector of float)
0:17 add ( temp 4-component vector of float)
0:17 'input' ( in 4-component vector of float)
0:17 'input' ( in 4-component vector of float)
0:17 v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17 v1: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17 'anon@0' (layout( set=3 binding=5 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:17 'anon@0' (layout( set=3 binding=5 row_major std430)
readonly
buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:17 Constant:
0:17 Constant:
0:17 0 (const uint)
0:17 0 (const uint)
0:17 v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
0:17 v5: direct index for structure (layout( row_major std430 offset=0) buffer 4-component vector of float)
0:17 'anon@1' (layout( row_major std430 push_constant) buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:17 'anon@1' (layout( row_major std430 push_constant)
readonly
buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:17 Constant:
0:17 Constant:
0:17 0 (const uint)
0:17 0 (const uint)
0:17 v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17 v1PostLayout: direct index for structure (layout( row_major std430 offset=16) buffer 4-component vector of float)
0:17 'anon@2' (layout( set=4 binding=7 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:17 'anon@2' (layout( set=4 binding=7 row_major std430)
readonly
buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:17 Constant:
0:17 Constant:
0:17 0 (const uint)
0:17 0 (const uint)
0:? Linker Objects
0:? Linker Objects
0:? 'anon@0' (layout( set=3 binding=5 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:? 'anon@0' (layout( set=3 binding=5 row_major std430)
readonly
buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1})
0:? 'anon@1' (layout( row_major std430 push_constant) buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:? 'anon@1' (layout( row_major std430 push_constant)
readonly
buffer block{layout( row_major std430 offset=0) buffer 4-component vector of float v5})
0:? 'specConst' ( specialization-constant const int)
0:? 'specConst' ( specialization-constant const int)
0:? 10 (const int)
0:? 10 (const int)
0:? 'anon@2' (layout( set=4 binding=7 row_major std430) buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
0:? 'anon@2' (layout( set=4 binding=7 row_major std430)
readonly
buffer block{layout( row_major std430 offset=16) buffer 4-component vector of float v1PostLayout})
// Module Version 10000
// Module Version 10000
// Generated by (magic number): 80001
// Generated by (magic number): 80001
...
@@ -89,12 +89,15 @@ gl_FragCoord origin is upper left
...
@@ -89,12 +89,15 @@ gl_FragCoord origin is upper left
MemberName 30(tbufName2) 0 "v1PostLayout"
MemberName 30(tbufName2) 0 "v1PostLayout"
Name 32 ""
Name 32 ""
Name 38 "specConst"
Name 38 "specConst"
MemberDecorate 14(tbufName) 0 NonWritable
MemberDecorate 14(tbufName) 0 Offset 16
MemberDecorate 14(tbufName) 0 Offset 16
Decorate 14(tbufName) BufferBlock
Decorate 14(tbufName) BufferBlock
Decorate 16 DescriptorSet 3
Decorate 16 DescriptorSet 3
Decorate 16 Binding 5
Decorate 16 Binding 5
MemberDecorate 23(tbufName2) 0 NonWritable
MemberDecorate 23(tbufName2) 0 Offset 0
MemberDecorate 23(tbufName2) 0 Offset 0
Decorate 23(tbufName2) BufferBlock
Decorate 23(tbufName2) BufferBlock
MemberDecorate 30(tbufName2) 0 NonWritable
MemberDecorate 30(tbufName2) 0 Offset 16
MemberDecorate 30(tbufName2) 0 Offset 16
Decorate 30(tbufName2) BufferBlock
Decorate 30(tbufName2) BufferBlock
Decorate 32 DescriptorSet 4
Decorate 32 DescriptorSet 4
...
...
Test/hlsl.automap.frag
View file @
7b1dcd66
...
@@ -24,9 +24,9 @@ cbuffer cb : register(b1) {
...
@@ -24,9 +24,9 @@ cbuffer cb : register(b1) {
int
cb1
;
int
cb1
;
};
};
//
tbuffer tb : register(t7) {
tbuffer
tb
:
register
(
t7
)
{
//
int tb1;
int
tb1
;
//
};
};
float4
main
()
:
SV_Target0
float4
main
()
:
SV_Target0
{
{
...
@@ -47,11 +47,11 @@ float4 main() : SV_Target0
...
@@ -47,11 +47,11 @@ float4 main() : SV_Target0
u4
[
0
];
u4
[
0
];
u5
.
Load
(
0
);
u5
.
Load
(
0
);
u6
[
0
];
u6
[
0
];
u7
[
0
]
;
u7
;
u8
[
0
]
;
u8
;
cb1
;
cb1
;
// tb1; TODO: wrong type?
tb1
;
return
0
;
return
0
;
}
}
glslang/MachineIndependent/ShaderLang.cpp
View file @
7b1dcd66
...
@@ -1555,14 +1555,23 @@ void TShader::setSourceEntryPoint(const char* name)
...
@@ -1555,14 +1555,23 @@ void TShader::setSourceEntryPoint(const char* name)
sourceEntryPointName
=
name
;
sourceEntryPointName
=
name
;
}
}
// Set binding base for sampler types
void
TShader
::
setShiftSamplerBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftSamplerBinding
(
base
);
}
void
TShader
::
setShiftSamplerBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftSamplerBinding
(
base
);
}
// Set binding base for texture types (SRV)
void
TShader
::
setShiftTextureBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftTextureBinding
(
base
);
}
void
TShader
::
setShiftTextureBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftTextureBinding
(
base
);
}
// Set binding base for image types
void
TShader
::
setShiftImageBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftImageBinding
(
base
);
}
void
TShader
::
setShiftImageBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftImageBinding
(
base
);
}
// Set binding base for uniform buffer objects (CBV)
void
TShader
::
setShiftUboBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftUboBinding
(
base
);
}
void
TShader
::
setShiftUboBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftUboBinding
(
base
);
}
// Synonym for setShiftUboBinding, to match HLSL language.
void
TShader
::
setShiftCbufferBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftUboBinding
(
base
);
}
void
TShader
::
setShiftCbufferBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftUboBinding
(
base
);
}
// Set binding base for UAV (unordered access view)
void
TShader
::
setShiftUavBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftUavBinding
(
base
);
}
void
TShader
::
setShiftUavBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftUavBinding
(
base
);
}
// Set binding base for SSBOs
void
TShader
::
setShiftSsboBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftSsboBinding
(
base
);
}
void
TShader
::
setShiftSsboBinding
(
unsigned
int
base
)
{
intermediate
->
setShiftSsboBinding
(
base
);
}
// Enables binding automapping using TIoMapper
void
TShader
::
setAutoMapBindings
(
bool
map
)
{
intermediate
->
setAutoMapBindings
(
map
);
}
void
TShader
::
setAutoMapBindings
(
bool
map
)
{
intermediate
->
setAutoMapBindings
(
map
);
}
// See comment above TDefaultHlslIoMapper in iomapper.cpp:
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
);
}
...
...
glslang/MachineIndependent/iomapper.cpp
View file @
7b1dcd66
...
@@ -491,6 +491,48 @@ protected:
...
@@ -491,6 +491,48 @@ protected:
}
}
};
};
/********************************************************************************
The following IO resolver maps types in HLSL register space, as follows:
t – for shader resource views (SRV)
TEXTURE1D
TEXTURE1DARRAY
TEXTURE2D
TEXTURE2DARRAY
TEXTURE3D
TEXTURECUBE
TEXTURECUBEARRAY
TEXTURE2DMS
TEXTURE2DMSARRAY
STRUCTUREDBUFFER
BYTEADDRESSBUFFER
BUFFER
TBUFFER
s – for samplers
SAMPLER
SAMPLER1D
SAMPLER2D
SAMPLER3D
SAMPLERCUBE
SAMPLERSTATE
SAMPLERCOMPARISONSTATE
u – for unordered access views (UAV)
RWBYTEADDRESSBUFFER
RWSTRUCTUREDBUFFER
APPENDSTRUCTUREDBUFFER
CONSUMESTRUCTUREDBUFFER
RWBUFFER
RWTEXTURE1D
RWTEXTURE1DARRAY
RWTEXTURE2D
RWTEXTURE2DARRAY
RWTEXTURE3D
b – for constant buffer views (CBV)
CBUFFER
********************************************************************************/
struct
TDefaultHlslIoResolver
:
public
TDefaultIoResolverBase
struct
TDefaultHlslIoResolver
:
public
TDefaultIoResolverBase
{
{
bool
validateBinding
(
EShLanguage
/*stage*/
,
const
char
*
/*name*/
,
const
glslang
::
TType
&
type
,
bool
/*is_live*/
)
override
bool
validateBinding
(
EShLanguage
/*stage*/
,
const
char
*
/*name*/
,
const
glslang
::
TType
&
type
,
bool
/*is_live*/
)
override
...
@@ -498,7 +540,6 @@ struct TDefaultHlslIoResolver : public TDefaultIoResolverBase
...
@@ -498,7 +540,6 @@ struct TDefaultHlslIoResolver : public TDefaultIoResolverBase
if
(
type
.
getQualifier
().
hasBinding
())
{
if
(
type
.
getQualifier
().
hasBinding
())
{
const
int
set
=
getLayoutSet
(
type
);
const
int
set
=
getLayoutSet
(
type
);
// Use Uav binding if requested: else will pass through to old behavior
if
(
isUavType
(
type
))
if
(
isUavType
(
type
))
return
checkEmpty
(
set
,
baseUavBinding
+
type
.
getQualifier
().
layoutBinding
);
return
checkEmpty
(
set
,
baseUavBinding
+
type
.
getQualifier
().
layoutBinding
);
...
...
hlsl/hlslGrammar.cpp
View file @
7b1dcd66
...
@@ -1846,13 +1846,16 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
...
@@ -1846,13 +1846,16 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
// This storage qualifier will tell us whether it's an AST
// This storage qualifier will tell us whether it's an AST
// block type or just a generic structure type.
// block type or just a generic structure type.
TStorageQualifier
storageQualifier
=
EvqTemporary
;
TStorageQualifier
storageQualifier
=
EvqTemporary
;
bool
readonly
=
false
;
// CBUFFER
// CBUFFER
if
(
acceptTokenClass
(
EHTokCBuffer
))
if
(
acceptTokenClass
(
EHTokCBuffer
))
{
storageQualifier
=
EvqUniform
;
storageQualifier
=
EvqUniform
;
// TBUFFER
// TBUFFER
else
if
(
acceptTokenClass
(
EHTokTBuffer
))
}
else
if
(
acceptTokenClass
(
EHTokTBuffer
))
{
storageQualifier
=
EvqBuffer
;
storageQualifier
=
EvqBuffer
;
readonly
=
true
;
}
// CLASS
// CLASS
// STRUCT
// STRUCT
else
if
(
!
acceptTokenClass
(
EHTokClass
)
&&
!
acceptTokenClass
(
EHTokStruct
))
else
if
(
!
acceptTokenClass
(
EHTokClass
)
&&
!
acceptTokenClass
(
EHTokStruct
))
...
@@ -1908,6 +1911,7 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
...
@@ -1908,6 +1911,7 @@ bool HlslGrammar::acceptStruct(TType& type, TIntermNode*& nodeList)
new
(
&
type
)
TType
(
typeList
,
structName
);
new
(
&
type
)
TType
(
typeList
,
structName
);
else
{
else
{
postDeclQualifier
.
storage
=
storageQualifier
;
postDeclQualifier
.
storage
=
storageQualifier
;
postDeclQualifier
.
readonly
=
readonly
;
new
(
&
type
)
TType
(
typeList
,
structName
,
postDeclQualifier
);
// sets EbtBlock
new
(
&
type
)
TType
(
typeList
,
structName
,
postDeclQualifier
);
// sets EbtBlock
}
}
...
...
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