Skip to content

Commit b54a2a2

Browse files
kpiddingtongrorg
authored andcommitted
Fix a number of functional regressions caused by enabling the Metal ANGLE backend by default.
https://bugs.webkit.org/show_bug.cgi?id=220895 <rdar://problem/73539537> Patch by Kyle Piddington <kpiddington@apple.com> on 2021-02-19 Reviewed by Kenneth Russell. Take two of this patch - this time with the new files FixTypeConstructors and NameEmbeddedUniformStructsMetal Fixed webgl/1.0.3/conformance/context/context-hidden-alpha.html MTL Translator direct fixes for webgl/1.0.3/conformance/glsl/constructors/glsl-construct-*vec2 tests, Plus fix for GL_VertexIndex Fix EmitMetal crash for missing function textureRect. Additional fixes for 73675990, shaders-with-invariance.html, shaders-with-uniform-structs.html, struct-specifiers-in-uniforms.html, framebuffer-object-attachment.html Fixed clamping of array elements. * ANGLE.xcodeproj/project.pbxproj: * src/compiler/translator/TranslatorMetalDirect.cpp: (sh::TranslatorMetalDirect::translateImpl): * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp: (GenMetalTraverser::emitPostQualifier): (GenMetalTraverser::visitBinary): (GenMetalTraverser::BuildFuncToName): * src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.cpp: Added. (sh::FixTypeTraverser::FixTypeTraverser): (sh::FixTypeConstructors): * src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.h: Added. * src/compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.cpp: Added. (sh::NameEmbeddedStructUniformsMetal): * src/compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.h: Added. * src/compiler/translator/TranslatorMetalDirect/Pipeline.cpp: (SaturateVectorOf): * src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp: (sh::ProgramPrelude::ProgramPrelude): * src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.cpp: (sh::Reducer::Reducer): (sh::ReduceInterfaceBlocks): * src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.h: * src/compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.cpp: * src/libANGLE/renderer/load_functions_table_autogen.cpp: * src/libANGLE/renderer/metal/ContextMtl.mm: (rx::ContextMtl::drawElementsImpl): * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.h: * src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.mm: (rx::IOSurfaceSurfaceMtl::IOSurfaceSurfaceMtl): (rx::IOSurfaceSurfaceMtl::createBackingTexture): * src/libANGLE/renderer/metal/RenderBufferMtl.mm: (rx::RenderbufferMtl::setStorageImpl): * src/libANGLE/renderer/metal/VertexArrayMtl.h: * src/libANGLE/renderer/metal/VertexArrayMtl.mm: (rx::VertexArrayMtl::getIndexBuffer): (rx::VertexArrayMtl::convertIndexBuffer): (rx::VertexArrayMtl::streamIndexBufferFromClient): * src/libANGLE/renderer/metal/mtl_utils.mm: (rx::mtl::InitializeDepthStencilTextureContentsGPU): * src/libANGLE/renderer/metal/shaders/blit.metal: * src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc: Canonical link: https://commits.webkit.org/234386@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@273200 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 0f7c6aa commit b54a2a2

23 files changed

Lines changed: 601 additions & 77 deletions

