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
69670380
Unverified
Commit
69670380
authored
Oct 11, 2019
by
John Kessenich
Committed by
GitHub
Oct 11, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1888 from Roy-AMD/Adjusting-code-interface
Adjusting code interface
parents
f99beb50
35dabea7
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
89 additions
and
73 deletions
+89
-73
Types.h
glslang/Include/Types.h
+4
-1
intermediate.h
glslang/Include/intermediate.h
+1
-0
Intermediate.cpp
glslang/MachineIndependent/Intermediate.cpp
+78
-70
localintermediate.h
glslang/MachineIndependent/localintermediate.h
+3
-1
ShaderLang.h
glslang/Public/ShaderLang.h
+3
-1
No files found.
glslang/Include/Types.h
View file @
69670380
...
...
@@ -135,6 +135,8 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
bool
isYuv
()
const
{
return
yuv
;
}
#endif
void
setCombined
(
bool
c
)
{
combined
=
c
;
}
void
setBasicType
(
TBasicType
t
)
{
type
=
t
;
};
TBasicType
getBasicType
()
const
{
return
type
;
};
bool
isShadow
()
const
{
return
shadow
;
}
bool
isArrayed
()
const
{
return
arrayed
;
}
...
...
@@ -2193,7 +2195,8 @@ public:
const
TTypeList
*
getStruct
()
const
{
assert
(
isStruct
());
return
structure
;
}
void
setStruct
(
TTypeList
*
s
)
{
assert
(
isStruct
());
structure
=
s
;
}
TTypeList
*
getWritableStruct
()
const
{
assert
(
isStruct
());
return
structure
;
}
// This should only be used when known to not be sharing with other threads
void
setBasicType
(
const
TBasicType
&
t
)
{
basicType
=
t
;
}
int
computeNumComponents
()
const
{
int
components
=
0
;
...
...
glslang/Include/intermediate.h
View file @
69670380
...
...
@@ -1189,6 +1189,7 @@ public:
virtual
void
traverse
(
TIntermTraverser
*
);
TOperator
getFlowOp
()
const
{
return
flowOp
;
}
TIntermTyped
*
getExpression
()
const
{
return
expression
;
}
void
setExpression
(
TIntermTyped
*
pExpression
)
{
expression
=
pExpression
;
}
protected
:
TOperator
flowOp
;
TIntermTyped
*
expression
;
...
...
glslang/MachineIndependent/Intermediate.cpp
View file @
69670380
...
...
@@ -562,56 +562,12 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const
return
true
;
}
// This is 'mechanism' here, it does any conversion told.
// It is about basic type, not about shape.
// The policy comes from the shader or the calling code.
TIntermTyped
*
TIntermediate
::
createConversion
(
TBasicType
convertTo
,
TIntermTyped
*
node
)
const
bool
TIntermediate
::
buildConvertOp
(
TBasicType
dst
,
TBasicType
src
,
TOperator
&
newOp
)
const
{
//
// Add a new newNode for the conversion.
//
TIntermUnary
*
newNode
=
nullptr
;
TOperator
newOp
=
EOpNull
;
bool
convertToIntTypes
=
(
convertTo
==
EbtInt8
||
convertTo
==
EbtUint8
||
convertTo
==
EbtInt16
||
convertTo
==
EbtUint16
||
convertTo
==
EbtInt
||
convertTo
==
EbtUint
||
convertTo
==
EbtInt64
||
convertTo
==
EbtUint64
);
bool
convertFromIntTypes
=
(
node
->
getBasicType
()
==
EbtInt8
||
node
->
getBasicType
()
==
EbtUint8
||
node
->
getBasicType
()
==
EbtInt16
||
node
->
getBasicType
()
==
EbtUint16
||
node
->
getBasicType
()
==
EbtInt
||
node
->
getBasicType
()
==
EbtUint
||
node
->
getBasicType
()
==
EbtInt64
||
node
->
getBasicType
()
==
EbtUint64
);
bool
convertToFloatTypes
=
(
convertTo
==
EbtFloat16
||
convertTo
==
EbtFloat
||
convertTo
==
EbtDouble
);
bool
convertFromFloatTypes
=
(
node
->
getBasicType
()
==
EbtFloat16
||
node
->
getBasicType
()
==
EbtFloat
||
node
->
getBasicType
()
==
EbtDouble
);
if
(
!
getArithemeticInt8Enabled
())
{
if
(((
convertTo
==
EbtInt8
||
convertTo
==
EbtUint8
)
&&
!
convertFromIntTypes
)
||
((
node
->
getBasicType
()
==
EbtInt8
||
node
->
getBasicType
()
==
EbtUint8
)
&&
!
convertToIntTypes
))
return
nullptr
;
}
if
(
!
getArithemeticInt16Enabled
())
{
if
(((
convertTo
==
EbtInt16
||
convertTo
==
EbtUint16
)
&&
!
convertFromIntTypes
)
||
((
node
->
getBasicType
()
==
EbtInt16
||
node
->
getBasicType
()
==
EbtUint16
)
&&
!
convertToIntTypes
))
return
nullptr
;
}
if
(
!
getArithemeticFloat16Enabled
())
{
if
((
convertTo
==
EbtFloat16
&&
!
convertFromFloatTypes
)
||
(
node
->
getBasicType
()
==
EbtFloat16
&&
!
convertToFloatTypes
))
return
nullptr
;
}
switch
(
convertTo
)
{
switch
(
dst
)
{
#ifndef GLSLANG_WEB
case
EbtDouble
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtUint
:
newOp
=
EOpConvUintToDouble
;
break
;
case
EbtBool
:
newOp
=
EOpConvBoolToDouble
;
break
;
case
EbtFloat
:
newOp
=
EOpConvFloatToDouble
;
break
;
...
...
@@ -624,12 +580,12 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtInt64
:
newOp
=
EOpConvInt64ToDouble
;
break
;
case
EbtUint64
:
newOp
=
EOpConvUint64ToDouble
;
break
;
default
:
return
nullptr
;
return
false
;
}
break
;
#endif
case
EbtFloat
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtInt
:
newOp
=
EOpConvIntToFloat
;
break
;
case
EbtUint
:
newOp
=
EOpConvUintToFloat
;
break
;
case
EbtBool
:
newOp
=
EOpConvBoolToFloat
;
break
;
...
...
@@ -644,12 +600,12 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtUint64
:
newOp
=
EOpConvUint64ToFloat
;
break
;
#endif
default
:
return
nullptr
;
return
false
;
}
break
;
#ifndef GLSLANG_WEB
case
EbtFloat16
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtInt8
:
newOp
=
EOpConvInt8ToFloat16
;
break
;
case
EbtUint8
:
newOp
=
EOpConvUint8ToFloat16
;
break
;
case
EbtInt16
:
newOp
=
EOpConvInt16ToFloat16
;
break
;
...
...
@@ -662,12 +618,12 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtInt64
:
newOp
=
EOpConvInt64ToFloat16
;
break
;
case
EbtUint64
:
newOp
=
EOpConvUint64ToFloat16
;
break
;
default
:
return
nullptr
;
return
false
;
}
break
;
#endif
case
EbtBool
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtInt
:
newOp
=
EOpConvIntToBool
;
break
;
case
EbtUint
:
newOp
=
EOpConvUintToBool
;
break
;
case
EbtFloat
:
newOp
=
EOpConvFloatToBool
;
break
;
...
...
@@ -682,12 +638,12 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtUint64
:
newOp
=
EOpConvUint64ToBool
;
break
;
#endif
default
:
return
nullptr
;
return
false
;
}
break
;
#ifndef GLSLANG_WEB
case
EbtInt8
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtUint8
:
newOp
=
EOpConvUint8ToInt8
;
break
;
case
EbtInt16
:
newOp
=
EOpConvInt16ToInt8
;
break
;
case
EbtUint16
:
newOp
=
EOpConvUint16ToInt8
;
break
;
...
...
@@ -700,11 +656,11 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtDouble
:
newOp
=
EOpConvDoubleToInt8
;
break
;
case
EbtFloat16
:
newOp
=
EOpConvFloat16ToInt8
;
break
;
default
:
return
nullptr
;
return
false
;
}
break
;
case
EbtUint8
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtInt8
:
newOp
=
EOpConvInt8ToUint8
;
break
;
case
EbtInt16
:
newOp
=
EOpConvInt16ToUint8
;
break
;
case
EbtUint16
:
newOp
=
EOpConvUint16ToUint8
;
break
;
...
...
@@ -717,12 +673,12 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtDouble
:
newOp
=
EOpConvDoubleToUint8
;
break
;
case
EbtFloat16
:
newOp
=
EOpConvFloat16ToUint8
;
break
;
default
:
return
nullptr
;
return
false
;
}
break
;
case
EbtInt16
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtUint8
:
newOp
=
EOpConvUint8ToInt16
;
break
;
case
EbtInt8
:
newOp
=
EOpConvInt8ToInt16
;
break
;
case
EbtUint16
:
newOp
=
EOpConvUint16ToInt16
;
break
;
...
...
@@ -735,11 +691,11 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtDouble
:
newOp
=
EOpConvDoubleToInt16
;
break
;
case
EbtFloat16
:
newOp
=
EOpConvFloat16ToInt16
;
break
;
default
:
return
nullptr
;
return
false
;
}
break
;
case
EbtUint16
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtInt8
:
newOp
=
EOpConvInt8ToUint16
;
break
;
case
EbtUint8
:
newOp
=
EOpConvUint8ToUint16
;
break
;
case
EbtInt16
:
newOp
=
EOpConvInt16ToUint16
;
break
;
...
...
@@ -752,13 +708,13 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtDouble
:
newOp
=
EOpConvDoubleToUint16
;
break
;
case
EbtFloat16
:
newOp
=
EOpConvFloat16ToUint16
;
break
;
default
:
return
nullptr
;
return
false
;
}
break
;
#endif
case
EbtInt
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtUint
:
newOp
=
EOpConvUintToInt
;
break
;
case
EbtBool
:
newOp
=
EOpConvBoolToInt
;
break
;
case
EbtFloat
:
newOp
=
EOpConvFloatToInt
;
break
;
...
...
@@ -773,11 +729,11 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtUint64
:
newOp
=
EOpConvUint64ToInt
;
break
;
#endif
default
:
return
nullptr
;
return
false
;
}
break
;
case
EbtUint
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtInt
:
newOp
=
EOpConvIntToUint
;
break
;
case
EbtBool
:
newOp
=
EOpConvBoolToUint
;
break
;
case
EbtFloat
:
newOp
=
EOpConvFloatToUint
;
break
;
...
...
@@ -792,12 +748,12 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtUint64
:
newOp
=
EOpConvUint64ToUint
;
break
;
#endif
default
:
return
nullptr
;
return
false
;
}
break
;
#ifndef GLSLANG_WEB
case
EbtInt64
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtInt8
:
newOp
=
EOpConvInt8ToInt64
;
break
;
case
EbtUint8
:
newOp
=
EOpConvUint8ToInt64
;
break
;
case
EbtInt16
:
newOp
=
EOpConvInt16ToInt64
;
break
;
...
...
@@ -810,11 +766,11 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtFloat16
:
newOp
=
EOpConvFloat16ToInt64
;
break
;
case
EbtUint64
:
newOp
=
EOpConvUint64ToInt64
;
break
;
default
:
return
nullptr
;
return
false
;
}
break
;
case
EbtUint64
:
switch
(
node
->
getBasicType
()
)
{
switch
(
src
)
{
case
EbtInt8
:
newOp
=
EOpConvInt8ToUint64
;
break
;
case
EbtUint8
:
newOp
=
EOpConvUint8ToUint64
;
break
;
case
EbtInt16
:
newOp
=
EOpConvInt16ToUint64
;
break
;
...
...
@@ -827,11 +783,63 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
case
EbtFloat16
:
newOp
=
EOpConvFloat16ToUint64
;
break
;
case
EbtInt64
:
newOp
=
EOpConvInt64ToUint64
;
break
;
default
:
return
nullptr
;
return
false
;
}
break
;
#endif
default
:
return
false
;
}
return
true
;
}
// This is 'mechanism' here, it does any conversion told.
// It is about basic type, not about shape.
// The policy comes from the shader or the calling code.
TIntermTyped
*
TIntermediate
::
createConversion
(
TBasicType
convertTo
,
TIntermTyped
*
node
)
const
{
//
// Add a new newNode for the conversion.
//
TIntermUnary
*
newNode
=
nullptr
;
TOperator
newOp
=
EOpNull
;
bool
convertToIntTypes
=
(
convertTo
==
EbtInt8
||
convertTo
==
EbtUint8
||
convertTo
==
EbtInt16
||
convertTo
==
EbtUint16
||
convertTo
==
EbtInt
||
convertTo
==
EbtUint
||
convertTo
==
EbtInt64
||
convertTo
==
EbtUint64
);
bool
convertFromIntTypes
=
(
node
->
getBasicType
()
==
EbtInt8
||
node
->
getBasicType
()
==
EbtUint8
||
node
->
getBasicType
()
==
EbtInt16
||
node
->
getBasicType
()
==
EbtUint16
||
node
->
getBasicType
()
==
EbtInt
||
node
->
getBasicType
()
==
EbtUint
||
node
->
getBasicType
()
==
EbtInt64
||
node
->
getBasicType
()
==
EbtUint64
);
bool
convertToFloatTypes
=
(
convertTo
==
EbtFloat16
||
convertTo
==
EbtFloat
||
convertTo
==
EbtDouble
);
bool
convertFromFloatTypes
=
(
node
->
getBasicType
()
==
EbtFloat16
||
node
->
getBasicType
()
==
EbtFloat
||
node
->
getBasicType
()
==
EbtDouble
);
if
(
!
getArithemeticInt8Enabled
())
{
if
(((
convertTo
==
EbtInt8
||
convertTo
==
EbtUint8
)
&&
!
convertFromIntTypes
)
||
((
node
->
getBasicType
()
==
EbtInt8
||
node
->
getBasicType
()
==
EbtUint8
)
&&
!
convertToIntTypes
))
return
nullptr
;
}
if
(
!
getArithemeticInt16Enabled
())
{
if
(((
convertTo
==
EbtInt16
||
convertTo
==
EbtUint16
)
&&
!
convertFromIntTypes
)
||
((
node
->
getBasicType
()
==
EbtInt16
||
node
->
getBasicType
()
==
EbtUint16
)
&&
!
convertToIntTypes
))
return
nullptr
;
}
if
(
!
getArithemeticFloat16Enabled
())
{
if
((
convertTo
==
EbtFloat16
&&
!
convertFromFloatTypes
)
||
(
node
->
getBasicType
()
==
EbtFloat16
&&
!
convertToFloatTypes
))
return
nullptr
;
}
if
(
!
buildConvertOp
(
convertTo
,
node
->
getBasicType
(),
newOp
))
{
return
nullptr
;
}
...
...
glslang/MachineIndependent/localintermediate.h
View file @
69670380
...
...
@@ -786,6 +786,9 @@ public:
void
merge
(
TInfoSink
&
,
TIntermediate
&
);
void
finalCheck
(
TInfoSink
&
,
bool
keepUncalled
);
bool
buildConvertOp
(
TBasicType
dst
,
TBasicType
src
,
TOperator
&
convertOp
)
const
;
TIntermTyped
*
createConversion
(
TBasicType
convertTo
,
TIntermTyped
*
node
)
const
;
void
addIoAccessed
(
const
TString
&
name
)
{
ioAccessed
.
insert
(
name
);
}
bool
inIoAccessed
(
const
TString
&
name
)
const
{
return
ioAccessed
.
find
(
name
)
!=
ioAccessed
.
end
();
}
...
...
@@ -876,7 +879,6 @@ protected:
bool
specConstantPropagates
(
const
TIntermTyped
&
,
const
TIntermTyped
&
);
void
performTextureUpgradeAndSamplerRemovalTransformation
(
TIntermNode
*
root
);
bool
isConversionAllowed
(
TOperator
op
,
TIntermTyped
*
node
)
const
;
TIntermTyped
*
createConversion
(
TBasicType
convertTo
,
TIntermTyped
*
node
)
const
;
std
::
tuple
<
TBasicType
,
TBasicType
>
getConversionDestinatonType
(
TBasicType
type0
,
TBasicType
type1
,
TOperator
op
)
const
;
// JohnK: I think this function should go away.
...
...
glslang/Public/ShaderLang.h
View file @
69670380
...
...
@@ -487,6 +487,8 @@ public:
environment
.
target
.
version
=
version
;
}
void
getStrings
(
const
char
*
const
*
&
s
,
int
&
n
)
{
s
=
strings
;
n
=
numStrings
;
};
#ifdef ENABLE_HLSL
void
setEnvTargetHlslFunctionality1
()
{
environment
.
target
.
hlslFunctionality1
=
true
;
}
bool
getEnvTargetHlslFunctionality1
()
const
{
return
environment
.
target
.
hlslFunctionality1
;
}
...
...
@@ -773,7 +775,7 @@ public:
TProgram
();
virtual
~
TProgram
();
void
addShader
(
TShader
*
shader
)
{
stages
[
shader
->
stage
].
push_back
(
shader
);
}
std
::
list
<
TShader
*>&
getShaders
(
EShLanguage
stage
)
{
return
stages
[
stage
];
};
// Link Validation interface
bool
link
(
EShMessages
);
const
char
*
getInfoLog
();
...
...
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