Merge branch 'master' into GL_EXT_blend_func_extended
This commit is contained in:
commit
7c4dc1299e
@ -1439,7 +1439,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
|
||||
// Add the source extensions
|
||||
const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions();
|
||||
for (auto it = sourceExtensions.begin(); it != sourceExtensions.end(); ++it)
|
||||
builder.addSourceExtension(it->c_str());
|
||||
builder.addSourceExtension(it->first.c_str());
|
||||
|
||||
// Add the top-level modes for this shader.
|
||||
|
||||
|
@ -448,4 +448,40 @@ void devie()
|
||||
{
|
||||
gl_DeviceIndex;
|
||||
gl_ViewIndex;
|
||||
}
|
||||
}
|
||||
|
||||
#extension GL_EXT_shader_implicit_conversions : enable
|
||||
|
||||
// Test function overloading
|
||||
void func(uint a, uvec4 b)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int func(uint a, uvec4 b) // Error function overloading because of same signature and different return type
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int b;
|
||||
|
||||
void testimplicit() {
|
||||
|
||||
uint a = b; // int->uint
|
||||
mediump vec4 col = vec4(1, 2, 3, 4); // ivec4 -> vec4
|
||||
int b = a + 2; // ERROR: cannot convert from ' temp uint' to ' temp int'
|
||||
|
||||
// Test binary ops
|
||||
uint c = b * 3;
|
||||
uint d = b * 3u;
|
||||
uint e = b%3;
|
||||
uint f = (b > 3)? b : c;
|
||||
func(b, ivec4(1,2,3,4));
|
||||
}
|
||||
|
||||
#extension GL_EXT_shader_implicit_conversions : disable
|
||||
|
||||
void testimplicitFail() {
|
||||
uint a = b; // Error GL_EXT_shader_implicit_conversions is disabled
|
||||
}
|
||||
|
||||
|
@ -134,12 +134,18 @@ ERROR: 0:429: 'blend_support' : unknown blend equation
|
||||
ERROR: 0:431: 'fragment-shader array-of-array output' : not supported with this profile: es
|
||||
ERROR: 0:435: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group
|
||||
ERROR: 0:436: 'gl_ViewIndex' : required extension not requested: GL_EXT_multiview
|
||||
ERROR: 127 compilation errors. No code generated.
|
||||
ERROR: 0:461: 'func' : overloaded functions must have the same return type
|
||||
ERROR: 0:461: 'func' : function already has a body
|
||||
ERROR: 0:463: 'return' : void function cannot return a value
|
||||
ERROR: 0:472: '=' : cannot convert from ' temp mediump uint' to ' temp mediump int'
|
||||
ERROR: 0:485: '=' : cannot convert from ' global mediump int' to ' temp mediump uint'
|
||||
ERROR: 132 compilation errors. No code generated.
|
||||
|
||||
|
||||
Shader version: 310
|
||||
Requested GL_EXT_device_group
|
||||
Requested GL_EXT_multiview
|
||||
Requested GL_EXT_shader_implicit_conversions
|
||||
Requested GL_EXT_shader_io_blocks
|
||||
Requested GL_EXT_texture_cube_map_array
|
||||
Requested GL_KHR_blend_equation_advanced
|
||||
@ -939,6 +945,80 @@ ERROR: node is still EOpNull!
|
||||
0:449 Sequence
|
||||
0:449 'gl_DeviceIndex' ( flat in highp int DeviceIndex)
|
||||
0:450 'gl_ViewIndex' ( flat in highp int ViewIndex)
|
||||
0:456 Function Definition: func(u1;vu4; ( global void)
|
||||
0:456 Function Parameters:
|
||||
0:456 'a' ( in mediump uint)
|
||||
0:456 'b' ( in mediump 4-component vector of uint)
|
||||
0:461 Function Definition: func(u1;vu4; ( global mediump int)
|
||||
0:461 Function Parameters:
|
||||
0:461 'a' ( in mediump uint)
|
||||
0:461 'b' ( in mediump 4-component vector of uint)
|
||||
0:463 Sequence
|
||||
0:463 Branch: Return
|
||||
0:468 Function Definition: testimplicit( ( global void)
|
||||
0:468 Function Parameters:
|
||||
0:470 Sequence
|
||||
0:470 Sequence
|
||||
0:470 move second child to first child ( temp mediump uint)
|
||||
0:470 'a' ( temp mediump uint)
|
||||
0:470 Convert int to uint ( temp mediump uint)
|
||||
0:470 'b' ( global mediump int)
|
||||
0:471 Sequence
|
||||
0:471 move second child to first child ( temp mediump 4-component vector of float)
|
||||
0:471 'col' ( temp mediump 4-component vector of float)
|
||||
0:471 Constant:
|
||||
0:471 1.000000
|
||||
0:471 2.000000
|
||||
0:471 3.000000
|
||||
0:471 4.000000
|
||||
0:475 Sequence
|
||||
0:475 move second child to first child ( temp mediump uint)
|
||||
0:475 'c' ( temp mediump uint)
|
||||
0:475 Convert int to uint ( temp mediump uint)
|
||||
0:475 component-wise multiply ( temp mediump int)
|
||||
0:475 'b' ( temp mediump int)
|
||||
0:475 Constant:
|
||||
0:475 3 (const int)
|
||||
0:476 Sequence
|
||||
0:476 move second child to first child ( temp mediump uint)
|
||||
0:476 'd' ( temp mediump uint)
|
||||
0:476 component-wise multiply ( temp mediump uint)
|
||||
0:476 Convert int to uint ( temp mediump uint)
|
||||
0:476 'b' ( temp mediump int)
|
||||
0:476 Constant:
|
||||
0:476 3 (const uint)
|
||||
0:477 Sequence
|
||||
0:477 move second child to first child ( temp mediump uint)
|
||||
0:477 'e' ( temp mediump uint)
|
||||
0:477 Convert int to uint ( temp mediump uint)
|
||||
0:477 mod ( temp mediump int)
|
||||
0:477 'b' ( temp mediump int)
|
||||
0:477 Constant:
|
||||
0:477 3 (const int)
|
||||
0:478 Sequence
|
||||
0:478 move second child to first child ( temp mediump uint)
|
||||
0:478 'f' ( temp mediump uint)
|
||||
0:478 Test condition and select ( temp mediump uint)
|
||||
0:478 Condition
|
||||
0:478 Compare Greater Than ( temp bool)
|
||||
0:478 'b' ( temp mediump int)
|
||||
0:478 Constant:
|
||||
0:478 3 (const int)
|
||||
0:478 true case
|
||||
0:478 Convert int to uint ( temp uint)
|
||||
0:478 'b' ( temp mediump int)
|
||||
0:478 false case
|
||||
0:478 'c' ( temp mediump uint)
|
||||
0:479 Function Call: func(u1;vu4; ( global void)
|
||||
0:479 Convert int to uint ( temp uint)
|
||||
0:479 'b' ( temp mediump int)
|
||||
0:479 Constant:
|
||||
0:479 1 (const uint)
|
||||
0:479 2 (const uint)
|
||||
0:479 3 (const uint)
|
||||
0:479 4 (const uint)
|
||||
0:484 Function Definition: testimplicitFail( ( global void)
|
||||
0:484 Function Parameters:
|
||||
0:? Linker Objects
|
||||
0:? 'gl_FragCoord' ( smooth in mediump 4-component vector of float)
|
||||
0:? 'v3' (layout( location=2) smooth in mediump 3-component vector of float)
|
||||
@ -1033,6 +1113,7 @@ ERROR: node is still EOpNull!
|
||||
0:? 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
|
||||
0:? 'badout' ( out mediump 4-component vector of float)
|
||||
0:? 'outAA' ( out 2-element array of 2-element array of mediump 4-component vector of float)
|
||||
0:? 'b' ( global mediump int)
|
||||
|
||||
|
||||
Linked fragment stage:
|
||||
@ -1042,6 +1123,7 @@ ERROR: Linking fragment stage: when more than one fragment shader output, all mu
|
||||
Shader version: 310
|
||||
Requested GL_EXT_device_group
|
||||
Requested GL_EXT_multiview
|
||||
Requested GL_EXT_shader_implicit_conversions
|
||||
Requested GL_EXT_shader_io_blocks
|
||||
Requested GL_EXT_texture_cube_map_array
|
||||
Requested GL_KHR_blend_equation_advanced
|
||||
@ -1244,4 +1326,5 @@ ERROR: node is still EOpNull!
|
||||
0:? 'sampInArray' ( smooth sample in 4-element array of mediump 3-component vector of float)
|
||||
0:? 'badout' ( out mediump 4-component vector of float)
|
||||
0:? 'outAA' ( out 2-element array of 2-element array of mediump 4-component vector of float)
|
||||
0:? 'b' ( global mediump int)
|
||||
|
||||
|
@ -7,6 +7,7 @@ ERROR: 4 compilation errors. No code generated.
|
||||
|
||||
|
||||
Shader version: 110
|
||||
Requested GL_ARB_texture_rectangle
|
||||
ERROR: node is still EOpNull!
|
||||
0:42 Function Definition: main( ( global void)
|
||||
0:42 Function Parameters:
|
||||
@ -27,6 +28,7 @@ Linked fragment stage:
|
||||
|
||||
|
||||
Shader version: 110
|
||||
Requested GL_ARB_texture_rectangle
|
||||
ERROR: node is still EOpNull!
|
||||
0:42 Function Definition: main( ( global void)
|
||||
0:42 Function Parameters:
|
||||
|
@ -1620,7 +1620,7 @@ bool TIntermediate::isFPIntegralConversion(TBasicType from, TBasicType to) const
|
||||
//
|
||||
bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op) const
|
||||
{
|
||||
if (isEsProfile() || version == 110)
|
||||
if ((isEsProfile() && version < 310 ) || version == 110)
|
||||
return false;
|
||||
|
||||
if (from == to)
|
||||
@ -1667,7 +1667,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16) ||
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float32) ||
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float64);
|
||||
|
||||
|
||||
if (explicitTypesEnabled) {
|
||||
// integral promotions
|
||||
if (isIntegralPromotion(from, to)) {
|
||||
@ -1699,6 +1699,30 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
|
||||
if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
|
||||
return true;
|
||||
}
|
||||
} else if (isEsProfile()) {
|
||||
switch (to) {
|
||||
case EbtFloat:
|
||||
switch (from) {
|
||||
case EbtInt:
|
||||
case EbtUint:
|
||||
return extensionRequested(E_GL_EXT_shader_implicit_conversions);
|
||||
case EbtFloat:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
case EbtUint:
|
||||
switch (from) {
|
||||
case EbtInt:
|
||||
return extensionRequested(E_GL_EXT_shader_implicit_conversions);
|
||||
case EbtUint:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
switch (to) {
|
||||
case EbtDouble:
|
||||
@ -1731,15 +1755,14 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
|
||||
return extensionRequested(E_GL_AMD_gpu_shader_int16);
|
||||
case EbtFloat16:
|
||||
return
|
||||
extensionRequested(E_GL_AMD_gpu_shader_half_float) ||
|
||||
getSource() == EShSourceHlsl;
|
||||
extensionRequested(E_GL_AMD_gpu_shader_half_float) || getSource() == EShSourceHlsl;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
case EbtUint:
|
||||
switch (from) {
|
||||
case EbtInt:
|
||||
return version >= 400 || getSource() == EShSourceHlsl;
|
||||
return version >= 400 || getSource() == EShSourceHlsl;
|
||||
case EbtUint:
|
||||
return true;
|
||||
case EbtBool:
|
||||
@ -1931,7 +1954,9 @@ std::tuple<TBasicType, TBasicType> TIntermediate::getConversionDestinatonType(TB
|
||||
TBasicType res0 = EbtNumTypes;
|
||||
TBasicType res1 = EbtNumTypes;
|
||||
|
||||
if (isEsProfile() || version == 110)
|
||||
if ((isEsProfile() &&
|
||||
(version < 310 || !extensionRequested(E_GL_EXT_shader_implicit_conversions))) ||
|
||||
version == 110)
|
||||
return std::make_tuple(res0, res1);
|
||||
|
||||
if (getSource() == EShSourceHlsl) {
|
||||
|
@ -6162,7 +6162,10 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct
|
||||
extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32) ||
|
||||
extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64);
|
||||
|
||||
if (isEsProfile() || version < 120)
|
||||
if (isEsProfile())
|
||||
function = (extensionTurnedOn(E_GL_EXT_shader_implicit_conversions) && version >= 310) ?
|
||||
findFunction120(loc, call, builtIn) : findFunctionExact(loc, call, builtIn);
|
||||
else if (version < 120)
|
||||
function = findFunctionExact(loc, call, builtIn);
|
||||
else if (version < 400)
|
||||
function = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
|
||||
|
@ -307,6 +307,7 @@ void TParseVersions::initializeExtensionBehavior()
|
||||
extensionBehavior[E_GL_EXT_ray_query] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_blend_func_extended] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
|
||||
|
||||
// OVR extensions
|
||||
extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
|
||||
@ -365,6 +366,7 @@ void TParseVersions::getPreamble(std::string& preamble)
|
||||
"#define GL_EXT_tessellation_point_size 1\n"
|
||||
"#define GL_EXT_texture_buffer 1\n"
|
||||
"#define GL_EXT_texture_cube_map_array 1\n"
|
||||
"#define GL_EXT_shader_implicit_conversions 1\n"
|
||||
"#define GL_EXT_shader_integer_mix 1\n"
|
||||
"#define GL_EXT_blend_func_extended 1\n"
|
||||
|
||||
@ -923,8 +925,8 @@ void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBe
|
||||
} else {
|
||||
if (iter->second == EBhDisablePartial)
|
||||
warn(getCurrentLoc(), "extension is only partially supported:", "#extension", extension);
|
||||
if (behavior == EBhEnable || behavior == EBhRequire)
|
||||
intermediate.addRequestedExtension(extension);
|
||||
if (behavior == EBhEnable || behavior == EBhRequire || behavior == EBhDisable)
|
||||
intermediate.updateRequestedExtension(extension, behavior);
|
||||
iter->second = behavior;
|
||||
}
|
||||
}
|
||||
|
@ -197,6 +197,7 @@ const char* const E_GL_EXT_ray_tracing = "GL_EXT_ray_tracin
|
||||
const char* const E_GL_EXT_ray_query = "GL_EXT_ray_query";
|
||||
const char* const E_GL_EXT_ray_flags_primitive_culling = "GL_EXT_ray_flags_primitive_culling";
|
||||
const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended";
|
||||
const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions";
|
||||
|
||||
// Arrays of extensions for the above viewportEXTs duplications
|
||||
|
||||
|
@ -1466,7 +1466,7 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree)
|
||||
infoSink.debug << "Shader version: " << version << "\n";
|
||||
if (requestedExtensions.size() > 0) {
|
||||
for (auto extIt = requestedExtensions.begin(); extIt != requestedExtensions.end(); ++extIt)
|
||||
infoSink.debug << "Requested " << *extIt << "\n";
|
||||
infoSink.debug << "Requested " << extIt->first << "\n";
|
||||
}
|
||||
|
||||
if (xfbMode)
|
||||
|
@ -356,8 +356,15 @@ public:
|
||||
}
|
||||
const SpvVersion& getSpv() const { return spvVersion; }
|
||||
EShLanguage getStage() const { return language; }
|
||||
void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); }
|
||||
const std::set<std::string>& getRequestedExtensions() const { return requestedExtensions; }
|
||||
void updateRequestedExtension(const char* extension, TExtensionBehavior behavior) {
|
||||
if(requestedExtensions.find(extension) != requestedExtensions.end()) {
|
||||
requestedExtensions[extension] = behavior;
|
||||
} else {
|
||||
requestedExtensions.insert(std::make_pair(extension, behavior));
|
||||
}
|
||||
}
|
||||
|
||||
const std::map<std::string, TExtensionBehavior>& getRequestedExtensions() const { return requestedExtensions; }
|
||||
|
||||
void setTreeRoot(TIntermNode* r) { treeRoot = r; }
|
||||
TIntermNode* getTreeRoot() const { return treeRoot; }
|
||||
@ -902,7 +909,13 @@ protected:
|
||||
#ifdef GLSLANG_WEB
|
||||
bool extensionRequested(const char *extension) const { return false; }
|
||||
#else
|
||||
bool extensionRequested(const char *extension) const {return requestedExtensions.find(extension) != requestedExtensions.end();}
|
||||
bool extensionRequested(const char *extension) const {
|
||||
auto it = requestedExtensions.find(extension);
|
||||
if (it != requestedExtensions.end()) {
|
||||
return (it->second == EBhDisable) ? false : true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const char* getResourceName(TResourceType);
|
||||
@ -917,7 +930,7 @@ protected:
|
||||
int version; // source version
|
||||
SpvVersion spvVersion;
|
||||
TIntermNode* treeRoot;
|
||||
std::set<std::string> requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
|
||||
std::map<std::string, TExtensionBehavior> requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
|
||||
TBuiltInResource resources;
|
||||
int numEntryPoints;
|
||||
int numErrors;
|
||||
|
Loading…
x
Reference in New Issue
Block a user