Source/ThirdParty/ANGLE/ANGLE.xcodeproj/project.pbxproj

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,9 @@
11801180
A3D3291523CFCB7700375657 /* RewriteRowMajorMatrices.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D3290F23CFCB7600375657 /* RewriteRowMajorMatrices.h */; };
11811181
A3D3291823CFCB7700375657 /* RemoveInactiveInterfaceVariables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3D3291223CFCB7600375657 /* RemoveInactiveInterfaceVariables.cpp */; };
11821182
A3D3291923CFCB7700375657 /* RemoveInactiveInterfaceVariables.h in Headers */ = {isa = PBXBuildFile; fileRef = A3D3291323CFCB7600375657 /* RemoveInactiveInterfaceVariables.h */; };
1183+
FF2D2F5425C8B14A002FB699 /* FixTypeConstructors.h in Headers */ = {isa = PBXBuildFile; fileRef = FF2D2F5225C8B14A002FB699 /* FixTypeConstructors.h */; };
1184+
FF2D2F5525C8B14A002FB699 /* FixTypeConstructors.h in Headers */ = {isa = PBXBuildFile; fileRef = FF2D2F5225C8B14A002FB699 /* FixTypeConstructors.h */; };
1185+
FF2D2F5625C8B14A002FB699 /* FixTypeConstructors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF2D2F5325C8B14A002FB699 /* FixTypeConstructors.cpp */; };
11831186
FF81FED025818D6800894E24 /* mtl_glslang_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = FF81FE8025818D6800894E24 /* mtl_glslang_utils.h */; };
11841187
FF81FED125818D6800894E24 /* ProgramMtl.h in Headers */ = {isa = PBXBuildFile; fileRef = FF81FE8125818D6800894E24 /* ProgramMtl.h */; };
11851188
FF81FED225818D6800894E24 /* DisplayMtl_api.h in Headers */ = {isa = PBXBuildFile; fileRef = FF81FE8225818D6800894E24 /* DisplayMtl_api.h */; };
@@ -1315,6 +1318,8 @@
13151318
FF81FFA22581AD0400894E24 /* clear.metal in Sources */ = {isa = PBXBuildFile; fileRef = FF81FEB125818D6800894E24 /* clear.metal */; };
13161319
FF81FFA32581AD0400894E24 /* gen_mipmap.metal in Sources */ = {isa = PBXBuildFile; fileRef = FF81FEB225818D6800894E24 /* gen_mipmap.metal */; };
13171320
FF81FFA42581AD0400894E24 /* gen_indices.metal in Sources */ = {isa = PBXBuildFile; fileRef = FF81FEB325818D6800894E24 /* gen_indices.metal */; };
1321+
FFA0C2C725CB6A7700105306 /* NameEmbeddedUniformStructsMetal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FFA0C2C525CB6A7600105306 /* NameEmbeddedUniformStructsMetal.cpp */; };
1322+
FFA0C2C825CB6A7700105306 /* NameEmbeddedUniformStructsMetal.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA0C2C625CB6A7700105306 /* NameEmbeddedUniformStructsMetal.h */; };
13181323
/* End PBXBuildFile section */
13191324

13201325
/* Begin PBXBuildRule section */
@@ -2165,6 +2170,8 @@
21652170
A3D3291323CFCB7600375657 /* RemoveInactiveInterfaceVariables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveInactiveInterfaceVariables.h; sourceTree = "<group>"; };
21662171
FB39D0D11200F0E300088E69 /* libANGLE.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libANGLE.a; sourceTree = BUILT_PRODUCTS_DIR; };
21672172
FB39D2BF1200F3E600088E69 /* ShaderLang.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = ShaderLang.h; sourceTree = "<group>"; };
2173+
FF2D2F5225C8B14A002FB699 /* FixTypeConstructors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FixTypeConstructors.h; sourceTree = "<group>"; };
2174+
FF2D2F5325C8B14A002FB699 /* FixTypeConstructors.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FixTypeConstructors.cpp; sourceTree = "<group>"; };
21682175
FF81FE8025818D6800894E24 /* mtl_glslang_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mtl_glslang_utils.h; sourceTree = "<group>"; };
21692176
FF81FE8125818D6800894E24 /* ProgramMtl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgramMtl.h; sourceTree = "<group>"; };
21702177
FF81FE8225818D6800894E24 /* DisplayMtl_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DisplayMtl_api.h; sourceTree = "<group>"; };
@@ -2302,6 +2309,8 @@
23022309
FF81FF982581A3C100894E24 /* AsNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsNode.h; sourceTree = "<group>"; };
23032310
FF81FF992581A3C100894E24 /* IntermRebuild.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IntermRebuild.cpp; sourceTree = "<group>"; };
23042311
FF81FF9A2581A3C200894E24 /* IntermRebuild.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntermRebuild.h; sourceTree = "<group>"; };
2312+
FFA0C2C525CB6A7600105306 /* NameEmbeddedUniformStructsMetal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NameEmbeddedUniformStructsMetal.cpp; sourceTree = "<group>"; };
2313+
FFA0C2C625CB6A7700105306 /* NameEmbeddedUniformStructsMetal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NameEmbeddedUniformStructsMetal.h; sourceTree = "<group>"; };
23052314
/* End PBXFileReference section */
23062315

