Title: [283667] trunk
Revision
283667
Author
[email protected]
Date
2021-10-06 14:45:18 -0700 (Wed, 06 Oct 2021)

Log Message

Shadertoy "truchet district" fails to compile with error: Internal error compiling shader with Metal backend"
https://bugs.webkit.org/show_bug.cgi?id=229378
<rdar://problem/82299053>

Reviewed by Kenneth Russell.

Source/ThirdParty/ANGLE:

Change TranslatorMetalDirect to prefix '_u' to all user defined variables.
Clean up builtins like samplers and ANGLE structs that were being
accidently promoted to userDefined variables.

* src/compiler/translator/TranslatorMetalDirect.cpp:
(sh::GetMslKeywords):
* src/compiler/translator/TranslatorMetalDirect/Name.cpp:
(Name::emit const):
* src/compiler/translator/TranslatorMetalDirect/SymbolEnv.cpp:
(SymbolEnv::getTextureEnv):
(SymbolEnv::getSamplerStruct):
(sh::GetTextureTypeName):
* src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
(rx::mtl::GenerateTransformFeedbackVaryingOutput):

LayoutTests:

Add a test testing Metal reserved words and standard library macros.

* webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2-expected.txt: Added.
* webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2.html: Added.
* webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html: Added.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (283666 => 283667)


--- trunk/LayoutTests/ChangeLog	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/LayoutTests/ChangeLog	2021-10-06 21:45:18 UTC (rev 283667)
@@ -1,3 +1,18 @@
+2021-10-06  Kyle Piddington  <[email protected]>
+
+        Shadertoy "truchet district" fails to compile with error: Internal error compiling shader with Metal backend"
+        https://bugs.webkit.org/show_bug.cgi?id=229378
+        <rdar://problem/82299053>
+
+        Reviewed by Kenneth Russell.
+
+        Add a test testing Metal reserved words and standard library macros.
+
+        * webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2-expected.txt: Added.
+        * webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2.html: Added.
+        * webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html: Added.
+
+
 2021-10-06  Ayumi Kojima  <[email protected]>
 
         [ iOS 15 ] http/tests/websocket/tests/hybi/close-code-and-reason.html is failing.

Added: trunk/LayoutTests/webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2-expected.txt (0 => 283667)


--- trunk/LayoutTests/webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2-expected.txt	2021-10-06 21:45:18 UTC (rev 283667)
@@ -0,0 +1,4 @@
+This test runs the WebGL Test listed below in an iframe and reports PASS or FAIL.
+
+Test: ../../../resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html?webglVersion=2
+[ PASS ] All tests passed

Added: trunk/LayoutTests/webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2.html (0 => 283667)


--- trunk/LayoutTests/webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2.html	                        (rev 0)
+++ trunk/LayoutTests/webgl/pending/conformance/glsl/misc/shader-with-reserved-words-2.html	2021-10-06 21:45:18 UTC (rev 283667)
@@ -0,0 +1,18 @@
+<!-- This file is auto-generated by Tools/Scripts/update-webgl-conformance-tests. DO NOT EDIT -->
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>WebGL Conformance Test Wrapper for shader-with-reserved-words-2.html</title>
+<script type="text/_javascript_" src=""
+<script type="text/_javascript_" src=""
+</head>
+<body>
+<p>This test runs the WebGL Test listed below in an iframe and reports PASS or FAIL.</p>
+Test: <a href=""
+<div id="iframe">
+<iframe src="" width="800" height="600"></iframe>
+</div>
+<div id="result"></div>
+</body>
+</html>

Added: trunk/LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html (0 => 283667)


