|
|
@@ -1122,11 +1122,15 @@ namespace bgfx
|
|
|
? BGFX_CAPS_FRAGMENT_DEPTH
|
|
|
: 0
|
|
|
;
|
|
|
-
|
|
|
g_caps.supported |= s_extension[Extension::ARB_draw_buffers_blend].m_supported
|
|
|
? BGFX_CAPS_BLEND_INDEPENDENT
|
|
|
: 0
|
|
|
;
|
|
|
+ g_caps.supported |= s_extension[Extension::INTEL_fragment_shader_ordering].m_supported
|
|
|
+ ? BGFX_CAPS_FRAGMENT_ORDERING
|
|
|
+ : 0
|
|
|
+ ;
|
|
|
+
|
|
|
g_caps.maxTextureSize = glGet(GL_MAX_TEXTURE_SIZE);
|
|
|
|
|
|
if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL)
|
|
|
@@ -3332,6 +3336,8 @@ namespace bgfx
|
|
|
|
|
|
bool usesTextureLod = !!bx::findIdentifierMatch(code, s_EXT_shader_texture_lod);
|
|
|
|
|
|
+ bool usesFragmentOrdering = !!bx::findIdentifierMatch(code, "beginFragmentShaderOrdering");
|
|
|
+
|
|
|
if (usesDerivatives)
|
|
|
{
|
|
|
writeString(&writer, "#extension GL_OES_standard_derivatives : enable\n");
|
|
|
@@ -3407,6 +3413,18 @@ namespace bgfx
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (usesFragmentOrdering)
|
|
|
+ {
|
|
|
+ if (s_extension[Extension::INTEL_fragment_shader_ordering].m_supported)
|
|
|
+ {
|
|
|
+ writeString(&writer, "#extension GL_INTEL_fragment_shader_ordering : enable\n");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ writeString(&writer, "#define beginFragmentShaderOrdering()\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
writeString(&writer, "precision mediump float;\n");
|
|
|
|
|
|
bx::write(&writer, code, codeLen);
|
|
|
@@ -3517,6 +3535,18 @@ namespace bgfx
|
|
|
BGFX_FATAL(0 != fragData, Fatal::InvalidShader, "Unable to find and patch gl_FragData!");
|
|
|
}
|
|
|
|
|
|
+ if (!!bx::findIdentifierMatch(code, "beginFragmentShaderOrdering") )
|
|
|
+ {
|
|
|
+ if (s_extension[Extension::INTEL_fragment_shader_ordering].m_supported)
|
|
|
+ {
|
|
|
+ writeString(&writer, "#extension GL_INTEL_fragment_shader_ordering : enable\n");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ writeString(&writer, "#define beginFragmentShaderOrdering()\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (0 != fragData)
|
|
|
{
|
|
|
writeStringf(&writer, "out vec4 bgfx_FragData[%d];\n", fragData);
|