Adjusting code interface
glslang/include/intermediate.h -> Add a new interface to set TIntermBranch's expression. glslang/include/Types.h -> Add interface to set Type's basicType and add interface to get basicType form a TSampler. glslang/MachineIndependent/intermediate.cpp -> Part of the code in createConversion been encapsulating as a new function called buildConvertOp glslang/MachineIndependent/localintermediate.h -> Export createConversion and buildConvertOp as a public function glslang/Public/ShaderLang.h -> Add interface to get shader object and shader source.
This commit is contained in:
parent
e8e138b9e0
commit
b69e8f3aca
@ -135,6 +135,8 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
|
|||||||
bool isYuv() const { return yuv; }
|
bool isYuv() const { return yuv; }
|
||||||
#endif
|
#endif
|
||||||
void setCombined(bool c) { combined = c; }
|
void setCombined(bool c) { combined = c; }
|
||||||
|
void setBasicType(TBasicType t) { type = t; };
|
||||||
|
TBasicType getBasicType() const { return type; };
|
||||||
bool isShadow() const { return shadow; }
|
bool isShadow() const { return shadow; }
|
||||||
bool isArrayed() const { return arrayed; }
|
bool isArrayed() const { return arrayed; }
|
||||||
|
|
||||||
@ -2184,7 +2186,8 @@ public:
|
|||||||
const TTypeList* getStruct() const { assert(isStruct()); return structure; }
|
const TTypeList* getStruct() const { assert(isStruct()); return structure; }
|
||||||
void setStruct(TTypeList* s) { assert(isStruct()); structure = s; }
|
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
|
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 computeNumComponents() const
|
||||||
{
|
{
|
||||||
int components = 0;
|
int components = 0;
|
||||||
|
|||||||
@ -1185,6 +1185,7 @@ public:
|
|||||||
virtual void traverse(TIntermTraverser*);
|
virtual void traverse(TIntermTraverser*);
|
||||||
TOperator getFlowOp() const { return flowOp; }
|
TOperator getFlowOp() const { return flowOp; }
|
||||||
TIntermTyped* getExpression() const { return expression; }
|
TIntermTyped* getExpression() const { return expression; }
|
||||||
|
void setExpression(TIntermTyped* pExpression) { expression = pExpression; }
|
||||||
protected:
|
protected:
|
||||||
TOperator flowOp;
|
TOperator flowOp;
|
||||||
TIntermTyped* expression;
|
TIntermTyped* expression;
|
||||||
|
|||||||
@ -562,6 +562,237 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& newOp) const
|
||||||
|
{
|
||||||
|
switch (dst) {
|
||||||
|
#ifndef GLSLANG_WEB
|
||||||
|
case EbtDouble:
|
||||||
|
switch (src) {
|
||||||
|
case EbtUint: newOp = EOpConvUintToDouble; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToDouble; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToDouble; break;
|
||||||
|
case EbtInt: newOp = EOpConvIntToDouble; break;
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToDouble; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToDouble; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToDouble; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToDouble; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToDouble; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToDouble; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case EbtFloat:
|
||||||
|
switch (src) {
|
||||||
|
case EbtInt: newOp = EOpConvIntToFloat; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToFloat; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToFloat; break;
|
||||||
|
#ifndef GLSLANG_WEB
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToFloat; break;
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToFloat; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToFloat; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToFloat; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToFloat; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToFloat; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToFloat; break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifndef GLSLANG_WEB
|
||||||
|
case EbtFloat16:
|
||||||
|
switch (src) {
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToFloat16; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToFloat16; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToFloat16; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
|
||||||
|
case EbtInt: newOp = EOpConvIntToFloat16; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToFloat16; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToFloat16; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToFloat16; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToFloat16; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case EbtBool:
|
||||||
|
switch (src) {
|
||||||
|
case EbtInt: newOp = EOpConvIntToBool; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToBool; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToBool; break;
|
||||||
|
#ifndef GLSLANG_WEB
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToBool; break;
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToBool; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToBool; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToBool; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToBool; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToBool; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToBool; break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifndef GLSLANG_WEB
|
||||||
|
case EbtInt8:
|
||||||
|
switch (src) {
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToInt8; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToInt8; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToInt8; break;
|
||||||
|
case EbtInt: newOp = EOpConvIntToInt8; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToInt8; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToInt8; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToInt8; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToInt8; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToInt8; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToInt8; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EbtUint8:
|
||||||
|
switch (src) {
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToUint8; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToUint8; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToUint8; break;
|
||||||
|
case EbtInt: newOp = EOpConvIntToUint8; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToUint8; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToUint8; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToUint8; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToUint8; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToUint8; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToUint8; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EbtInt16:
|
||||||
|
switch (src) {
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToInt16; break;
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToInt16; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToInt16; break;
|
||||||
|
case EbtInt: newOp = EOpConvIntToInt16; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToInt16; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToInt16; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToInt16; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToInt16; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToInt16; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToInt16; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EbtUint16:
|
||||||
|
switch (src) {
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToUint16; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToUint16; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToUint16; break;
|
||||||
|
case EbtInt: newOp = EOpConvIntToUint16; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToUint16; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToUint16; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToUint16; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToUint16; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToUint16; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToUint16; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case EbtInt:
|
||||||
|
switch (src) {
|
||||||
|
case EbtUint: newOp = EOpConvUintToInt; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToInt; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToInt; break;
|
||||||
|
#ifndef GLSLANG_WEB
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToInt; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToInt; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToInt; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToInt; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToInt; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToInt; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToInt; break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EbtUint:
|
||||||
|
switch (src) {
|
||||||
|
case EbtInt: newOp = EOpConvIntToUint; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToUint; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToUint; break;
|
||||||
|
#ifndef GLSLANG_WEB
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToUint; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToUint; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToUint; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToUint; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToUint; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToUint; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToUint; break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#ifndef GLSLANG_WEB
|
||||||
|
case EbtInt64:
|
||||||
|
switch (src) {
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToInt64; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToInt64; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToInt64; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToInt64; break;
|
||||||
|
case EbtInt: newOp = EOpConvIntToInt64; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToInt64; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToInt64; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToInt64; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToInt64; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
|
||||||
|
case EbtUint64: newOp = EOpConvUint64ToInt64; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EbtUint64:
|
||||||
|
switch (src) {
|
||||||
|
case EbtInt8: newOp = EOpConvInt8ToUint64; break;
|
||||||
|
case EbtUint8: newOp = EOpConvUint8ToUint64; break;
|
||||||
|
case EbtInt16: newOp = EOpConvInt16ToUint64; break;
|
||||||
|
case EbtUint16: newOp = EOpConvUint16ToUint64; break;
|
||||||
|
case EbtInt: newOp = EOpConvIntToUint64; break;
|
||||||
|
case EbtUint: newOp = EOpConvUintToUint64; break;
|
||||||
|
case EbtBool: newOp = EOpConvBoolToUint64; break;
|
||||||
|
case EbtFloat: newOp = EOpConvFloatToUint64; break;
|
||||||
|
case EbtDouble: newOp = EOpConvDoubleToUint64; break;
|
||||||
|
case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
|
||||||
|
case EbtInt64: newOp = EOpConvInt64ToUint64; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// This is 'mechanism' here, it does any conversion told.
|
// This is 'mechanism' here, it does any conversion told.
|
||||||
// It is about basic type, not about shape.
|
// It is about basic type, not about shape.
|
||||||
// The policy comes from the shader or the calling code.
|
// The policy comes from the shader or the calling code.
|
||||||
@ -608,230 +839,8 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (convertTo) {
|
if (!buildConvertOp(convertTo, node->getBasicType(), newOp))
|
||||||
#ifndef GLSLANG_WEB
|
{
|
||||||
case EbtDouble:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtUint: newOp = EOpConvUintToDouble; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToDouble; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToDouble; break;
|
|
||||||
case EbtInt: newOp = EOpConvIntToDouble; break;
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToDouble; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToDouble; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToDouble; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToDouble; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToDouble; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToDouble; break;
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case EbtFloat:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtInt: newOp = EOpConvIntToFloat; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToFloat; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToFloat; break;
|
|
||||||
#ifndef GLSLANG_WEB
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToFloat; break;
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToFloat; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToFloat; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToFloat; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToFloat; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToFloat; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToFloat; break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#ifndef GLSLANG_WEB
|
|
||||||
case EbtFloat16:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToFloat16; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToFloat16; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToFloat16; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
|
|
||||||
case EbtInt: newOp = EOpConvIntToFloat16; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToFloat16; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToFloat16; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToFloat16; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToFloat16; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToFloat16; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToFloat16; break;
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case EbtBool:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtInt: newOp = EOpConvIntToBool; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToBool; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToBool; break;
|
|
||||||
#ifndef GLSLANG_WEB
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToBool; break;
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToBool; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToBool; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToBool; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToBool; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToBool; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToBool; break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#ifndef GLSLANG_WEB
|
|
||||||
case EbtInt8:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToInt8; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToInt8; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToInt8; break;
|
|
||||||
case EbtInt: newOp = EOpConvIntToInt8; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToInt8; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToInt8; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToInt8; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToInt8; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToInt8; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToInt8; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EbtUint8:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToUint8; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToUint8; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToUint8; break;
|
|
||||||
case EbtInt: newOp = EOpConvIntToUint8; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToUint8; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToUint8; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToUint8; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToUint8; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToUint8; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToUint8; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EbtInt16:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToInt16; break;
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToInt16; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToInt16; break;
|
|
||||||
case EbtInt: newOp = EOpConvIntToInt16; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToInt16; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToInt16; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToInt16; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToInt16; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToInt16; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToInt16; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EbtUint16:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToUint16; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToUint16; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToUint16; break;
|
|
||||||
case EbtInt: newOp = EOpConvIntToUint16; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToUint16; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToUint16; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToUint16; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToUint16; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToUint16; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToUint16; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case EbtInt:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtUint: newOp = EOpConvUintToInt; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToInt; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToInt; break;
|
|
||||||
#ifndef GLSLANG_WEB
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToInt; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToInt; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToInt; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToInt; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToInt; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToInt; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToInt; break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EbtUint:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtInt: newOp = EOpConvIntToUint; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToUint; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToUint; break;
|
|
||||||
#ifndef GLSLANG_WEB
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToUint; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToUint; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToUint; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToUint; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToUint; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToUint; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToUint; break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#ifndef GLSLANG_WEB
|
|
||||||
case EbtInt64:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToInt64; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToInt64; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToInt64; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToInt64; break;
|
|
||||||
case EbtInt: newOp = EOpConvIntToInt64; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToInt64; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToInt64; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToInt64; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToInt64; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
|
|
||||||
case EbtUint64: newOp = EOpConvUint64ToInt64; break;
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EbtUint64:
|
|
||||||
switch (node->getBasicType()) {
|
|
||||||
case EbtInt8: newOp = EOpConvInt8ToUint64; break;
|
|
||||||
case EbtUint8: newOp = EOpConvUint8ToUint64; break;
|
|
||||||
case EbtInt16: newOp = EOpConvInt16ToUint64; break;
|
|
||||||
case EbtUint16: newOp = EOpConvUint16ToUint64; break;
|
|
||||||
case EbtInt: newOp = EOpConvIntToUint64; break;
|
|
||||||
case EbtUint: newOp = EOpConvUintToUint64; break;
|
|
||||||
case EbtBool: newOp = EOpConvBoolToUint64; break;
|
|
||||||
case EbtFloat: newOp = EOpConvFloatToUint64; break;
|
|
||||||
case EbtDouble: newOp = EOpConvDoubleToUint64; break;
|
|
||||||
case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
|
|
||||||
case EbtInt64: newOp = EOpConvInt64ToUint64; break;
|
|
||||||
default:
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -693,9 +693,9 @@ public:
|
|||||||
bool getPixelCenterInteger() const { return pixelCenterInteger; }
|
bool getPixelCenterInteger() const { return pixelCenterInteger; }
|
||||||
void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); }
|
void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); }
|
||||||
unsigned int getBlendEquations() const { return blendEquations; }
|
unsigned int getBlendEquations() const { return blendEquations; }
|
||||||
bool setXfbBufferStride(int buffer, unsigned stride)
|
bool setXfbBufferStride(int buffer, unsigned stride, bool force = false)
|
||||||
{
|
{
|
||||||
if (xfbBuffers[buffer].stride != TQualifier::layoutXfbStrideEnd)
|
if (xfbBuffers[buffer].stride != TQualifier::layoutXfbStrideEnd && force == false)
|
||||||
return xfbBuffers[buffer].stride == stride;
|
return xfbBuffers[buffer].stride == stride;
|
||||||
xfbBuffers[buffer].stride = stride;
|
xfbBuffers[buffer].stride = stride;
|
||||||
return true;
|
return true;
|
||||||
@ -776,6 +776,9 @@ public:
|
|||||||
void merge(TInfoSink&, TIntermediate&);
|
void merge(TInfoSink&, TIntermediate&);
|
||||||
void finalCheck(TInfoSink&, bool keepUncalled);
|
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); }
|
void addIoAccessed(const TString& name) { ioAccessed.insert(name); }
|
||||||
bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); }
|
bool inIoAccessed(const TString& name) const { return ioAccessed.find(name) != ioAccessed.end(); }
|
||||||
|
|
||||||
@ -866,7 +869,6 @@ protected:
|
|||||||
bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
|
bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&);
|
||||||
void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
|
void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root);
|
||||||
bool isConversionAllowed(TOperator op, TIntermTyped* node) const;
|
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;
|
std::tuple<TBasicType, TBasicType> getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const;
|
||||||
|
|
||||||
// JohnK: I think this function should go away.
|
// JohnK: I think this function should go away.
|
||||||
|
|||||||
@ -486,6 +486,8 @@ public:
|
|||||||
environment.target.version = version;
|
environment.target.version = version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getStrings(const char* const* &s, int& n) { s = strings; n = numStrings; };
|
||||||
|
|
||||||
#ifdef ENABLE_HLSL
|
#ifdef ENABLE_HLSL
|
||||||
void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
|
void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
|
||||||
bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; }
|
bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; }
|
||||||
@ -772,7 +774,7 @@ public:
|
|||||||
TProgram();
|
TProgram();
|
||||||
virtual ~TProgram();
|
virtual ~TProgram();
|
||||||
void addShader(TShader* shader) { stages[shader->stage].push_back(shader); }
|
void addShader(TShader* shader) { stages[shader->stage].push_back(shader); }
|
||||||
|
std::list<TShader*>& getShaders(EShLanguage stage) { return stages[stage]; };
|
||||||
// Link Validation interface
|
// Link Validation interface
|
||||||
bool link(EShMessages);
|
bool link(EShMessages);
|
||||||
const char* getInfoLog();
|
const char* getInfoLog();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user