23072316
/* Begin PBXFrameworksBuildPhase section */
@@ -3573,6 +3582,8 @@
35733582
FF81FF2D2581919700894E24 /* EmitMetal.cpp */,
35743583
FF81FF522581919700894E24 /* EmitMetal.h */,
35753584
FF81FF282581919700894E24 /* EnvironmentVariable.h */,
3585+
FF2D2F5325C8B14A002FB699 /* FixTypeConstructors.cpp */,
3586+
FF2D2F5225C8B14A002FB699 /* FixTypeConstructors.h */,
35763587
FF81FF482581919700894E24 /* HoistConstants.cpp */,
35773588
FF81FF4C2581919700894E24 /* HoistConstants.h */,
35783589
FF81FF512581919700894E24 /* IdGen.cpp */,
@@ -3587,6 +3598,8 @@
35873598
FF81FF562581919700894E24 /* ModifyStruct.h */,
35883599
FF81FF212581919700894E24 /* Name.cpp */,
35893600
FF81FF242581919700894E24 /* Name.h */,
3601+
FFA0C2C525CB6A7600105306 /* NameEmbeddedUniformStructsMetal.cpp */,
3602+
FFA0C2C625CB6A7700105306 /* NameEmbeddedUniformStructsMetal.h */,
35903603
FF81FF372581919700894E24 /* Pipeline.cpp */,
35913604
FF81FF492581919700894E24 /* Pipeline.h */,
35923605
FF81FF502581919700894E24 /* ProgramPrelude.cpp */,
@@ -3737,6 +3750,7 @@
37373750
31CDFFAF249184A100486F27 /* FindMain.h in Headers */,
37383751
31CDFFB6249184A100486F27 /* FindSymbolNode.h in Headers */,
37393752
31CDFF682491848C00486F27 /* FixedVector.h in Headers */,
3753+
FF2D2F5525C8B14A002FB699 /* FixTypeConstructors.h in Headers */,
37403754
A3C49C16255DF866005E8DF7 /* FlagSamplersWithTexelFetch.h in Headers */,
37413755
31CDFFC0249184A700486F27 /* FlagStd140Structs.h in Headers */,
37423756
31CDFF7F2491849800486F27 /* FoldExpressions.h in Headers */,
@@ -4169,6 +4183,7 @@
41694183
5C55D6FF22826CB300B5BA2C /* FindMain.h in Headers */,
41704184
5C55D6FB22826CB300B5BA2C /* FindSymbolNode.h in Headers */,
41714185
5C55D7282282747700B5BA2C /* FixedVector.h in Headers */,
4186+
FF2D2F5425C8B14A002FB699 /* FixTypeConstructors.h in Headers */,
41724187
A3C49C12255DF865005E8DF7 /* FlagSamplersWithTexelFetch.h in Headers */,
41734188
5C9FFF4F19102A000025B8FA /* FlagStd140Structs.h in Headers */,
41744189
5C55D6A422826B9F00B5BA2C /* FoldExpressions.h in Headers */,
@@ -4274,6 +4289,7 @@
42744289
FF81FF0925818D6900894E24 /* mtl_utils.h in Headers */,
42754290
FF81FF5E2581919700894E24 /* Name.h in Headers */,
42764291
5C55D66922826B9F00B5BA2C /* NameEmbeddedUniformStructs.h in Headers */,
4292+
FFA0C2C825CB6A7700105306 /* NameEmbeddedUniformStructsMetal.h in Headers */,
42774293
A303070B2305F6B5002DA972 /* no_destructor.h in Headers */,
42784294
5C55D70722826CB300B5BA2C /* NodeSearch.h in Headers */,
42794295
FF81FF9B2581A3C200894E24 /* NodeType.h in Headers */,
@@ -4746,6 +4762,7 @@
47464762
A30307032305F636002DA972 /* FindFunction.cpp in Sources */,
47474763
5C55D6FD22826CB300B5BA2C /* FindMain.cpp in Sources */,
47484764
5C55D70322826CB300B5BA2C /* FindSymbolNode.cpp in Sources */,
4765+
FF2D2F5625C8B14A002FB699 /* FixTypeConstructors.cpp in Sources */,
47494766
A3C49C0B255DF85F005E8DF7 /* FlagSamplersWithTexelFetch.cpp in Sources */,
47504767
5C9FFF4E19102A000025B8FA /* FlagStd140Structs.cpp in Sources */,
47514768
5CCD818F1DBFEA10006066B8 /* Float16ToFloat32.cpp in Sources */,
@@ -4828,6 +4845,7 @@
48284845
FF81FEEC25818D6900894E24 /* mtl_utils.mm in Sources */,
48294846
FF81FF5B2581919700894E24 /* Name.cpp in Sources */,
48304847
5C55D6B622826BC800B5BA2C /* NameEmbeddedUniformStructs.cpp in Sources */,
4848+
FFA0C2C725CB6A7700105306 /* NameEmbeddedUniformStructsMetal.cpp in Sources */,
48314849
315EBDBF1FCE44BF00AC7A89 /* null_functions.cpp in Sources */,
48324850
5CCD59692284F7960018F2D8 /* Observer.cpp in Sources */,
48334851
5C1DBC331B04375F00235552 /* Operator.cpp in Sources */,

