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
21c53ecf
Commit
21c53ecf
authored
Mar 20, 2018
by
John Kessenich
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Nonuniform: add CapabilityShaderNonUniformEXT,…
Nonuniform: add CapabilityShaderNonUniformEXT, CapabilityRuntimeDescriptorArrayEXT, and "SPV_EXT_descriptor_indexing"
parent
4f840506
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
39 additions
and
12 deletions
+39
-12
GlslangToSpv.cpp
SPIRV/GlslangToSpv.cpp
+23
-12
doc.cpp
SPIRV/doc.cpp
+13
-0
spv.nonuniform.frag.out
Test/baseResults/spv.nonuniform.frag.out
+3
-0
No files found.
SPIRV/GlslangToSpv.cpp
View file @
21c53ecf
...
...
@@ -135,6 +135,7 @@ public:
protected
:
spv
::
Decoration
TranslateInterpolationDecoration
(
const
glslang
::
TQualifier
&
qualifier
);
spv
::
Decoration
TranslateAuxiliaryStorageDecoration
(
const
glslang
::
TQualifier
&
qualifier
);
spv
::
Decoration
TranslateNonUniformDecoration
(
const
glslang
::
TQualifier
&
qualifier
);
spv
::
BuiltIn
TranslateBuiltInDecoration
(
glslang
::
TBuiltInVariable
,
bool
memberDeclaration
);
spv
::
ImageFormat
TranslateImageFormat
(
const
glslang
::
TType
&
type
);
spv
::
SelectionControlMask
TranslateSelectionControl
(
const
glslang
::
TIntermSelection
&
)
const
;
...
...
@@ -147,7 +148,8 @@ protected:
spv
::
Id
createInvertedSwizzle
(
spv
::
Decoration
precision
,
const
glslang
::
TIntermTyped
&
,
spv
::
Id
parentResult
);
void
convertSwizzle
(
const
glslang
::
TIntermAggregate
&
,
std
::
vector
<
unsigned
>&
swizzle
);
spv
::
Id
convertGlslangToSpvType
(
const
glslang
::
TType
&
type
);
spv
::
Id
convertGlslangToSpvType
(
const
glslang
::
TType
&
type
,
glslang
::
TLayoutPacking
,
const
glslang
::
TQualifier
&
);
spv
::
Id
convertGlslangToSpvType
(
const
glslang
::
TType
&
type
,
glslang
::
TLayoutPacking
,
const
glslang
::
TQualifier
&
,
bool
lastBufferBlockMember
);
bool
filterMember
(
const
glslang
::
TType
&
member
);
spv
::
Id
convertGlslangStructToSpvType
(
const
glslang
::
TType
&
,
const
glslang
::
TTypeList
*
glslangStruct
,
glslang
::
TLayoutPacking
,
const
glslang
::
TQualifier
&
);
...
...
@@ -443,11 +445,13 @@ spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qual
}
// If glslang type is nonUniform, return SPIR-V NonUniform decoration.
spv
::
Decoration
TranslateNonUniformDecoration
(
const
glslang
::
TQualifier
&
qualifier
)
spv
::
Decoration
T
GlslangToSpvTraverser
::
T
ranslateNonUniformDecoration
(
const
glslang
::
TQualifier
&
qualifier
)
{
if
(
qualifier
.
isNonUniform
())
if
(
qualifier
.
isNonUniform
())
{
builder
.
addExtension
(
"SPV_EXT_descriptor_indexing"
);
builder
.
addCapability
(
spv
::
CapabilityShaderNonUniformEXT
);
return
spv
::
DecorationNonUniformEXT
;
else
}
else
return
spv
::
DecorationMax
;
}
...
...
@@ -2474,13 +2478,14 @@ void TGlslangToSpvTraverser::convertSwizzle(const glslang::TIntermAggregate& nod
// layout state rooted from the top-level type.
spv
::
Id
TGlslangToSpvTraverser
::
convertGlslangToSpvType
(
const
glslang
::
TType
&
type
)
{
return
convertGlslangToSpvType
(
type
,
getExplicitLayout
(
type
),
type
.
getQualifier
());
return
convertGlslangToSpvType
(
type
,
getExplicitLayout
(
type
),
type
.
getQualifier
()
,
false
);
}
// Do full recursive conversion of an arbitrary glslang type to a SPIR-V Id.
// explicitLayout can be kept the same throughout the hierarchical recursive walk.
// Mutually recursive with convertGlslangStructToSpvType().
spv
::
Id
TGlslangToSpvTraverser
::
convertGlslangToSpvType
(
const
glslang
::
TType
&
type
,
glslang
::
TLayoutPacking
explicitLayout
,
const
glslang
::
TQualifier
&
qualifier
)
spv
::
Id
TGlslangToSpvTraverser
::
convertGlslangToSpvType
(
const
glslang
::
TType
&
type
,
glslang
::
TLayoutPacking
explicitLayout
,
const
glslang
::
TQualifier
&
qualifier
,
bool
lastBufferBlockMember
)
{
spv
::
Id
spvType
=
spv
::
NoResult
;
...
...
@@ -2637,8 +2642,13 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
// (Unsized arrays that survive through linking will be runtime-sized arrays)
if
(
type
.
isSizedArray
())
spvType
=
builder
.
makeArrayType
(
spvType
,
makeArraySizeId
(
*
type
.
getArraySizes
(),
0
),
stride
);
else
else
{
if
(
!
lastBufferBlockMember
)
{
builder
.
addExtension
(
"SPV_EXT_descriptor_indexing"
);
builder
.
addCapability
(
spv
::
CapabilityRuntimeDescriptorArrayEXT
);
}
spvType
=
builder
.
makeRuntimeArray
(
spvType
);
}
if
(
stride
>
0
)
builder
.
addDecoration
(
spvType
,
spv
::
DecorationArrayStride
,
stride
);
}
...
...
@@ -2705,7 +2715,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy
memberQualifier
.
layoutLocation
=
qualifier
.
layoutLocation
;
// recurse
spvMembers
.
push_back
(
convertGlslangToSpvType
(
glslangMember
,
explicitLayout
,
memberQualifier
));
bool
lastBufferBlockMember
=
qualifier
.
storage
==
glslang
::
EvqBuffer
&&
i
==
(
int
)
glslangMembers
->
size
()
-
1
;
spvMembers
.
push_back
(
convertGlslangToSpvType
(
glslangMember
,
explicitLayout
,
memberQualifier
,
lastBufferBlockMember
));
}
}
...
...
@@ -2803,8 +2816,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
addMemberDecoration
(
spvType
,
member
,
spv
::
DecorationBuiltIn
,
(
int
)
builtIn
);
// nonuniform
if
(
glslangMember
.
getQualifier
().
isNonUniform
())
addMemberDecoration
(
spvType
,
member
,
spv
::
DecorationNonUniformEXT
);
addMemberDecoration
(
spvType
,
member
,
TranslateNonUniformDecoration
(
glslangMember
.
getQualifier
()));
#ifdef NV_EXTENSIONS
if
(
builtIn
==
spv
::
BuiltInLayer
)
{
...
...
@@ -6262,8 +6274,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
addDecoration
(
id
,
spv
::
DecorationBuiltIn
,
(
int
)
builtIn
);
// nonuniform
if
(
symbol
->
getType
().
getQualifier
().
isNonUniform
())
addDecoration
(
id
,
spv
::
DecorationNonUniformEXT
);
addDecoration
(
id
,
TranslateNonUniformDecoration
(
symbol
->
getType
().
getQualifier
()));
#ifdef NV_EXTENSIONS
if
(
builtIn
==
spv
::
BuiltInSampleMask
)
{
...
...
SPIRV/doc.cpp
View file @
21c53ecf
...
...
@@ -879,6 +879,19 @@ const char* CapabilityString(int info)
case
5265
:
return
"FragmentFullyCoveredEXT"
;
case
CapabilityShaderNonUniformEXT
:
return
"CapabilityShaderNonUniformEXT"
;
case
CapabilityRuntimeDescriptorArrayEXT
:
return
"CapabilityRuntimeDescriptorArrayEXT"
;
case
CapabilityInputAttachmentArrayDynamicIndexingEXT
:
return
"CapabilityInputAttachmentArrayDynamicIndexingEXT"
;
case
CapabilityUniformTexelBufferArrayDynamicIndexingEXT
:
return
"CapabilityUniformTexelBufferArrayDynamicIndexingEXT"
;
case
CapabilityStorageTexelBufferArrayDynamicIndexingEXT
:
return
"CapabilityStorageTexelBufferArrayDynamicIndexingEXT"
;
case
CapabilityUniformBufferArrayNonUniformIndexingEXT
:
return
"CapabilityUniformBufferArrayNonUniformIndexingEXT"
;
case
CapabilitySampledImageArrayNonUniformIndexingEXT
:
return
"CapabilitySampledImageArrayNonUniformIndexingEXT"
;
case
CapabilityStorageBufferArrayNonUniformIndexingEXT
:
return
"CapabilityStorageBufferArrayNonUniformIndexingEXT"
;
case
CapabilityStorageImageArrayNonUniformIndexingEXT
:
return
"CapabilityStorageImageArrayNonUniformIndexingEXT"
;
case
CapabilityInputAttachmentArrayNonUniformIndexingEXT
:
return
"CapabilityInputAttachmentArrayNonUniformIndexingEXT"
;
case
CapabilityUniformTexelBufferArrayNonUniformIndexingEXT
:
return
"CapabilityUniformTexelBufferArrayNonUniformIndexingEXT"
;
case
CapabilityStorageTexelBufferArrayNonUniformIndexingEXT
:
return
"CapabilityStorageTexelBufferArrayNonUniformIndexingEXT"
;
case
CapabilityCeiling
:
default:
return
"Bad"
;
}
...
...
Test/baseResults/spv.nonuniform.frag.out
View file @
21c53ecf
...
...
@@ -6,6 +6,9 @@ WARNING: 0:8: '[]' : assuming array size of one for compile-time checking of bin
// Id's are bound by 57
Capability Shader
Capability CapabilityShaderNonUniformEXT
Capability CapabilityRuntimeDescriptorArrayEXT
Extension "SPV_EXT_descriptor_indexing"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 33 48
...
...
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