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 ¶m = *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 ¶m = *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())
{