Title: [279745] branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE
Revision
279745
Author
[email protected]
Date
2021-07-08 13:13:14 -0700 (Thu, 08 Jul 2021)

Log Message

Cherry-pick r279606. rdar://problem/80339390

    REGRESSION (r279466):  [Big Sur] webgl/1.0.3/conformance & webgl/2.0.0/conformance are failing
    https://bugs.webkit.org/show_bug.cgi?id=227596
    Provide Intel workaround for Big Sur systems. Atan and invariant have
    issues on older systems, and require us to disable fastmath to produce correct results.

    Reviewed by Kenneth Russell.

    * include/platform/FeaturesMtl.h:
    * src/compiler/translator/TranslatorMetalDirect.h:
    (sh::TranslatorMetalReflection::reset):
    * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
    (GenMetalTraverser::emitPostQualifier):
    (GenMetalTraverser::visitUnary):
    (GenMetalTraverser::visitAggregate):
    * src/libANGLE/renderer/metal/DisplayMtl.mm:
    (rx::DisplayMtl::initializeFeatures):
    * src/libANGLE/renderer/metal/ProgramMtl.h:
    (rx::ProgramMtl::getTranslatedShaderInfo const):
    * src/libANGLE/renderer/metal/ProgramMtl.mm:
    * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.h:
    * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
    (rx::mtl::GlslangGetMSL):
    * src/libANGLE/renderer/metal/mtl_render_utils.h:
    * src/libANGLE/renderer/metal/mtl_render_utils.mm:
    (rx::mtl::TransformFeedbackUtils::createMslXfbLibrary):
    (rx::mtl::TransformFeedbackUtils::getTransformFeedbackRenderPipeline):
    * src/libANGLE/renderer/metal/mtl_utils.h:
    * src/libANGLE/renderer/metal/mtl_utils.mm:
    (rx::mtl::CreateShaderLibrary):

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@279606 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/ChangeLog (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/ChangeLog	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/ChangeLog	2021-07-08 20:13:14 UTC (rev 279745)
@@ -1,3 +1,72 @@
+2021-07-08  Ruben Turcios  <[email protected]>
+
+        Cherry-pick r279606. rdar://problem/80339390
+
+    REGRESSION (r279466):  [Big Sur] webgl/1.0.3/conformance & webgl/2.0.0/conformance are failing
+    https://bugs.webkit.org/show_bug.cgi?id=227596
+    Provide Intel workaround for Big Sur systems. Atan and invariant have
+    issues on older systems, and require us to disable fastmath to produce correct results.
+    
+    Reviewed by Kenneth Russell.
+    
+    * include/platform/FeaturesMtl.h:
+    * src/compiler/translator/TranslatorMetalDirect.h:
+    (sh::TranslatorMetalReflection::reset):
+    * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
+    (GenMetalTraverser::emitPostQualifier):
+    (GenMetalTraverser::visitUnary):
+    (GenMetalTraverser::visitAggregate):
+    * src/libANGLE/renderer/metal/DisplayMtl.mm:
+    (rx::DisplayMtl::initializeFeatures):
+    * src/libANGLE/renderer/metal/ProgramMtl.h:
+    (rx::ProgramMtl::getTranslatedShaderInfo const):
+    * src/libANGLE/renderer/metal/ProgramMtl.mm:
+    * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.h:
+    * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
+    (rx::mtl::GlslangGetMSL):
+    * src/libANGLE/renderer/metal/mtl_render_utils.h:
+    * src/libANGLE/renderer/metal/mtl_render_utils.mm:
+    (rx::mtl::TransformFeedbackUtils::createMslXfbLibrary):
+    (rx::mtl::TransformFeedbackUtils::getTransformFeedbackRenderPipeline):
+    * src/libANGLE/renderer/metal/mtl_utils.h:
+    * src/libANGLE/renderer/metal/mtl_utils.mm:
+    (rx::mtl::CreateShaderLibrary):
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@279606 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2021-07-06  Kyle Piddington  <[email protected]>
+
+            REGRESSION (r279466):  [Big Sur] webgl/1.0.3/conformance & webgl/2.0.0/conformance are failing
+            https://bugs.webkit.org/show_bug.cgi?id=227596
+            Provide Intel workaround for Big Sur systems. Atan and invariant have
+            issues on older systems, and require us to disable fastmath to produce correct results.
+
+            Reviewed by Kenneth Russell.
+
+            * include/platform/FeaturesMtl.h:
+            * src/compiler/translator/TranslatorMetalDirect.h:
+            (sh::TranslatorMetalReflection::reset):
+            * src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp:
+            (GenMetalTraverser::emitPostQualifier):
+            (GenMetalTraverser::visitUnary):
+            (GenMetalTraverser::visitAggregate):
+            * src/libANGLE/renderer/metal/DisplayMtl.mm:
+            (rx::DisplayMtl::initializeFeatures):
+            * src/libANGLE/renderer/metal/ProgramMtl.h:
+            (rx::ProgramMtl::getTranslatedShaderInfo const):
+            * src/libANGLE/renderer/metal/ProgramMtl.mm:
+            * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.h:
+            * src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:
+            (rx::mtl::GlslangGetMSL):
+            * src/libANGLE/renderer/metal/mtl_render_utils.h:
+            * src/libANGLE/renderer/metal/mtl_render_utils.mm:
+            (rx::mtl::TransformFeedbackUtils::createMslXfbLibrary):
+            (rx::mtl::TransformFeedbackUtils::getTransformFeedbackRenderPipeline):
+            * src/libANGLE/renderer/metal/mtl_utils.h:
+            * src/libANGLE/renderer/metal/mtl_utils.mm:
+            (rx::mtl::CreateShaderLibrary):
+
 2021-07-01  Ben Nham  <[email protected]>
 
         Unreviewed, reverting r279172.

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/include/platform/FeaturesMtl.h (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/include/platform/FeaturesMtl.h	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/include/platform/FeaturesMtl.h	2021-07-08 20:13:14 UTC (rev 279745)
@@ -130,6 +130,10 @@
             "intel_explicit_bool_cast_workaround", FeatureCategory::MetalWorkarounds,
             "Insert explicit casts for float/double/unsigned/signed int on macOS 10.15 with Intel driver",
             &members};
+    Feature intelDisableFastMath = {
+            "intel_disable_fast_math", FeatureCategory::MetalWorkarounds,
+            "Disable fast math in atan and invariance cases when running below macOS 12.0",
+            &members};
 };
 
 }  // namespace angle

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/EmitMetal.cpp	2021-07-08 20:13:14 UTC (rev 279745)
@@ -979,6 +979,9 @@
     if (isInvariant)
     {
         mOut << " [[invariant]]";
+        TranslatorMetalReflection *reflection =
+            ((sh::TranslatorMetalDirect *)&mCompiler)->getTranslatorMetalReflection();
+        reflection->hasInvariance = true;
     }
 }
 