--- trunk/LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html	                        (rev 0)
+++ trunk/LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html	2021-10-06 21:45:18 UTC (rev 283667)
@@ -0,0 +1,226 @@
+<!--
+Copyright (c) 2021 The Khronos Group Inc.
+Use of this source code is governed by an MIT-style license that can be
+found in the LICENSE.txt file.
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>WebGL GLSL Conformance Tests - Non Reserved Words</title>
+<link rel="stylesheet" href=""
+<link rel="stylesheet" href=""
+<script src=""
+<script src=""
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+<script id="vertexShader0" type="text/something-not-_javascript_">
+struct $replaceMe {
+  vec4 $replaceMe;
+};
+struct Foo {
+  $replaceMe $replaceMe;
+};
+attribute vec4 position;
+void main()
+{
+    Foo f;
+    f.$replaceMe.$replaceMe = position;
+    gl_Position = f.$replaceMe.$replaceMe;
+}
+</script>
+<script id="fragmentShader0" type="text/something-not-_javascript_">
+precision mediump float;
+vec4 $replaceMe() {
+    return vec4(0,1,0,1);
+}
+void main()
+{
+    gl_FragColor = $replaceMe();
+}
+</script>
+<script id="vertexShader1" type="text/something-not-_javascript_">
+attribute vec4 $replaceMe;
+void main()
+{
+    gl_Position = $replaceMe;
+}
+</script>
+<script id="fragmentShader1" type="text/something-not-_javascript_">
+precision mediump float;
+vec4 foo(vec4 $replaceMe) {
+  return $replaceMe;
+}
+void main()
+{
+    gl_FragColor = foo(vec4(1,0,1,1));
+}
+</script>
+<script id="vertexShader2" type="text/something-not-_javascript_">
+varying vec4 $replaceMe;
+attribute vec4 position;
+void main()
+{
+    gl_Position = position;
+    $replaceMe = position;
+}
+</script>
+<script id="fragmentShader2" type="text/something-not-_javascript_">
+precision mediump float;
+varying vec4 $replaceMe;
+void main()
+{
+    gl_FragColor = $replaceMe;
+}
+</script>
+<script id="vertexShader3" type="text/something-not-_javascript_">
+attribute vec4 position;
+void main()
+{
+    gl_Position = position;
+}
+</script>
+<script id="fragmentShader3" type="text/something-not-_javascript_">
+precision mediump float;
+uniform vec4 $replaceMe;
+void main()
+{
+    gl_FragColor = $replaceMe;
+}
+</script>
+<script>
+"use strict";
+
+var MetalWords = [
+  "alignas",
+  "alignof",
+  "as_type",
+  "and",
+  "auto",
+  "catch",
+  "char",
+  "const_cast",
+  "constant",
+  "constexpr",
+  "decltype",
+  "delete",
+  "device",
+  "dynamic_cast",
+  "explicit",
+  "export",
+  "fragment",
+  "friend",
+  "int16_t",
+  "int32_t",
+  "int64_t",
+  "int8_t",
+  "kernel",
+  "main0",
+  "metal",
+  "mutable",
+  "new",
+  "noexcept",
+  "nullptr_t",
+  "nullptr",
+  "operator",
+  "override",
+  "or",
+  "private",
+  "protected",
+  "ptrdiff_t",
+  "ray_data",
+  "register",
+  "signed",
+  "size_t",
+  "stage_in",
+  "static_assert",
+  "static_cast",
+  "thread_local",
+  "thread",
+  "threadgroup_imageblock",
+  "threadgroup",
+  "throw",
+  "try",
+  "typeid",
+  "typename",
+  "uchar",
+  "uint16_t",
+  "uint32_t",
+  "uint64_t",
+  "uint8_t",
+  "ushort",
+  "vertex",
+  "virtual",
+  "wchar_t",
+  "xor",
+  "NAN",
+  "INFINITY",
+  "Pragma",
+  "_Pragma",
+  "ANGLE_1",
+  "INT_MAX",
+];
+
+
+description();
+
+var wtu = WebGLTestUtils;
+var gl = wtu.create3DContext();
+
+var sources = [];
+for (var ii = 0; ii < 4; ++ii) {
+  var vsrc = document.getElementById("vertexShader" + ii).text;
+  var fsrc = document.getElementById("fragmentShader" + ii).text;
+  sources.push({vsrc: vsrc, fsrc: fsrc});
+}
+
+var badWordNdx = 0;
+var listNdx = 0;
+
+function testNextWord() {
+  var list = MetalWords;
+  if (listNdx >= list.length) {
+      finishTest();
+      return;
+  }
+  testWord(list[listNdx]);
+  ++listNdx;
+  setTimeout(testNextWord, 0);
+}
+testNextWord();
+
+function testWord(word) {
+  debug("");
+  debug("testing: " + word);
+
+  sources.forEach(src ="" {
+    var vs = src.vsrc.replace(/\$replaceMe/g, word);
+    var fs = src.fsrc.replace(/\$replaceMe/g, word);
+
+    var success = true;
+    var program = wtu.loadProgram(gl, vs, fs, function(msg) {
+      debug(msg);
+      success = false;
+    }, true);
+    if (success) {
+      testPassed("shader with: '" + word + "' compiled");
+    } else {
+      testFailed("shader with: '" + word + "' failed to compile");
+    }
+    if (program) {
+      gl.deleteProgram(program);
+    }
+    wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no GL errors");
+  });
+}
+
+
+var successfullyParsed = true;
+</script>
+</body>
+</html>
+
+

Modified: trunk/Source/ThirdParty/ANGLE/ANGLE.xcodeproj/project.pbxproj (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/ANGLE.xcodeproj/project.pbxproj	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/ANGLE.xcodeproj/project.pbxproj	2021-10-06 21:45:18 UTC (rev 283667)
@@ -451,7 +451,6 @@
 		DF83E2422639FCD5000825EF /* ToposortStructs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF81FF332581919700894E24 /* ToposortStructs.cpp */; };
 		DF83E2432639FCD5000825EF /* RewritePipelines.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF81FF3C2581919700894E24 /* RewritePipelines.cpp */; };
 		DF83E2442639FCD5000825EF /* NameEmbeddedUniformStructsMetal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FFA0C2C525CB6A7600105306 /* NameEmbeddedUniformStructsMetal.cpp */; };
