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
24ed24dd
Commit
24ed24dd
authored
Jan 26, 2017
by
John Kessenich
Committed by
GitHub
Jan 26, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #702 from resetnow/master
SpvBuilder: add const specifier to vector reference arguments
parents
72754864
689490fd
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
23 deletions
+24
-23
SpvBuilder.cpp
SPIRV/SpvBuilder.cpp
+12
-11
SpvBuilder.h
SPIRV/SpvBuilder.h
+12
-12
No files found.
SPIRV/SpvBuilder.cpp
View file @
24ed24dd
...
@@ -819,7 +819,7 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant)
...
@@ -819,7 +819,7 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant)
}
}
#endif
#endif
Id
Builder
::
findCompositeConstant
(
Op
typeClass
,
std
::
vector
<
Id
>&
comps
)
const
Id
Builder
::
findCompositeConstant
(
Op
typeClass
,
const
std
::
vector
<
Id
>&
comps
)
const
{
{
Instruction
*
constant
=
0
;
Instruction
*
constant
=
0
;
bool
found
=
false
;
bool
found
=
false
;
...
@@ -848,7 +848,7 @@ Id Builder::findCompositeConstant(Op typeClass, std::vector<Id>& comps) const
...
@@ -848,7 +848,7 @@ Id Builder::findCompositeConstant(Op typeClass, std::vector<Id>& comps) const
}
}
// Comments in header
// Comments in header
Id
Builder
::
makeCompositeConstant
(
Id
typeId
,
std
::
vector
<
Id
>&
members
,
bool
specConstant
)
Id
Builder
::
makeCompositeConstant
(
Id
typeId
,
const
std
::
vector
<
Id
>&
members
,
bool
specConstant
)
{
{
Op
opcode
=
specConstant
?
OpSpecConstantComposite
:
OpConstantComposite
;
Op
opcode
=
specConstant
?
OpSpecConstantComposite
:
OpConstantComposite
;
assert
(
typeId
);
assert
(
typeId
);
...
@@ -1098,7 +1098,7 @@ Id Builder::createLoad(Id lValue)
...
@@ -1098,7 +1098,7 @@ Id Builder::createLoad(Id lValue)
}
}
// Comments in header
// Comments in header
Id
Builder
::
createAccessChain
(
StorageClass
storageClass
,
Id
base
,
std
::
vector
<
Id
>&
offsets
)
Id
Builder
::
createAccessChain
(
StorageClass
storageClass
,
Id
base
,
const
std
::
vector
<
Id
>&
offsets
)
{
{
// Figure out the final resulting type.
// Figure out the final resulting type.
spv
::
Id
typeId
=
getTypeId
(
base
);
spv
::
Id
typeId
=
getTypeId
(
base
);
...
@@ -1148,7 +1148,7 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, unsigned index)
...
@@ -1148,7 +1148,7 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, unsigned index)
return
extract
->
getResultId
();
return
extract
->
getResultId
();
}
}
Id
Builder
::
createCompositeExtract
(
Id
composite
,
Id
typeId
,
std
::
vector
<
unsigned
>&
indexes
)
Id
Builder
::
createCompositeExtract
(
Id
composite
,
Id
typeId
,
const
std
::
vector
<
unsigned
>&
indexes
)
{
{
// Generate code for spec constants if in spec constant operation
// Generate code for spec constants if in spec constant operation
// generation mode.
// generation mode.
...
@@ -1175,7 +1175,7 @@ Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, unsigned i
...
@@ -1175,7 +1175,7 @@ Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, unsigned i
return
insert
->
getResultId
();
return
insert
->
getResultId
();
}
}
Id
Builder
::
createCompositeInsert
(
Id
object
,
Id
composite
,
Id
typeId
,
std
::
vector
<
unsigned
>&
indexes
)
Id
Builder
::
createCompositeInsert
(
Id
object
,
Id
composite
,
Id
typeId
,
const
std
::
vector
<
unsigned
>&
indexes
)
{
{
Instruction
*
insert
=
new
Instruction
(
getUniqueId
(),
typeId
,
OpCompositeInsert
);
Instruction
*
insert
=
new
Instruction
(
getUniqueId
(),
typeId
,
OpCompositeInsert
);
insert
->
addIdOperand
(
object
);
insert
->
addIdOperand
(
object
);
...
@@ -1326,7 +1326,7 @@ Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector<Id>& op
...
@@ -1326,7 +1326,7 @@ Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector<Id>& op
return
op
->
getResultId
();
return
op
->
getResultId
();
}
}
Id
Builder
::
createFunctionCall
(
spv
::
Function
*
function
,
std
::
vector
<
spv
::
Id
>&
args
)
Id
Builder
::
createFunctionCall
(
spv
::
Function
*
function
,
const
std
::
vector
<
spv
::
Id
>&
args
)
{
{
Instruction
*
op
=
new
Instruction
(
getUniqueId
(),
function
->
getReturnType
(),
OpFunctionCall
);
Instruction
*
op
=
new
Instruction
(
getUniqueId
(),
function
->
getReturnType
(),
OpFunctionCall
);
op
->
addIdOperand
(
function
->
getId
());
op
->
addIdOperand
(
function
->
getId
());
...
@@ -1338,7 +1338,7 @@ Id Builder::createFunctionCall(spv::Function* function, std::vector<spv::Id>& ar
...
@@ -1338,7 +1338,7 @@ Id Builder::createFunctionCall(spv::Function* function, std::vector<spv::Id>& ar
}
}
// Comments in header
// Comments in header
Id
Builder
::
createRvalueSwizzle
(
Decoration
precision
,
Id
typeId
,
Id
source
,
std
::
vector
<
unsigned
>&
channels
)
Id
Builder
::
createRvalueSwizzle
(
Decoration
precision
,
Id
typeId
,
Id
source
,
const
std
::
vector
<
unsigned
>&
channels
)
{
{
if
(
channels
.
size
()
==
1
)
if
(
channels
.
size
()
==
1
)
return
setPrecision
(
createCompositeExtract
(
source
,
typeId
,
channels
.
front
()),
precision
);
return
setPrecision
(
createCompositeExtract
(
source
,
typeId
,
channels
.
front
()),
precision
);
...
@@ -1360,7 +1360,7 @@ Id Builder::createRvalueSwizzle(Decoration precision, Id typeId, Id source, std:
...
@@ -1360,7 +1360,7 @@ Id Builder::createRvalueSwizzle(Decoration precision, Id typeId, Id source, std:
}
}
// Comments in header
// Comments in header
Id
Builder
::
createLvalueSwizzle
(
Id
typeId
,
Id
target
,
Id
source
,
std
::
vector
<
unsigned
>&
channels
)
Id
Builder
::
createLvalueSwizzle
(
Id
typeId
,
Id
target
,
Id
source
,
const
std
::
vector
<
unsigned
>&
channels
)
{
{
if
(
channels
.
size
()
==
1
&&
getNumComponents
(
source
)
==
1
)
if
(
channels
.
size
()
==
1
&&
getNumComponents
(
source
)
==
1
)
return
createCompositeInsert
(
source
,
target
,
typeId
,
channels
.
front
());
return
createCompositeInsert
(
source
,
target
,
typeId
,
channels
.
front
());
...
@@ -1446,7 +1446,7 @@ Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType)
...
@@ -1446,7 +1446,7 @@ Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType)
}
}
// Comments in header
// Comments in header
Id
Builder
::
createBuiltinCall
(
Id
resultType
,
Id
builtins
,
int
entryPoint
,
std
::
vector
<
Id
>&
args
)
Id
Builder
::
createBuiltinCall
(
Id
resultType
,
Id
builtins
,
int
entryPoint
,
const
std
::
vector
<
Id
>&
args
)
{
{
Instruction
*
inst
=
new
Instruction
(
getUniqueId
(),
resultType
,
OpExtInst
);
Instruction
*
inst
=
new
Instruction
(
getUniqueId
(),
resultType
,
OpExtInst
);
inst
->
addIdOperand
(
builtins
);
inst
->
addIdOperand
(
builtins
);
...
@@ -1794,7 +1794,7 @@ Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, b
...
@@ -1794,7 +1794,7 @@ Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, b
}
}
// OpCompositeConstruct
// OpCompositeConstruct
Id
Builder
::
createCompositeConstruct
(
Id
typeId
,
std
::
vector
<
Id
>&
constituents
)
Id
Builder
::
createCompositeConstruct
(
Id
typeId
,
const
std
::
vector
<
Id
>&
constituents
)
{
{
assert
(
isAggregateType
(
typeId
)
||
(
getNumTypeConstituents
(
typeId
)
>
1
&&
getNumTypeConstituents
(
typeId
)
==
(
int
)
constituents
.
size
()));
assert
(
isAggregateType
(
typeId
)
||
(
getNumTypeConstituents
(
typeId
)
>
1
&&
getNumTypeConstituents
(
typeId
)
==
(
int
)
constituents
.
size
()));
...
@@ -2011,7 +2011,8 @@ void Builder::If::makeEndIf()
...
@@ -2011,7 +2011,8 @@ void Builder::If::makeEndIf()
}
}
// Comments in header
// Comments in header
void
Builder
::
makeSwitch
(
Id
selector
,
int
numSegments
,
std
::
vector
<
int
>&
caseValues
,
std
::
vector
<
int
>&
valueIndexToSegment
,
int
defaultSegment
,
void
Builder
::
makeSwitch
(
Id
selector
,
int
numSegments
,
const
std
::
vector
<
int
>&
caseValues
,
const
std
::
vector
<
int
>&
valueIndexToSegment
,
int
defaultSegment
,
std
::
vector
<
Block
*>&
segmentBlocks
)
std
::
vector
<
Block
*>&
segmentBlocks
)
{
{
Function
&
function
=
buildPoint
->
getParent
();
Function
&
function
=
buildPoint
->
getParent
();
...
...
SPIRV/SpvBuilder.h
View file @
24ed24dd
...
@@ -196,7 +196,7 @@ public:
...
@@ -196,7 +196,7 @@ public:
#endif
#endif
// Turn the array of constants into a proper spv constant of the requested type.
// Turn the array of constants into a proper spv constant of the requested type.
Id
makeCompositeConstant
(
Id
type
,
std
::
vector
<
Id
>&
comps
,
bool
specConst
=
false
);
Id
makeCompositeConstant
(
Id
type
,
const
std
::
vector
<
Id
>&
comps
,
bool
specConst
=
false
);
// Methods for adding information outside the CFG.
// Methods for adding information outside the CFG.
Instruction
*
addEntryPoint
(
ExecutionModel
,
Function
*
,
const
char
*
name
);
Instruction
*
addEntryPoint
(
ExecutionModel
,
Function
*
,
const
char
*
name
);
...
@@ -244,16 +244,16 @@ public:
...
@@ -244,16 +244,16 @@ public:
Id
createLoad
(
Id
lValue
);
Id
createLoad
(
Id
lValue
);
// Create an OpAccessChain instruction
// Create an OpAccessChain instruction
Id
createAccessChain
(
StorageClass
,
Id
base
,
std
::
vector
<
Id
>&
offsets
);
Id
createAccessChain
(
StorageClass
,
Id
base
,
const
std
::
vector
<
Id
>&
offsets
);
// Create an OpArrayLength instruction
// Create an OpArrayLength instruction
Id
createArrayLength
(
Id
base
,
unsigned
int
member
);
Id
createArrayLength
(
Id
base
,
unsigned
int
member
);
// Create an OpCompositeExtract instruction
// Create an OpCompositeExtract instruction
Id
createCompositeExtract
(
Id
composite
,
Id
typeId
,
unsigned
index
);
Id
createCompositeExtract
(
Id
composite
,
Id
typeId
,
unsigned
index
);
Id
createCompositeExtract
(
Id
composite
,
Id
typeId
,
std
::
vector
<
unsigned
>&
indexes
);
Id
createCompositeExtract
(
Id
composite
,
Id
typeId
,
const
std
::
vector
<
unsigned
>&
indexes
);
Id
createCompositeInsert
(
Id
object
,
Id
composite
,
Id
typeId
,
unsigned
index
);
Id
createCompositeInsert
(
Id
object
,
Id
composite
,
Id
typeId
,
unsigned
index
);
Id
createCompositeInsert
(
Id
object
,
Id
composite
,
Id
typeId
,
std
::
vector
<
unsigned
>&
indexes
);
Id
createCompositeInsert
(
Id
object
,
Id
composite
,
Id
typeId
,
const
std
::
vector
<
unsigned
>&
indexes
);
Id
createVectorExtractDynamic
(
Id
vector
,
Id
typeId
,
Id
componentIndex
);
Id
createVectorExtractDynamic
(
Id
vector
,
Id
typeId
,
Id
componentIndex
);
Id
createVectorInsertDynamic
(
Id
vector
,
Id
typeId
,
Id
component
,
Id
componentIndex
);
Id
createVectorInsertDynamic
(
Id
vector
,
Id
typeId
,
Id
component
,
Id
componentIndex
);
...
@@ -267,18 +267,18 @@ public:
...
@@ -267,18 +267,18 @@ public:
Id
createBinOp
(
Op
,
Id
typeId
,
Id
operand1
,
Id
operand2
);
Id
createBinOp
(
Op
,
Id
typeId
,
Id
operand1
,
Id
operand2
);
Id
createTriOp
(
Op
,
Id
typeId
,
Id
operand1
,
Id
operand2
,
Id
operand3
);
Id
createTriOp
(
Op
,
Id
typeId
,
Id
operand1
,
Id
operand2
,
Id
operand3
);
Id
createOp
(
Op
,
Id
typeId
,
const
std
::
vector
<
Id
>&
operands
);
Id
createOp
(
Op
,
Id
typeId
,
const
std
::
vector
<
Id
>&
operands
);
Id
createFunctionCall
(
spv
::
Function
*
,
std
::
vector
<
spv
::
Id
>&
);
Id
createFunctionCall
(
spv
::
Function
*
,
const
std
::
vector
<
spv
::
Id
>&
);
Id
createSpecConstantOp
(
Op
,
Id
typeId
,
const
std
::
vector
<
spv
::
Id
>&
operands
,
const
std
::
vector
<
unsigned
>&
literals
);
Id
createSpecConstantOp
(
Op
,
Id
typeId
,
const
std
::
vector
<
spv
::
Id
>&
operands
,
const
std
::
vector
<
unsigned
>&
literals
);
// Take an rvalue (source) and a set of channels to extract from it to
// Take an rvalue (source) and a set of channels to extract from it to
// make a new rvalue, which is returned.
// make a new rvalue, which is returned.
Id
createRvalueSwizzle
(
Decoration
precision
,
Id
typeId
,
Id
source
,
std
::
vector
<
unsigned
>&
channels
);
Id
createRvalueSwizzle
(
Decoration
precision
,
Id
typeId
,
Id
source
,
const
std
::
vector
<
unsigned
>&
channels
);
// Take a copy of an lvalue (target) and a source of components, and set the
// Take a copy of an lvalue (target) and a source of components, and set the
// source components into the lvalue where the 'channels' say to put them.
// source components into the lvalue where the 'channels' say to put them.
// An updated version of the target is returned.
// An updated version of the target is returned.
// (No true lvalue or stores are used.)
// (No true lvalue or stores are used.)
Id
createLvalueSwizzle
(
Id
typeId
,
Id
target
,
Id
source
,
std
::
vector
<
unsigned
>&
channels
);
Id
createLvalueSwizzle
(
Id
typeId
,
Id
target
,
Id
source
,
const
std
::
vector
<
unsigned
>&
channels
);
// If both the id and precision are valid, the id
// If both the id and precision are valid, the id
// gets tagged with the requested precision.
// gets tagged with the requested precision.
...
@@ -311,7 +311,7 @@ public:
...
@@ -311,7 +311,7 @@ public:
Id
smearScalar
(
Decoration
precision
,
Id
scalarVal
,
Id
vectorType
);
Id
smearScalar
(
Decoration
precision
,
Id
scalarVal
,
Id
vectorType
);
// Create a call to a built-in function.
// Create a call to a built-in function.
Id
createBuiltinCall
(
Id
resultType
,
Id
builtins
,
int
entryPoint
,
std
::
vector
<
Id
>&
args
);
Id
createBuiltinCall
(
Id
resultType
,
Id
builtins
,
int
entryPoint
,
const
std
::
vector
<
Id
>&
args
);
// List of parameters used to create a texture operation
// List of parameters used to create a texture operation
struct
TextureParameters
{
struct
TextureParameters
{
...
@@ -346,7 +346,7 @@ public:
...
@@ -346,7 +346,7 @@ public:
Id
createCompositeCompare
(
Decoration
precision
,
Id
,
Id
,
bool
/* true if for equal, false if for not-equal */
);
Id
createCompositeCompare
(
Decoration
precision
,
Id
,
Id
,
bool
/* true if for equal, false if for not-equal */
);
// OpCompositeConstruct
// OpCompositeConstruct
Id
createCompositeConstruct
(
Id
typeId
,
std
::
vector
<
Id
>&
constituents
);
Id
createCompositeConstruct
(
Id
typeId
,
const
std
::
vector
<
Id
>&
constituents
);
// vector or scalar constructor
// vector or scalar constructor
Id
createConstructor
(
Decoration
precision
,
const
std
::
vector
<
Id
>&
sources
,
Id
resultTypeId
);
Id
createConstructor
(
Decoration
precision
,
const
std
::
vector
<
Id
>&
sources
,
Id
resultTypeId
);
...
@@ -388,8 +388,8 @@ public:
...
@@ -388,8 +388,8 @@ public:
// Returns the right set of basic blocks to start each code segment with, so that the caller's
// Returns the right set of basic blocks to start each code segment with, so that the caller's
// recursion stack can hold the memory for it.
// recursion stack can hold the memory for it.
//
//
void
makeSwitch
(
Id
condition
,
int
numSegments
,
std
::
vector
<
int
>&
caseValues
,
std
::
vector
<
int
>&
valueToSegment
,
int
defaultSegment
,
void
makeSwitch
(
Id
condition
,
int
numSegments
,
const
std
::
vector
<
int
>&
caseValues
,
std
::
vector
<
Block
*>&
segmentBB
);
// return argument
const
std
::
vector
<
int
>&
valueToSegment
,
int
defaultSegment
,
std
::
vector
<
Block
*>&
segmentBB
);
// return argument
// Add a branch to the innermost switch's merge block.
// Add a branch to the innermost switch's merge block.
void
addSwitchBreak
();
void
addSwitchBreak
();
...
@@ -545,7 +545,7 @@ public:
...
@@ -545,7 +545,7 @@ public:
Id
makeInt64Constant
(
Id
typeId
,
unsigned
long
long
value
,
bool
specConstant
);
Id
makeInt64Constant
(
Id
typeId
,
unsigned
long
long
value
,
bool
specConstant
);
Id
findScalarConstant
(
Op
typeClass
,
Op
opcode
,
Id
typeId
,
unsigned
value
)
const
;
Id
findScalarConstant
(
Op
typeClass
,
Op
opcode
,
Id
typeId
,
unsigned
value
)
const
;
Id
findScalarConstant
(
Op
typeClass
,
Op
opcode
,
Id
typeId
,
unsigned
v1
,
unsigned
v2
)
const
;
Id
findScalarConstant
(
Op
typeClass
,
Op
opcode
,
Id
typeId
,
unsigned
v1
,
unsigned
v2
)
const
;
Id
findCompositeConstant
(
Op
typeClass
,
std
::
vector
<
Id
>&
comps
)
const
;
Id
findCompositeConstant
(
Op
typeClass
,
const
std
::
vector
<
Id
>&
comps
)
const
;
Id
collapseAccessChain
();
Id
collapseAccessChain
();
void
transferAccessChainSwizzle
(
bool
dynamic
);
void
transferAccessChainSwizzle
(
bool
dynamic
);
void
simplifyAccessChainSwizzle
();
void
simplifyAccessChainSwizzle
();
...
...
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