Source/ThirdParty/ANGLE/ChangeLog

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,65 @@
1+
2021-02-19 Kyle Piddington <kpiddington@apple.com>
2+
3+
Fix a number of functional regressions caused by enabling the Metal ANGLE backend by default.
4+
https://bugs.webkit.org/show_bug.cgi?id=220895
5+
<rdar://problem/73539537>
6+
7+
Reviewed by Kenneth Russell.
8+
9+
Take two of this commit - this time with the new files FixTypeConstructors and NameEmbeddedUniformStructsMetal.
10+
11+
Fixed webgl/1.0.3/conformance/context/context-hidden-alpha.html
12+
13+
MTL Translator direct fixes for webgl/1.0.3/conformance/glsl/constructors/glsl-construct-*vec2 tests, Plus fix for GL_VertexIndex
14+
15+
Fix EmitMetal crash for missing function textureRect.
16+
17+
Additional fixes for 73675990, shaders-with-invariance.html, shaders-with-uniform-structs.html, struct-specifiers-in-uniforms.html, framebuffer-object-attachment.html
18+
19+
Fixed clamping of array elements.
20+
21+
* ANGLE.xcodeproj/project.pbxproj:
22+
* src/compiler/translator/TranslatorMetalDirect.cpp:
23+
(sh::TranslatorMetalDirect::translateImpl):
24+
* src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
25+
(GenMetalTraverser::emitPostQualifier):
26+
(GenMetalTraverser::visitBinary):
27+
(GenMetalTraverser::BuildFuncToName):
28+
* src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.cpp: Added.
29+
(sh::FixTypeTraverser::FixTypeTraverser):
30+
(sh::FixTypeConstructors):
31+
* src/compiler/translator/TranslatorMetalDirect/FixTypeConstructors.h: Added.
32+
* src/compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.cpp: Added.
33+
(sh::NameEmbeddedStructUniformsMetal):
34+
* src/compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.h: Added.
35+
* src/compiler/translator/TranslatorMetalDirect/Pipeline.cpp:
36+
(SaturateVectorOf):
37+
* src/compiler/translator/TranslatorMetalDirect/ProgramPrelude.cpp:
38+
(sh::ProgramPrelude::ProgramPrelude):
39+
* src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.cpp:
40+
(sh::Reducer::Reducer):
41+
(sh::ReduceInterfaceBlocks):
42+
* src/compiler/translator/TranslatorMetalDirect/ReduceInterfaceBlocks.h:
43+
* src/compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.cpp:
44+
* src/libANGLE/renderer/load_functions_table_autogen.cpp:
45+
* src/libANGLE/renderer/metal/ContextMtl.mm:
46+
(rx::ContextMtl::drawElementsImpl):
47+
* src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.h:
48+
* src/libANGLE/renderer/metal/IOSurfaceSurfaceMtl.mm:
49+
(rx::IOSurfaceSurfaceMtl::IOSurfaceSurfaceMtl):
50+
(rx::IOSurfaceSurfaceMtl::createBackingTexture):
51+
* src/libANGLE/renderer/metal/RenderBufferMtl.mm:
52+
(rx::RenderbufferMtl::setStorageImpl):
53+
* src/libANGLE/renderer/metal/VertexArrayMtl.h:
54+
* src/libANGLE/renderer/metal/VertexArrayMtl.mm:
55+
(rx::VertexArrayMtl::getIndexBuffer):
56+
(rx::VertexArrayMtl::convertIndexBuffer):
57+
(rx::VertexArrayMtl::streamIndexBufferFromClient):
58+
* src/libANGLE/renderer/metal/mtl_utils.mm:
59+
(rx::mtl::InitializeDepthStencilTextureContentsGPU):
60+
* src/libANGLE/renderer/metal/shaders/blit.metal:
61+
* src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc:
62+
163
2021-02-19 Chris Dumez <cdumez@apple.com>
264