-		DF83E2452639FCD5000825EF /* RewriteKeywords.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF81FF4F2581919700894E24 /* RewriteKeywords.cpp */; };
 		DF83E2462639FCD5000825EF /* DiscoverDependentFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF81FF292581919700894E24 /* DiscoverDependentFunctions.cpp */; };
 		DF83E2472639FCD5000825EF /* RewriteCaseDeclarations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF81FF582581919700894E24 /* RewriteCaseDeclarations.cpp */; };
 		DF83E2482639FCD5000825EF /* EmitMetal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF81FF2D2581919700894E24 /* EmitMetal.cpp */; };
@@ -3842,7 +3841,6 @@
 				DF83E2742639FD33000825EF /* RewriteDoWhile.cpp in Sources */,
 				DF83E25C2639FD33000825EF /* RewriteExpressionsWithShaderStorageBlock.cpp in Sources */,
 				DF83E27F2639FD33000825EF /* RewriteInterpolateAtOffset.cpp in Sources */,
-				DF83E2452639FCD5000825EF /* RewriteKeywords.cpp in Sources */,
 				DF83E2342639FCD5000825EF /* RewriteOutArgs.cpp in Sources */,
 				DF83E2432639FCD5000825EF /* RewritePipelines.cpp in Sources */,
 				DF83E2512639FD33000825EF /* RewriteRepeatedAssignToSwizzled.cpp in Sources */,

