Blob Blame History Raw
diff -rupN qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp
--- qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp	2018-01-15 10:38:10.000000000 +0100
+++ qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp	2018-01-29 13:41:40.757804482 +0100
@@ -32,98 +32,25 @@
 
 namespace WebCore {
 
-// Temporary typedef to support an incompatible change in the ANGLE API.
-#if !defined(ANGLE_SH_VERSION) || ANGLE_SH_VERSION < 108
-typedef int ANGLEGetInfoType;
-#else
-typedef size_t ANGLEGetInfoType;
-#endif
-
-inline static ANGLEGetInfoType getValidationResultValue(const ShHandle compiler, ShShaderInfo shaderInfo)
-{
-    ANGLEGetInfoType value = 0;
-    ShGetInfo(compiler, shaderInfo, &value);
-    return value;
-}
-
-static bool getSymbolInfo(ShHandle compiler, ShShaderInfo symbolType, Vector<ANGLEShaderSymbol>& symbols)
-{
-    ShShaderInfo symbolMaxNameLengthType;
-
-    switch (symbolType) {
-    case SH_ACTIVE_ATTRIBUTES:
-        symbolMaxNameLengthType = SH_ACTIVE_ATTRIBUTE_MAX_LENGTH;
-        break;
-    case SH_ACTIVE_UNIFORMS:
-        symbolMaxNameLengthType = SH_ACTIVE_UNIFORM_MAX_LENGTH;
-        break;
-    default:
-        ASSERT_NOT_REACHED();
+template<typename vectype>
+bool readSymbols(const vectype *vec, Vector<ANGLEShaderSymbol> &symbols) {
+    if(!vec) {
         return false;
     }
-
-    ANGLEGetInfoType numSymbols = getValidationResultValue(compiler, symbolType);
-
-    ANGLEGetInfoType maxNameLength = getValidationResultValue(compiler, symbolMaxNameLengthType);
-    if (maxNameLength <= 1)
-        return false;
-
-    ANGLEGetInfoType maxMappedNameLength = getValidationResultValue(compiler, SH_MAPPED_NAME_MAX_LENGTH);
-    if (maxMappedNameLength <= 1)
-        return false;
-
-    // The maximum allowed symbol name length is 256 characters.
-    Vector<char, 256> nameBuffer(maxNameLength);
-    Vector<char, 256> mappedNameBuffer(maxMappedNameLength);
-    
-    for (ANGLEGetInfoType i = 0; i < numSymbols; ++i) {
+    for(typename vectype::const_iterator i = vec->begin(), end = vec->end(); i != end; ++i) {
         ANGLEShaderSymbol symbol;
-        ANGLEGetInfoType nameLength = 0;
-        switch (symbolType) {
-        case SH_ACTIVE_ATTRIBUTES:
-            symbol.symbolType = SHADER_SYMBOL_TYPE_ATTRIBUTE;
-            ShGetActiveAttrib(compiler, i, &nameLength, &symbol.size, &symbol.dataType, nameBuffer.data(), mappedNameBuffer.data());
-            break;
-        case SH_ACTIVE_UNIFORMS:
-            symbol.symbolType = SHADER_SYMBOL_TYPE_UNIFORM;
-            ShGetActiveUniform(compiler, i, &nameLength, &symbol.size, &symbol.dataType, nameBuffer.data(), mappedNameBuffer.data());
-            break;
-        default:
-            ASSERT_NOT_REACHED();
-            return false;
-        }
-        if (!nameLength)
-            return false;
-        
-        // The ShGetActive* calls above are guaranteed to produce null-terminated strings for
-        // nameBuffer and mappedNameBuffer. Also, the character set for symbol names
-        // is a subset of Latin-1 as specified by the OpenGL ES Shading Language, Section 3.1 and
-        // WebGL, Section "Characters Outside the GLSL Source Character Set".
-
-        String name = String(nameBuffer.data());
-        String mappedName = String(mappedNameBuffer.data());
-        
-        // ANGLE returns array names in the format "array[0]".
-        // The only way to know if a symbol is an array is to check if it ends with "[0]".
-        // We can't check the size because regular symbols and arrays of length 1 both have a size of 1.
-        symbol.isArray = name.endsWith("[0]") && mappedName.endsWith("[0]");
-        if (symbol.isArray) {
-            // Add a symbol for the array name without the "[0]" suffix.
-            name.truncate(name.length() - 3);
-            mappedName.truncate(mappedName.length() - 3);
-        }
-
-        symbol.name = name;
-        symbol.mappedName = mappedName;
+        symbol.name = i->name.data();
+        symbol.mappedName = i->mappedName.data();
+        symbol.isArray = i->isArray();
         symbols.append(symbol);
-    
         if (symbol.isArray) {
             // Add symbols for each array element.
+            symbol.size = i->arraySize;
             symbol.isArray = false;
-            for (int i = 0; i < symbol.size; i++) {
-                String arrayBrackets = "[" + String::number(i) + "]";
-                symbol.name = name + arrayBrackets;
-                symbol.mappedName = mappedName + arrayBrackets;
+            for (int index = 0; index < symbol.size; index++) {
+                String arrayBrackets = "[" + String::number(index) + "]";
+                symbol.name = i->name.data() + arrayBrackets;
+                symbol.mappedName = i->mappedName.data() + arrayBrackets;
                 symbols.append(symbol);
             }
         }
@@ -163,15 +90,14 @@ void ANGLEWebKitBridge::setResources(ShB
 {
     // Resources are (possibly) changing - cleanup compilers if we had them already
     cleanupCompilers();
-    
     m_resources = resources;
 }
 
 bool ANGLEWebKitBridge::compileShaderSource(const char* shaderSource, ANGLEShaderType shaderType, String& translatedShaderSource, String& shaderValidationLog, Vector<ANGLEShaderSymbol>& symbols, int extraCompileOptions)
 {
     if (!builtCompilers) {
-        m_fragmentCompiler = ShConstructCompiler(SH_FRAGMENT_SHADER, m_shaderSpec, m_shaderOutput, &m_resources);
-        m_vertexCompiler = ShConstructCompiler(SH_VERTEX_SHADER, m_shaderSpec, m_shaderOutput, &m_resources);
+        m_fragmentCompiler = ShConstructCompiler(GL_FRAGMENT_SHADER, m_shaderSpec, m_shaderOutput, &m_resources);
+        m_vertexCompiler = ShConstructCompiler(GL_VERTEX_SHADER, m_shaderSpec, m_shaderOutput, &m_resources);
         if (!m_fragmentCompiler || !m_vertexCompiler) {
             cleanupCompilers();
             return false;
@@ -189,31 +115,17 @@ bool ANGLEWebKitBridge::compileShaderSou
 
     const char* const shaderSourceStrings[] = { shaderSource };
 
-    bool validateSuccess = ShCompile(compiler, shaderSourceStrings, 1, SH_OBJECT_CODE | SH_ATTRIBUTES_UNIFORMS | extraCompileOptions);
+    bool validateSuccess = ShCompile(compiler, shaderSourceStrings, 1, SH_OBJECT_CODE | SH_VARIABLES | extraCompileOptions);
     if (!validateSuccess) {
-        int logSize = getValidationResultValue(compiler, SH_INFO_LOG_LENGTH);
-        if (logSize > 1) {
-            OwnArrayPtr<char> logBuffer = adoptArrayPtr(new char[logSize]);
-            if (logBuffer) {
-                ShGetInfoLog(compiler, logBuffer.get());
-                shaderValidationLog = logBuffer.get();
-            }
-        }
+        shaderValidationLog = ShGetInfoLog(compiler).data();
         return false;
     }
 
-    int translationLength = getValidationResultValue(compiler, SH_OBJECT_CODE_LENGTH);
-    if (translationLength > 1) {
-        OwnArrayPtr<char> translationBuffer = adoptArrayPtr(new char[translationLength]);
-        if (!translationBuffer)
-            return false;
-        ShGetObjectCode(compiler, translationBuffer.get());
-        translatedShaderSource = translationBuffer.get();
-    }
+    translatedShaderSource = ShGetObjectCode(compiler).data();
     
-    if (!getSymbolInfo(compiler, SH_ACTIVE_ATTRIBUTES, symbols))
+    if (!readSymbols(ShGetAttributes(compiler), symbols))
         return false;
-    if (!getSymbolInfo(compiler, SH_ACTIVE_UNIFORMS, symbols))
+    if (!readSymbols(ShGetUniforms(compiler), symbols))
         return false;
 
     return true;
diff -rupN qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/ANGLEWebKitBridge.h qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/ANGLEWebKitBridge.h
--- qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/ANGLEWebKitBridge.h	2018-01-15 10:38:10.000000000 +0100
+++ qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/ANGLEWebKitBridge.h	2018-01-29 13:41:40.757804482 +0100
@@ -35,13 +35,14 @@
 #include "GLSLANG/ShaderLang.h"
 #else
 #include "ShaderLang.h"
+#include "angle_gl.h"
 #endif
 
 namespace WebCore {
 
 enum ANGLEShaderType {
-    SHADER_TYPE_VERTEX = SH_VERTEX_SHADER,
-    SHADER_TYPE_FRAGMENT = SH_FRAGMENT_SHADER,
+    SHADER_TYPE_VERTEX = GL_VERTEX_SHADER,
+    SHADER_TYPE_FRAGMENT = GL_FRAGMENT_SHADER,
 };
 
 enum ANGLEShaderSymbolType {
@@ -53,24 +54,24 @@ struct ANGLEShaderSymbol {
     ANGLEShaderSymbolType symbolType;
     String name;
     String mappedName;
-    ShDataType dataType;
+    sh::GLenum dataType;
     int size;
     bool isArray;
 
     bool isSampler() const
     {
         return symbolType == SHADER_SYMBOL_TYPE_UNIFORM
-            && (dataType == SH_SAMPLER_2D
-            || dataType == SH_SAMPLER_CUBE
-            || dataType == SH_SAMPLER_2D_RECT_ARB
-            || dataType == SH_SAMPLER_EXTERNAL_OES);
+            && (dataType == GL_SAMPLER_2D
+            || dataType == GL_SAMPLER_CUBE
+            || dataType == GL_SAMPLER_2D_RECT_ARB
+            || dataType == GL_SAMPLER_EXTERNAL_OES);
     }
 };
 
 class ANGLEWebKitBridge {
 public:
 
-    ANGLEWebKitBridge(ShShaderOutput = SH_GLSL_OUTPUT, ShShaderSpec = SH_WEBGL_SPEC);
+    ANGLEWebKitBridge(ShShaderOutput = SH_GLSL_COMPATIBILITY_OUTPUT, ShShaderSpec = SH_WEBGL_SPEC);
     ~ANGLEWebKitBridge();
     
     ShBuiltInResources getResources() { return m_resources; }
diff -rupN qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp
--- qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp	2018-01-15 10:38:10.000000000 +0100
+++ qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp	2018-01-29 13:41:40.758804482 +0100
@@ -80,7 +80,7 @@ PassRefPtr<GraphicsContext3D> GraphicsCo
 GraphicsContext3D::GraphicsContext3D(GraphicsContext3D::Attributes attributes, HostWindow*, GraphicsContext3D::RenderStyle renderStyle)
     : m_currentWidth(0)
     , m_currentHeight(0)
-    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT)
+    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_COMPATIBILITY_OUTPUT)
     , m_attrs(attributes)
     , m_texture(0)
     , m_fbo(0)
diff -rupN qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp
--- qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp	2018-01-15 10:38:10.000000000 +0100
+++ qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp	2018-01-29 13:41:40.758804482 +0100
@@ -41,7 +41,7 @@ PassRefPtr<GraphicsContext3D> GraphicsCo
 GraphicsContext3D::GraphicsContext3D(GraphicsContext3D::Attributes attrs, HostWindow* hostWindow, GraphicsContext3D::RenderStyle renderStyle)
     : m_currentWidth(0)
     , m_currentHeight(0)
-    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT)
+    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_COMPATIBILITY_OUTPUT)
     , m_attrs(attrs)
     , m_renderStyle(renderStyle)
     , m_texture(0)
diff -rupN qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp
--- qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp	2018-01-15 10:38:10.000000000 +0100
+++ qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp	2018-01-29 13:41:40.758804482 +0100
@@ -172,7 +172,7 @@ String Extensions3DOpenGLCommon::getTran
 
     String translatedShaderSource;
     String shaderInfoLog;
-    int extraCompileOptions = SH_MAP_LONG_VARIABLE_NAMES | SH_CLAMP_INDIRECT_ARRAY_BOUNDS;
+    int extraCompileOptions = SH_CLAMP_INDIRECT_ARRAY_BOUNDS;
 
     if (m_requiresBuiltInFunctionEmulation)
         extraCompileOptions |= SH_EMULATE_BUILT_IN_FUNCTIONS;
diff -rupN qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp
--- qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp	2018-01-15 10:38:10.000000000 +0100
+++ qtwebkit-bd0657f98aff85b9f06d85a8cf4da6a27f61a56e-new/Source/WebCore/platform/graphics/qt/GraphicsContext3DQt.cpp	2018-01-29 13:41:40.758804482 +0100
@@ -428,7 +428,7 @@ GraphicsContext3D::GraphicsContext3D(Gra
     , m_multisampleColorBuffer(0)
     , m_functions(0)
     , m_private(adoptPtr(new GraphicsContext3DPrivate(this, hostWindow, renderStyle)))
-    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT)
+    , m_compiler(isGLES2Compliant() ? SH_ESSL_OUTPUT : SH_GLSL_COMPATIBILITY_OUTPUT)
 {
     if (!m_private->m_surface || !m_private->m_platformContext) {
         LOG_ERROR("GraphicsContext3D: GL context creation failed.");