365
Unreviewed, reverting r273188.

Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.cpp

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,13 @@
2727
#include "compiler/translator/TranslatorMetalDirect/RewriteUnaddressableReferences.h"
2828
#include "compiler/translator/TranslatorMetalDirect/SeparateCompoundExpressions.h"
2929
#include "compiler/translator/TranslatorMetalDirect/SeparateCompoundStructDeclarations.h"
30+
#include "compiler/translator/TranslatorMetalDirect/FixTypeConstructors.h"
3031
#include "compiler/translator/TranslatorMetalDirect/SymbolEnv.h"
3132
#include "compiler/translator/TranslatorMetalDirect/ToposortStructs.h"
3233
#include "compiler/translator/TranslatorMetalDirect/WrapMain.h"
3334
#include "compiler/translator/TranslatorMetalUtils.h"
3435
#include "compiler/translator/tree_ops/InitializeVariables.h"
35-
#include "compiler/translator/tree_ops/NameEmbeddedUniformStructs.h"
36+
#include "compiler/translator/TranslatorMetalDirect/NameEmbeddedUniformStructsMetal.h"
3637
#include "compiler/translator/tree_ops/RemoveAtomicCounterBuiltins.h"
3738
#include "compiler/translator/tree_ops/RemoveInactiveInterfaceVariables.h"
3839
#include "compiler/translator/tree_ops/RewriteAtomicCounters.h"
@@ -602,6 +603,19 @@ void AddFragDepthDeclaration(TIntermBlock &root, TSymbolTable &symbolTable)
602603
TIntermSequence{new TIntermDeclaration{BuiltInVariable::gl_FragDepth()}});
603604
}
604605