Modified: trunk/Source/ThirdParty/ANGLE/ChangeLog (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/ChangeLog	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/ChangeLog	2021-10-06 21:45:18 UTC (rev 283667)
@@ -1,3 +1,26 @@
+2021-10-06  Kyle Piddington  <[email protected]>
+
+        Shadertoy "truchet district" fails to compile with error: Internal error compiling shader with Metal backend"
+        https://bugs.webkit.org/show_bug.cgi?id=229378
+        <rdar://problem/82299053>
+
+        Reviewed by Kenneth Russell.
+
+        Change TranslatorMetalDirect to prefix '_u' to all user defined variables.
+        Clean up builtins like samplers and ANGLE structs that were being
+        accidently promoted to userDefined variables.
+
+        * src/compiler/translator/TranslatorMetalDirect.cpp:
+        (sh::GetMslKeywords):
+        * src/compiler/translator/TranslatorMetalDirect/Name.cpp:
+        (Name::emit const):
+        * src/compiler/translator/TranslatorMetalDirect/SymbolEnv.cpp:
+        (SymbolEnv::getTextureEnv):
+        (SymbolEnv::getSamplerStruct):
+        (sh::GetTextureTypeName):
+        * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
+        (rx::mtl::GenerateTransformFeedbackVaryingOutput):
+
 2021-09-28  Alex Christensen  <[email protected]>
 
         Mostly fix Mac CMake build

Modified: trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/IdGen.cpp (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/IdGen.cpp	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/IdGen.cpp	2021-10-06 21:45:18 UTC (rev 283667)
@@ -9,9 +9,7 @@
 #include <limits>
 #include <unordered_map>
 #include <unordered_set>
-
-#include "compiler/translator/TranslatorMetalDirect/RewriteKeywords.h"
-
+#include "compiler/translator/TranslatorMetalDirect/IdGen.h"
 using namespace sh;
 
 ////////////////////////////////////////////////////////////////////////////////

Modified: trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/Name.cpp (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/Name.cpp	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/Name.cpp	2021-10-06 21:45:18 UTC (rev 283667)
@@ -69,11 +69,20 @@
     switch (mSymbolType)
     {
         case SymbolType::BuiltIn:
-        case SymbolType::UserDefined:
             ASSERT(!mRawName.empty());
             out << mRawName;
             break;
-
+        case SymbolType::UserDefined:
+            ASSERT(!mRawName.empty());
+            if (mRawName != "main")
+            {
+                out << kUserDefinedNamePrefix << mRawName;
+            }
+            else
+            {
+                out << mRawName;
+            }
+            break;
         case SymbolType::AngleInternal:
             ASSERT(!mRawName.empty());
             if (mRawName.beginsWith(kAngleInternalPrefix))

Deleted: trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/RewriteKeywords.cpp (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/RewriteKeywords.cpp	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/RewriteKeywords.cpp	2021-10-06 21:45:18 UTC (rev 283667)
@@ -1,464 +0,0 @@
-//
-// Copyright 2020 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-#include <cctype>
-#include <cstring>
-#include <limits>
-#include <unordered_map>
-#include <unordered_set>
-#include <map>
-
-#include "compiler/translator/TranslatorMetalDirect/AstHelpers.h"
-#include "compiler/translator/TranslatorMetalDirect/Debug.h"
-#include "compiler/translator/TranslatorMetalDirect/RewriteKeywords.h"
-#include "compiler/translator/tree_util/IntermRebuild.h"
-
-using namespace sh;
-
-////////////////////////////////////////////////////////////////////////////////
-
-namespace
-{
-
-template <typename T>
-using Remapping = std::unordered_map<const T *, const T *>;
-
-class Rewriter : public TIntermRebuild
-{
-  private:
-    const std::set<ImmutableString> &mKeywords;
-    IdGen &mIdGen;
-    Remapping<TField> modifiedFields;
-    Remapping<TFieldList> mFieldLists;
-    Remapping<TFunction> mFunctions;
-    Remapping<TInterfaceBlock> mInterfaceBlocks;
-    Remapping<TStructure> mStructures;
-    Remapping<TVariable> mVariables;
-    std::map<ImmutableString, std::string> mPredefinedNames;
-    std::string mNewNameBuffer;
-
-  private:
-    template <typename T>
-    ImmutableString maybeCreateNewName(T const &object)
-    {
-        if (needsRenaming(object, false))
-        {
-            auto it = mPredefinedNames.find(Name(object).rawName());
-            if (it != mPredefinedNames.end())
-            {
-                return ImmutableString(it->second);
-            }
-            return mIdGen.createNewName(Name(object)).rawName();
-        }
-        return Name(object).rawName();
-    }
-
-    const TField *createRenamed(const TField &field)
-    {
-        auto *renamed =
-            new TField(const_cast<TType *>(&getRenamedOrOriginal(*field.type())),
-                       maybeCreateNewName(field), field.line(), field.symbolType());
-
-        return renamed;
-    }
-
-    const TFieldList *createRenamed(const TFieldList &fieldList)
-    {
-        auto *renamed = new TFieldList();
-        for (const TField *field : fieldList)
-        {
-            renamed->push_back(const_cast<TField *>(&getRenamedOrOriginal(*field)));
-        }
-        return renamed;
-    }
-
-    const TFunction *createRenamed(const TFunction &function)
-    {
-        auto *renamed =
-            new TFunction(&mSymbolTable, maybeCreateNewName(function), function.symbolType(),
-                          &getRenamedOrOriginal(function.getReturnType()),
-                          function.isKnownToNotHaveSideEffects());
-
-        const size_t paramCount = function.getParamCount();
-        for (size_t i = 0; i < paramCount; ++i)
-        {
-            const TVariable &param = *function.getParam(i);
-            renamed->addParameter(&getRenamedOrOriginal(param));
-        }
-
-        if (function.isDefined())
-        {
-            renamed->setDefined();
-        }
-
-        if (function.hasPrototypeDeclaration())
-        {
-            renamed->setHasPrototypeDeclaration();
-        }
-
-        return renamed;
-    }
-
-    const TInterfaceBlock *createRenamed(const TInterfaceBlock &interfaceBlock)
-    {
-        TLayoutQualifier layoutQualifier = TLayoutQualifier::Create();
-        layoutQualifier.blockStorage     = interfaceBlock.blockStorage();
-        layoutQualifier.binding          = interfaceBlock.blockBinding();
-
-        auto *renamed =
-            new TInterfaceBlock(&mSymbolTable, maybeCreateNewName(interfaceBlock),
-                                &getRenamedOrOriginal(interfaceBlock.fields()), layoutQualifier,
-                                interfaceBlock.symbolType(), interfaceBlock.extension());
-
-        return renamed;
-    }
-
-    const TStructure *createRenamed(const TStructure &structure)
-    {
-        auto *renamed =
-            new TStructure(&mSymbolTable, maybeCreateNewName(structure),
-                           &getRenamedOrOriginal(structure.fields()), structure.symbolType());
-
-        renamed->setAtGlobalScope(structure.atGlobalScope());
-
-        return renamed;
-    }
-
-    const TType *createRenamed(const TType &type)
-    {
-        TType *renamed;
-
-        if (const TStructure *structure = type.getStruct())
-        {
-            renamed = new TType(&getRenamedOrOriginal(*structure), type.isStructSpecifier());
-            renamed->setQualifier(type.getQualifier());
-        }
-        else if (const TInterfaceBlock *interfaceBlock = type.getInterfaceBlock())
-        {
-            renamed = new TType(&getRenamedOrOriginal(*interfaceBlock), type.getQualifier(),
-                                type.getLayoutQualifier());
-        }
-        else
-        {
-            LOGIC_ERROR();  // Can't rename built-in types.
-            renamed = nullptr;
-        }
-
-        if (type.isArray())
-        {
-            renamed->makeArrays(type.getArraySizes());
-        }
-        renamed->setPrecise(type.isPrecise());
-        renamed->setInvariant(type.isInvariant());
-        renamed->setMemoryQualifier(type.getMemoryQualifier());
-        renamed->setLayoutQualifier(type.getLayoutQualifier());
-
-        return renamed;
-    }
-
-    const TVariable *createRenamed(const TVariable &variable)
-    {
-        auto *renamed = new TVariable(&mSymbolTable, maybeCreateNewName(variable),
-                                      &getRenamedOrOriginal(variable.getType()),
-                                      variable.symbolType(), variable.extension());
-
-        return renamed;
-    }
-
-    template <typename T>
-    const T *tryGetRenamedImpl(const T &object, Remapping<T> *remapping)
-    {
-        if (!needsRenaming(object, true))
-        {
-            return nullptr;
-        }
-
-        if (remapping)
-        {
-            auto it = remapping->find(&object);
-            if (it != remapping->end())
-            {
-                return it->second;
-            }
-        }
-
-        const T *renamedObject = createRenamed(object);
-
-        if (remapping)
-        {
-            (*remapping)[&object] = renamedObject;
-        }
-
-        return renamedObject;
-    }
-
-    const TField *tryGetRenamed(const TField &field)
-    {
-        return tryGetRenamedImpl(field, &modifiedFields);
-    }
-
-    const TFieldList *tryGetRenamed(const TFieldList &fieldList)
-    {
-        return tryGetRenamedImpl(fieldList, &mFieldLists);
-    }
-
-    const TFunction *tryGetRenamed(const TFunction &func)
-    {
-        return tryGetRenamedImpl(func, &mFunctions);
-    }
-
-    const TInterfaceBlock *tryGetRenamed(const TInterfaceBlock &interfaceBlock)
-    {
-        return tryGetRenamedImpl(interfaceBlock, &mInterfaceBlocks);
-    }
-
-    const TStructure *tryGetRenamed(const TStructure &structure)
-    {
-        return tryGetRenamedImpl(structure, &mStructures);
-    }
-
-    const TType *tryGetRenamed(const TType &type)
-    {
-        return tryGetRenamedImpl(type, static_cast<Remapping<TType> *>(nullptr));
-    }
-
-    const TVariable *tryGetRenamed(const TVariable &variable)
-    {
-        return tryGetRenamedImpl(variable, &mVariables);
-    }
-
-    template <typename T>
-    const T &getRenamedOrOriginal(const T &object)
-    {
-        const T *renamed = tryGetRenamed(object);
-        if (renamed)
-        {
-            return *renamed;
-        }
-        return object;
-    }
-
-    template <typename T>
-    bool needsRenamingImpl(const T &object) const
-    {
-        const SymbolType symbolType = object.symbolType();
-        switch (symbolType)
-        {
-            case SymbolType::BuiltIn:
-            case SymbolType::AngleInternal:
-            case SymbolType::Empty:
-                return false;
-
-            case SymbolType::UserDefined:
-                break;
-        }
-
-        const ImmutableString name = Name(object).rawName();
-        if (mKeywords.find(name) != mKeywords.end())
-        {
-            return true;
-        }
-
-        if (name.beginsWith(kAngleInternalPrefix))
-        {
-            return true;
-        }
-
-        return false;
-    }
-
-    bool needsRenaming(const TField &field, bool recursive) const
-    {
-        return needsRenamingImpl(field) || (recursive && needsRenaming(*field.type(), true));
-    }
-
-    bool needsRenaming(const TFieldList &fieldList, bool recursive) const
-    {
-        ASSERT(recursive);
-        for (const TField *field : fieldList)
-        {
-            if (needsRenaming(*field, true))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    bool needsRenaming(const TFunction &function, bool recursive) const
-    {
-        if (needsRenamingImpl(function))
-        {
-            return true;
-        }
-
-        if (!recursive)
-        {
-            return false;
-        }
-
-        const size_t paramCount = function.getParamCount();
-        for (size_t i = 0; i < paramCount; ++i)
-        {
-            const TVariable &param = *function.getParam(i);
-            if (needsRenaming(param, true))
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    bool needsRenaming(const TInterfaceBlock &interfaceBlock, bool recursive) const
-    {
-        return needsRenamingImpl(interfaceBlock) ||
-               (recursive && needsRenaming(interfaceBlock.fields(), true));
-    }
-
-    bool needsRenaming(const TStructure &structure, bool recursive) const
-    {
-        return needsRenamingImpl(structure) ||
-               (recursive && needsRenaming(structure.fields(), true));
-    }
-
-    bool needsRenaming(const TType &type, bool recursive) const
-    {
-        if (const TStructure *structure = type.getStruct())
-        {
-            return needsRenaming(*structure, recursive);
-        }
-        else if (const TInterfaceBlock *interfaceBlock = type.getInterfaceBlock())
-        {
-            return needsRenaming(*interfaceBlock, recursive);
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    bool needsRenaming(const TVariable &variable, bool recursive) const
-    {
-        return needsRenamingImpl(variable) ||
-               (recursive && needsRenaming(variable.getType(), true));
-    }
-
-  public:
-    Rewriter(TCompiler &compiler, IdGen &idGen, const std::set<ImmutableString> &keywords)
-        : TIntermRebuild(compiler, false, true), mKeywords(keywords), mIdGen(idGen)
-    {}
-
-    PostResult visitSymbolPost(TIntermSymbol &symbolNode)
-    {
-        const TVariable &var = symbolNode.variable();
-        if (needsRenaming(var, true))
-        {
-            const TVariable &rVar = getRenamedOrOriginal(var);
-            return *new TIntermSymbol(&rVar);
-        }
-        return symbolNode;
-    }
-
-    PostResult visitFunctionPrototype(TIntermFunctionPrototype &funcProtoNode)
-    {
-        const TFunction &func = *funcProtoNode.getFunction();
-        if (needsRenaming(func, true))
-        {
-            const TFunction &rFunc = getRenamedOrOriginal(func);
-            return *new TIntermFunctionPrototype(&rFunc);
-        }
-        return funcProtoNode;
-    }
-
-    PostResult visitDeclarationPost(TIntermDeclaration &declNode) override
-    {
-        Declaration decl     = ViewDeclaration(declNode);
-        const TVariable &var = decl.symbol.variable();
-        if (needsRenaming(var, true))
-        {
-            const TVariable &rVar = getRenamedOrOriginal(var);
-            return *new TIntermDeclaration(&rVar, decl.initExpr);
-        }
-        return declNode;
-    }
-
-    PostResult visitFunctionDefinitionPost(TIntermFunctionDefinition &funcDefNode) override
-    {
-        TIntermFunctionPrototype &funcProtoNode = *funcDefNode.getFunctionPrototype();
-        const TFunction &func                   = *funcProtoNode.getFunction();
-        if (needsRenaming(func, true))
-        {
-            const TFunction &rFunc = getRenamedOrOriginal(func);
-            auto *rFuncProtoNode   = new TIntermFunctionPrototype(&rFunc);
-            return *new TIntermFunctionDefinition(rFuncProtoNode, funcDefNode.getBody());
-        }
-        return funcDefNode;
-    }
-
-    PostResult visitAggregatePost(TIntermAggregate &aggregateNode) override
-    {
-        if (aggregateNode.isConstructor())
-        {
-            const TType &type = aggregateNode.getType();
-            if (needsRenaming(type, true))
-            {
-                const TType &rType = getRenamedOrOriginal(type);
-                return TIntermAggregate::CreateConstructor(rType, aggregateNode.getSequence());
-            }
-        }
-        else
-        {
-            const TFunction &func = *aggregateNode.getFunction();
-            if (needsRenaming(func, true))
-            {
-                const TFunction &rFunc = getRenamedOrOriginal(func);
-                switch (aggregateNode.getOp())
-                {
-                    case TOperator::EOpCallFunctionInAST:
-                        return TIntermAggregate::CreateFunctionCall(rFunc,
-                                                                    aggregateNode.getSequence());
-
-                    case TOperator::EOpCallInternalRawFunction:
-                        return TIntermAggregate::CreateRawFunctionCall(rFunc,
-                                                                       aggregateNode.getSequence());
-
-                    default:
-                        return TIntermAggregate::CreateBuiltInFunctionCall(
-                            rFunc, aggregateNode.getSequence());
-                }
-            }
-        }
-        return aggregateNode;
-    }
-
-    const void predefineName(const ImmutableString name, std::string prePopulatedName)
-    {
-        mPredefinedNames[name] = prePopulatedName;
-    }
-};
-
-}  // anonymous namespace
-
-////////////////////////////////////////////////////////////////////////////////
-
-bool sh::RewriteKeywords(TCompiler &compiler,
-                         TIntermBlock &root,
-                         IdGen &idGen,
-                         const std::set<ImmutableString> &keywords)
-{
-    Rewriter rewriter(compiler, idGen, keywords);
-    const auto &inputAttrs     = compiler.getAttributes();
-    for(const auto & var : inputAttrs)
-    {
-        rewriter.predefineName(ImmutableString(var.name), var.mappedName);
-    }
-    if (!rewriter.rebuildRoot(root))
-    {
-        return false;
-    }
-    return true;
-}

Deleted: trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/RewriteKeywords.h (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/RewriteKeywords.h	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/RewriteKeywords.h	2021-10-06 21:45:18 UTC (rev 283667)
@@ -1,27 +0,0 @@
-//
-// Copyright 2020 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-
-#ifndef COMPILER_TRANSLATOR_TRANSLATORMETALDIRECT_REWRITEKEYWORDS_H_
-#define COMPILER_TRANSLATOR_TRANSLATORMETALDIRECT_REWRITEKEYWORDS_H_
-
-#include <set>
-
-#include "common/angleutils.h"
-#include "compiler/translator/Compiler.h"
-#include "compiler/translator/TranslatorMetalDirect/IdGen.h"
-
-namespace sh
-{
-
-// This walks the tree and renames all names that conflict with the input `keywords`.
-ANGLE_NO_DISCARD bool RewriteKeywords(TCompiler &compiler,
-                                      TIntermBlock &root,
-                                      IdGen &idGen,
-                                      const std::set<ImmutableString> &keywords);
-
-}  // namespace sh
-
-#endif  // COMPILER_TRANSLATOR_TRANSLATORMETALDIRECT_REWRITEKEYWORDS_H_

Modified: trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/SymbolEnv.cpp (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/SymbolEnv.cpp	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/SymbolEnv.cpp	2021-10-06 21:45:18 UTC (rev 283667)
@@ -390,13 +390,12 @@
     if (env == nullptr)
     {
         auto *textureType = new TType(samplerType);
-        auto *texture     = new TField(textureType, ImmutableString("texture"), kNoSourceLoc,
-                                   SymbolType::UserDefined);
+        auto *texture =
+            new TField(textureType, ImmutableString("texture"), kNoSourceLoc, SymbolType::BuiltIn);
         markAsPointer(*texture, AddressSpace::Thread);
 
-        auto *sampler =
-            new TField(new TType(&getSamplerStruct(), false), ImmutableString("sampler"),
-                       kNoSourceLoc, SymbolType::UserDefined);
+        auto *sampler = new TField(new TType(&getSamplerStruct(), false),
+                                   ImmutableString("sampler"), kNoSourceLoc, SymbolType::BuiltIn);
         markAsPointer(*sampler, AddressSpace::Thread);
 
         std::string envName;
@@ -415,7 +414,7 @@
     if (!mSampler)
     {
         mSampler = new TStructure(&mSymbolTable, ImmutableString("metal::sampler"),
-                                  new TFieldList(), SymbolType::UserDefined);
+                                  new TFieldList(), SymbolType::BuiltIn);
     }
     return *mSampler;
 }
@@ -701,5 +700,5 @@
 
 #undef HANDLE_TEXTURE_NAME
 
-    return Name(name, SymbolType::UserDefined);
+    return Name(name, SymbolType::BuiltIn);
 }

Modified: trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.cpp (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.cpp	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.cpp	2021-10-06 21:45:18 UTC (rev 283667)
@@ -20,7 +20,6 @@
 #include "compiler/translator/TranslatorMetalDirect/Name.h"
 #include "compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.h"
 #include "compiler/translator/TranslatorMetalDirect/RewriteCaseDeclarations.h"
-#include "compiler/translator/TranslatorMetalDirect/RewriteKeywords.h"
 #include "compiler/translator/TranslatorMetalDirect/RewriteOutArgs.h"
 #include "compiler/translator/TranslatorMetalDirect/RewritePipelines.h"
 #include "compiler/translator/TranslatorMetalDirect/RewriteUnaddressableReferences.h"
@@ -58,8 +57,8 @@
 namespace
 {
 
-constexpr Name kCoverageMaskField("coverageMask", SymbolType::UserDefined);
-constexpr Name kEmuInstanceIDField("emulatedInstanceID", SymbolType::UserDefined);
+constexpr Name kCoverageMaskField("coverageMask", SymbolType::AngleInternal);
+constexpr Name kEmuInstanceIDField("emulatedInstanceID", SymbolType::AngleInternal);
 constexpr Name kSampleMaskWriteFuncName("writeSampleMask", SymbolType::AngleInternal);
 #if 0
 constexpr Name kDiscardWrapperFuncName("DiscardWrapper");
@@ -67,8 +66,8 @@
 constexpr Name kEmulatedDepthRangeParams("DepthRangeParams");
 constexpr Name kUniformsBlockName("AngleUniforms");
 constexpr Name kUniformsVarName(kUniformsVar);
-constexpr Name kFlippedPointCoordName("flippedPointCoord", SymbolType::UserDefined);
-constexpr Name kFlippedFragCoordName("flippedFragCoord", SymbolType::UserDefined);
+constexpr Name kFlippedPointCoordName("flippedPointCoord", SymbolType::AngleInternal);
+constexpr Name kFlippedFragCoordName("flippedFragCoord", SymbolType::AngleInternal);
 
 constexpr const TVariable kgl_VertexIDMetal(
     BuiltInId::gl_VertexID,
@@ -824,91 +823,6 @@
     return negFlipY;
 }
 
-static std::set<ImmutableString> GetMslKeywords()
-{
-    std::set<ImmutableString> keywords;
-
-    keywords.emplace("alignas");
-    keywords.emplace("alignof");
-    keywords.emplace("as_type");
-    keywords.emplace("auto");
-    keywords.emplace("catch");
-    keywords.emplace("char");
-    keywords.emplace("class");
-    keywords.emplace("const_cast");
-    keywords.emplace("constant");
-    keywords.emplace("constexpr");
-    keywords.emplace("decltype");
-    keywords.emplace("delete");
-    keywords.emplace("device");
-    keywords.emplace("dynamic_cast");
-    keywords.emplace("enum");
-    keywords.emplace("explicit");
-    keywords.emplace("export");
-    keywords.emplace("extern");
-    keywords.emplace("fragment");
-    keywords.emplace("friend");
-    keywords.emplace("goto");
-    keywords.emplace("half");
-    keywords.emplace("inline");
-    keywords.emplace("int16_t");
-    keywords.emplace("int32_t");
-    keywords.emplace("int64_t");
-    keywords.emplace("int8_t");
-    keywords.emplace("kernel");
-    keywords.emplace("long");
-    keywords.emplace("main0");
-    keywords.emplace("metal");
-    keywords.emplace("mutable");
-    keywords.emplace("namespace");
-    keywords.emplace("new");
-    keywords.emplace("noexcept");
-    keywords.emplace("nullptr_t");
-    keywords.emplace("nullptr");
-    keywords.emplace("operator");
-    keywords.emplace("override");
-    keywords.emplace("private");
-    keywords.emplace("protected");
-    keywords.emplace("ptrdiff_t");
-    keywords.emplace("public");
-    keywords.emplace("ray_data");
-    keywords.emplace("register");
-    keywords.emplace("short");
-    keywords.emplace("signed");
-    keywords.emplace("size_t");
-    keywords.emplace("sizeof");
-    keywords.emplace("stage_in");
-    keywords.emplace("static_assert");
-    keywords.emplace("static_cast");
-    keywords.emplace("static");
-    keywords.emplace("template");
-    keywords.emplace("this");
-    keywords.emplace("thread_local");
-    keywords.emplace("thread");
-    keywords.emplace("threadgroup_imageblock");
-    keywords.emplace("threadgroup");
-    keywords.emplace("throw");
-    keywords.emplace("try");
-    keywords.emplace("typedef");
-    keywords.emplace("typeid");
-    keywords.emplace("typename");
-    keywords.emplace("uchar");
-    keywords.emplace("uint16_t");
-    keywords.emplace("uint32_t");
-    keywords.emplace("uint64_t");
-    keywords.emplace("uint8_t");
-    keywords.emplace("union");
-    keywords.emplace("unsigned");
-    keywords.emplace("ushort");
-    keywords.emplace("using");
-    keywords.emplace("vertex");
-    keywords.emplace("virtual");
-    keywords.emplace("volatile");
-    keywords.emplace("wchar_t");
-    keywords.emplace("NAN");
-    return keywords;
-}
-
 static inline MetalShaderType metalShaderTypeFromGLSL(sh::GLenum shaderType)
 {
     switch (shaderType)
@@ -1377,12 +1291,6 @@
     {
         return false;
     }
-
-    if (!RewriteKeywords(*this, root, idGen, GetMslKeywords()))
-    {
-        return false;
-    }
-
     if (!ReduceInterfaceBlocks(*this, root, idGen))
     {
         return false;

Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm (283666 => 283667)


--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm	2021-10-06 21:38:11 UTC (rev 283666)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm	2021-10-06 21:45:18 UTC (rev 283667)
@@ -17,17 +17,17 @@
 {
     constexpr char kXfbBindingsMarker[]    = "@@XFB-Bindings@@";
     constexpr char kXfbOutMarker[]     = "ANGLE_@@XFB-OUT@@";
+    constexpr char kUserDefinedNamePrefix[] = "_u";  // Defined in GLSLANG/ShaderLang.h
+    template <size_t N>
+    constexpr size_t ConstStrLen(const char (&)[N])
+    {
+        static_assert(N > 0, "C++ shouldn't allow N to be zero");
 
-template <size_t N>
-constexpr size_t ConstStrLen(const char (&)[N])
-{
-    static_assert(N > 0, "C++ shouldn't allow N to be zero");
+        // The length of a string defined as a char array is the size of the array minus 1
+        // ( terminating '\0').
+        return N - 1;
+    }
 
-    // The length of a string defined as a char array is the size of the array minus 1 (the
-    // terminating '\0').
-    return N - 1;
-}
-
 std::string GetXfbBufferNameMtl(const uint32_t bufferIndex)
 {
     return "xfbBuffer" + Str(bufferIndex);
@@ -258,7 +258,7 @@
                        << "] + (gl_VertexID + ANGLE_instanceIdMod * "
                        << "ANGLE_" << std::string(sh::kUniformsVar) << ".ANGLE_xfbVerticesPerDraw) * " << stride
                        << " + " << offset << "] = " << "as_type<float>" << "("
-                       << "ANGLE_vertexOut." << varying.name;
+                       << "ANGLE_vertexOut." << kUserDefinedNamePrefix << varying.name;
 
                 if (varying.isArray())
                 {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to