@@ -2136,6 +2139,12 @@
     else
     {
         const TOperator op = aggregateNode->getOp();
+        if(op == EOpAtan)
+        {
+            TranslatorMetalReflection *reflection =
+                ((sh::TranslatorMetalDirect *)&mCompiler)->getTranslatorMetalReflection();
+            reflection->hasAtan = true;
+        }
         switch (op)
         {
             case TOperator::EOpCallFunctionInAST:

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.h (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.h	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.h	2021-07-08 20:13:14 UTC (rev 279745)
@@ -120,6 +120,8 @@
     {
         hasUBOs = false;
         hasFlatInput = false;
+        hasAtan = false;
+        hasInvariance = false;
         originalNames.clear();
         samplerBindings.clear();
         textureBindings.clear();
@@ -129,6 +131,8 @@
 
     bool hasUBOs = false;
     bool hasFlatInput = false;
+    bool hasAtan = false;
+    bool hasInvariance = false;
 
   private:
     originalNamesMap originalNames;

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm	2021-07-08 20:13:14 UTC (rev 279745)
@@ -977,6 +977,7 @@
 
     ANGLE_FEATURE_CONDITION((&mFeatures), intelThinMipmapWorkaround, isIntel());
     ANGLE_FEATURE_CONDITION((&mFeatures), intelExplicitBoolCastWorkaround, isIntel() && GetMacOSVersion() < OSVersion(11, 0, 0));
+    ANGLE_FEATURE_CONDITION((&mFeatures), intelDisableFastMath, isIntel() && GetMacOSVersion() < OSVersion(12, 0, 0));
 
     angle::PlatformMethods *platform = ANGLEPlatformCurrent();
     platform->overrideFeaturesMtl(platform, &mFeatures);

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.h (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.h	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.h	2021-07-08 20:13:14 UTC (rev 279745)
@@ -153,6 +153,9 @@
 
     std::array<uint32_t, mtl::kMaxShaderXFBs> getXfbBindings() const { return mXfbBindings; }
     std::string getTranslatedShaderSource(const gl::ShaderType shaderType) const { return mMslShaderTranslateInfo[shaderType].metalShaderSource; }
+    
+    mtl::TranslatedShaderInfo getTranslatedShaderInfo(const gl::ShaderType shaderType) const { return mMslShaderTranslateInfo[shaderType]; }
+    
     bool hasFlatAttribute();
     
     mtl::RenderPipelineCache *mMetalXfbRenderPipelineCache;

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.mm (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.mm	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/ProgramMtl.mm	2021-07-08 20:13:14 UTC (rev 279745)
@@ -734,8 +734,9 @@
 
         // Convert to actual binary shader
         mtl::AutoObjCPtr<NSError *> err = nil;
+        bool disableFastMath = (context->getDisplay()->getFeatures().intelDisableFastMath.enabled && translatedMslInfo->hasInvariantOrAtan);
         translatedMslInfo->metalLibrary =
-            mtl::CreateShaderLibrary(mtlDevice, translatedMslInfo->metalShaderSource, substitutionMacros, &err);
+            mtl::CreateShaderLibrary(mtlDevice, translatedMslInfo->metalShaderSource, substitutionMacros, !disableFastMath, &err);
         if (err && !translatedMslInfo->metalLibrary)
         {
             std::ostringstream ss;
@@ -821,6 +822,7 @@
         {
             stream->writeInt<uint32_t>(uboBinding);
         }
+        stream->writeBool(mMslShaderTranslateInfo[shaderType].hasInvariantOrAtan);
     }
 }
 
@@ -840,6 +842,7 @@
         {
             uboBinding = stream->readInt<uint32_t>();
         }
+        mMslShaderTranslateInfo[shaderType].hasInvariantOrAtan = stream->readBool();
     }
 }
 

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.h (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.h	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.h	2021-07-08 20:13:14 UTC (rev 279745)
@@ -34,6 +34,7 @@
     std::array<uint32_t, kMaxGLUBOBindings> actualUBOBindings;
     std::array<uint32_t, kMaxShaderXFBs> actualXFBBindings;
     bool hasUBOArgumentBuffer;
+    bool hasInvariantOrAtan;
 };
 void MSLGetShaderSource(const gl::ProgramState &programState,
                         const gl::ProgramLinkedResources &resources,

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm	2021-07-08 20:13:14 UTC (rev 279745)
@@ -454,6 +454,7 @@
             GetAssignedSamplerBindings(reflection, originalSamplerBindings, structSamplers,
                                        &mslShaderInfoOut->at(type).actualSamplerBindings);
         }
+        (*mslShaderInfoOut)[type].hasInvariantOrAtan = reflection->hasAtan || reflection->hasInvariance;
     }
     return angle::Result::Continue;
 }

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.h (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.h	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.h	2021-07-08 20:13:14 UTC (rev 279745)
@@ -578,7 +578,8 @@
 
   private:
     AutoObjCPtr<id<MTLLibrary>> createMslXfbLibrary(ContextMtl *contextMtl,
-                                                    const std::string &translatedMsl);
+                                                    const std::string &translatedMsl,
+                                                    bool enableFastMath);
 };
 
 // RenderUtils: container class of various util classes above

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.mm (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.mm	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_render_utils.mm	2021-07-08 20:13:14 UTC (rev 279745)
@@ -3046,17 +3046,17 @@
 
 AutoObjCPtr<id<MTLLibrary>> TransformFeedbackUtils::createMslXfbLibrary(
     ContextMtl *contextMtl,
-    const std::string &translatedMsl)
+    const std::string &translatedMsl,
+    bool enableFastMath)
 {
     ANGLE_MTL_OBJC_SCOPE
     {
         DisplayMtl *display     = contextMtl->getDisplay();
         id<MTLDevice> mtlDevice = display->getMetalDevice();
-
         // Convert to actual binary shader
         mtl::AutoObjCPtr<NSError *> err = nil;
         mtl::AutoObjCPtr<id<MTLLibrary>> mtlShaderLib =
-        mtl::CreateShaderLibrary(mtlDevice, translatedMsl, @{@"TRANSFORM_FEEDBACK_ENABLED": @"1"}, &err);
+        mtl::CreateShaderLibrary(mtlDevice, translatedMsl, @{@"TRANSFORM_FEEDBACK_ENABLED": @"1"}, enableFastMath, &err);
         if (err && !mtlShaderLib)
         {
             NSLog(@"%@", err.get());
@@ -3074,13 +3074,13 @@
 {
     const ProgramMtl *programMtl = mtl::GetImpl(contextMtl->getState().getProgram());
     RenderPipelineCache &cache   = *programMtl->mMetalXfbRenderPipelineCache;
-
+    bool disableFastMath = contextMtl->getDisplay()->getFeatures().intelDisableFastMath.enabled &&  programMtl->getTranslatedShaderInfo(gl::ShaderType::Vertex).hasInvariantOrAtan;
     if (!cache.getVertexShader())
     {
         // Pipeline cache not intialized, do it now:
         ANGLE_MTL_OBJC_SCOPE
         {
-            auto shaderLib = createMslXfbLibrary(contextMtl, programMtl->getTranslatedShaderSource(gl::ShaderType::Vertex));
+            auto shaderLib = createMslXfbLibrary(contextMtl, programMtl->getTranslatedShaderSource(gl::ShaderType::Vertex), !disableFastMath);
             // Non specialized constants provided, use default creation function.
             EnsureVertexShaderOnlyPipelineCacheInitialized(contextMtl, SHADER_ENTRY_NAME, shaderLib,
                                                            &cache);

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_utils.h (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_utils.h	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_utils.h	2021-07-08 20:13:14 UTC (rev 279745)
@@ -88,6 +88,7 @@
 AutoObjCPtr<id<MTLLibrary>> CreateShaderLibrary(id<MTLDevice> metalDevice,
                                                 const std::string &source,
                                                 NSDictionary<NSString *, NSObject *> * substitutionDictionary,
+                                                bool enableFastMath,
                                                 AutoObjCPtr<NSError *> *error);
 
 AutoObjCPtr<id<MTLLibrary>> CreateShaderLibrary(id<MTLDevice> metalDevice,
@@ -98,6 +99,7 @@
                                                 const char *source,
                                                 size_t sourceLen,
                                                 NSDictionary<NSString *, NSObject *> * substitutionDictionary,
+                                                bool enableFastMath,
                                                 AutoObjCPtr<NSError *> *error);
 
 AutoObjCPtr<id<MTLLibrary>> CreateShaderLibraryFromBinary(id<MTLDevice> metalDevice,

Modified: branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_utils.mm (279744 => 279745)


--- branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_utils.mm	2021-07-08 20:01:06 UTC (rev 279744)
+++ branches/safari-612.1.23-branch/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_utils.mm	2021-07-08 20:13:14 UTC (rev 279745)
@@ -560,9 +560,10 @@
 AutoObjCPtr<id<MTLLibrary>> CreateShaderLibrary(id<MTLDevice> metalDevice,
                                                 const std::string &source,
                                                 NSDictionary<NSString *, NSObject *> * substitutionMacros,
+                                                bool enableFastMath,
                                                 AutoObjCPtr<NSError *> *error)
 {
-    return CreateShaderLibrary(metalDevice, source.c_str(), source.size(), substitutionMacros, error);
+    return CreateShaderLibrary(metalDevice, source.c_str(), source.size(), substitutionMacros, enableFastMath, error);
 }
 
 AutoObjCPtr<id<MTLLibrary>> CreateShaderLibrary(id<MTLDevice> metalDevice,
@@ -569,7 +570,7 @@
                                                 const std::string &source,
                                                 AutoObjCPtr<NSError *> *error)
 {
-    return CreateShaderLibrary(metalDevice, source.c_str(), source.size(),@{}, error);
+    return CreateShaderLibrary(metalDevice, source.c_str(), source.size(),@{}, true, error);
 }
 
 AutoObjCPtr<id<MTLLibrary>> CreateShaderLibrary(id<MTLDevice> metalDevice,
@@ -576,6 +577,7 @@
                                                 const char *source,
                                                 size_t sourceLen,
                                                 NSDictionary<NSString *, NSObject *> * substitutionMacros,
+                                                bool enableFastMath,
                                                 AutoObjCPtr<NSError *> *errorOut)
 {
     ANGLE_MTL_OBJC_SCOPE
@@ -596,6 +598,8 @@
         options.fastMathEnabled = false;
 #endif
         options.languageVersion = GetUserSetOrHighestMSLVersion(options.languageVersion);
+        // TODO(jcunningham): workaround for intel driver not preserving invariance on all shaders
+        options.fastMathEnabled &= enableFastMath;
         options.preprocessorMacros = substitutionMacros;
         auto library = [metalDevice newLibraryWithSource:nsSource options:options error:&nsError];
         if (angle::GetEnvironmentVar(kANGLEPrintMSLEnv)[0] == '1')
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to