606+
void AddFragDepthEXTDeclaration(TCompiler &compiler, TIntermBlock &root, TSymbolTable &symbolTable)
607+
{
608+
const TIntermSymbol *glFragDepthExt = FindSymbolNode(&root, ImmutableString("gl_FragDepthEXT"));
609+
ASSERT(glFragDepthExt);
610+
611+
// Replace gl_FragData with our globally defined fragdata.
612+
if (!ReplaceVariable(&compiler, &root, &(glFragDepthExt->variable()), BuiltInVariable::gl_FragDepth()))
613+
{
614+
return;
615+
}
616+
AddFragDepthDeclaration(root, symbolTable);
617+
}
618+
605619
ANGLE_NO_DISCARD bool AddFragDataDeclaration(TCompiler &compiler, TIntermBlock &root)
606620
{
607621
TSymbolTable &symbolTable = compiler.getSymbolTable();
@@ -939,7 +953,7 @@ bool TranslatorMetalDirect::translateImpl(TIntermBlock &root, ShCompileOptions c
939953

940954
if (aggregateTypesUsedForUniforms > 0)
941955
{
942-
if (!NameEmbeddedStructUniforms(this, &root, &symbolTable))
956+
if (!NameEmbeddedStructUniformsMetal(this, &root, &symbolTable))
943957
{
944958
return false;
945959
}
@@ -1105,6 +1119,7 @@ bool TranslatorMetalDirect::translateImpl(TIntermBlock &root, ShCompileOptions c
11051119
bool usesFragColor = false;
11061120
bool usesFragData = false;
11071121
bool usesFragDepth = false;
1122+
bool usesFragDepthEXT = false;
11081123
for (const ShaderVariable &outputVarying : mOutputVariables)
11091124
{
11101125
if (outputVarying.isBuiltIn())
@@ -1121,6 +1136,10 @@ bool TranslatorMetalDirect::translateImpl(TIntermBlock &root, ShCompileOptions c
11211136
{
11221137
usesFragDepth = true;
11231138
}
1139+
else if (outputVarying.name == "gl_FragDepthEXT")
1140+
{
1141+
usesFragDepthEXT = true;
1142+
}
11241143
}
11251144
}
11261145

@@ -1141,8 +1160,11 @@ bool TranslatorMetalDirect::translateImpl(TIntermBlock &root, ShCompileOptions c
11411160
return false;
11421161
}
11431162
}
1144-
1145-
if (usesFragDepth)
1163+
if(usesFragDepthEXT)
1164+
{
1165+
AddFragDepthEXTDeclaration(*this, root, symbolTable);
1166+
}
1167+
else if (usesFragDepth)
11461168
{
11471169
AddFragDepthDeclaration(root, symbolTable);
11481170
}
@@ -1220,6 +1242,15 @@ bool TranslatorMetalDirect::translateImpl(TIntermBlock &root, ShCompileOptions c
12201242
}
12211243
DeclareRightBeforeMain(root, kgl_VertexIndexMetal);
12221244
}
1245+
else if (FindSymbolNode(&root, BuiltInVariable::gl_VertexID()->name()))
1246+
{
1247+
if (!ReplaceVariable(this, &root, BuiltInVariable::gl_VertexID(),
1248+
&kgl_VertexIndexMetal))
1249+
{
1250+
return false;
1251+
}
1252+
DeclareRightBeforeMain(root, kgl_VertexIndexMetal);
1253+
}
12231254

12241255
#if 0
12251256
if (compileOptions & SH_ADD_BRESENHAM_LINE_RASTER_EMULATION)
@@ -1319,7 +1350,7 @@ bool TranslatorMetalDirect::translateImpl(TIntermBlock &root, ShCompileOptions c
13191350
return false;
13201351
}
13211352

1322-
if (!ReduceInterfaceBlocks(*this, root))
1353+
if (!ReduceInterfaceBlocks(*this, root, idGen))
13231354
{
13241355
return false;
13251356
}
@@ -1377,12 +1408,16 @@ bool TranslatorMetalDirect::translateImpl(TIntermBlock &root, ShCompileOptions c
13771408
{
13781409
return false;
13791410
}
1411+
if(!FixTypeConstructors(*this, symbolEnv, root))
1412+
{
1413+
return false;
1414+
}
13801415

13811416
if (!ToposortStructs(*this, symbolEnv, root, ppc))
13821417
{
13831418
return false;
13841419
}
1385-
1420+
13861421
if (!EmitMetal(*this, root, idGen, pipelineStructs, invariants, symbolEnv, ppc))
13871422
{
13881423
return false;

Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,8 @@ static const char *GetOperatorString(TOperator op,
355355
case TOperator::EOpEqual:
356356
if ((argType0->isVector() && argType1->isVector()) ||
357357
(argType0->getStruct() && argType1->getStruct()) ||
358-
(argType0->isArray() && argType1->isArray()))
358+
(argType0->isArray() && argType1->isArray()) ||
359+
(argType0->isMatrix() && argType1->isMatrix()))
359360

360361
{
361362
return "ANGLE_equal";
@@ -365,7 +366,8 @@ static const char *GetOperatorString(TOperator op,
365366

366367
case TOperator::EOpNotEqual:
367368
if ((argType0->isVector() && argType1->isVector()) ||
368-
(argType0->isArray() && argType1->isArray()))
369+
(argType0->isArray() && argType1->isArray())||
370+
(argType0->isMatrix() && argType1->isMatrix()))
369371
{
370372
return "ANGLE_notEqual";
371373
}
@@ -933,7 +935,7 @@ void GenMetalTraverser::emitPostQualifier(const EmitVariableDeclarationConfig &e
933935
}
934936

935937
const bool isInvariant =
936-
decl.isField() ? mInvariants.contains(decl.field()) : mInvariants.contains(decl.variable());
938+
(decl.isField() ? mInvariants.contains(decl.field()) : mInvariants.contains(decl.variable())) && (qualifier == TQualifier::EvqPosition || qualifier == TQualifier::EvqFragCoord);
937939

938940
if (isInvariant)
939941
{
@@ -1547,9 +1549,34 @@ bool GenMetalTraverser::visitBinary(Visit, TIntermBinary *binaryNode)
15471549
case TOperator::EOpIndexDirect:
15481550
case TOperator::EOpIndexIndirect:
15491551
{
1552+
TType leftType = leftNode.getType();
15501553
groupedTraverse(leftNode);
15511554
mOut << "[";
1552-
rightNode.traverse(this);
1555+
{
1556+
mOut << "ANGLE_int_clamp(";
1557+
groupedTraverse(rightNode);
1558+
mOut << ", 0, ";
1559+
if(leftType.isUnsizedArray())
1560+
{
1561+
groupedTraverse(leftNode);
1562+
mOut << ".size()";
1563+
}
1564+
else
1565+
{
1566+
int maxSize;
1567+
if (leftType.isArray())
1568+
{
1569+
maxSize = static_cast<int>(leftType.getOutermostArraySize()) - 1;
1570+
}
1571+
else
1572+
{
1573+
maxSize = leftType.getNominalSize() - 1;
1574+
}
1575+
mOut << maxSize;
1576+
}
1577+
mOut << ")";
1578+
1579+
}
15531580
mOut << "]";
15541581
}
15551582
break;
@@ -1868,7 +1895,9 @@ GenMetalTraverser::FuncToName GenMetalTraverser::BuildFuncToName()
18681895
putAngle("texture2D");
18691896
putAngle("texture2DLod");
18701897
putAngle("texture2DProj");
1898+
putAngle("texture2DRect");
18711899
putAngle("texture2DProjLod");
1900+
putAngle("texture2DRectProj");
18721901
putAngle("texture3D");
18731902
putAngle("texture3DLod");
18741903
putAngle("texture3DProjLod");

0 commit comments

Comments
 (0)