From 6dfe6726a122b4668551b6c73e749a651c0cdfe4 Mon Sep 17 00:00:00 2001 From: ChristopherHX <44845461+ChristopherHX@users.noreply.github.com> Date: Fri, 27 Dec 2019 23:53:10 +0100 Subject: [PATCH 1/8] Fix HiDPI content scaling [MacOs] --- src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm b/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm index 0814659a829..13428d2f057 100644 --- a/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm +++ b/src/libANGLE/renderer/gl/cgl/WindowSurfaceCGL.mm @@ -211,6 +211,7 @@ - (void)drawInCGLContext:(CGLContextObj)glContext mSwapLayer = [[WebSwapLayer alloc] initWithSharedState:&mSwapState withContext:mContext withFunctions:mFunctions]; + mSwapLayer.contentsScale = mLayer.contentsScale; [mLayer addSublayer:mSwapLayer]; mFunctions->genRenderbuffers(1, &mDSRenderbuffer); @@ -243,7 +244,7 @@ - (void)drawInCGLContext:(CGLContextObj)glContext unsigned height = getHeight(); auto &texture = *mSwapState.beingRendered; - if (texture.width != width || texture.height != height) + if (mSwapLayer.contentsScale != mLayer.contentsScale || texture.width != width || texture.height != height) { stateManager->bindTexture(gl::TextureType::_2D, texture.texture); functions->texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, @@ -254,6 +255,7 @@ - (void)drawInCGLContext:(CGLContextObj)glContext texture.width = width; texture.height = height; + mSwapLayer.contentsScale = mLayer.contentsScale; } FramebufferGL *framebufferGL = GetImplAs(context->getFramebuffer({0})); @@ -301,12 +303,12 @@ - (void)drawInCGLContext:(CGLContextObj)glContext EGLint WindowSurfaceCGL::getWidth() const { - return (EGLint)CGRectGetWidth([mLayer frame]); + return (EGLint)(CGRectGetWidth([mLayer frame]) * mLayer.contentsScale); } EGLint WindowSurfaceCGL::getHeight() const { - return (EGLint)CGRectGetHeight([mLayer frame]); + return (EGLint)(CGRectGetHeight([mLayer frame]) * mLayer.contentsScale); } EGLint WindowSurfaceCGL::isPostSubBufferSupported() const From ccff638c628ffbe57aa3062e76ac899f4c9849e4 Mon Sep 17 00:00:00 2001 From: Christopher Homberger Date: Sat, 24 Dec 2022 11:02:24 +0100 Subject: [PATCH 2/8] angle-renderdragon --- src/libANGLE/Display.cpp | 4 ++++ src/libANGLE/renderer/gl/RendererGL.cpp | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/libANGLE/Display.cpp b/src/libANGLE/Display.cpp index ccf24a57bf3..4003a7b9c50 100644 --- a/src/libANGLE/Display.cpp +++ b/src/libANGLE/Display.cpp @@ -164,6 +164,10 @@ EGLAttrib GetDisplayTypeFromEnvironment() #if defined(ANGLE_ENABLE_OPENGL) if (angleDefaultEnv == "gl") + { + return EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE; + } + if (angleDefaultEnv == "gles") { return EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE; } diff --git a/src/libANGLE/renderer/gl/RendererGL.cpp b/src/libANGLE/renderer/gl/RendererGL.cpp index dc1d57a1049..97c30ec2a49 100644 --- a/src/libANGLE/renderer/gl/RendererGL.cpp +++ b/src/libANGLE/renderer/gl/RendererGL.cpp @@ -304,6 +304,8 @@ void RendererGL::generateCaps(gl::Caps *outCaps, { nativegl_gl::GenerateCaps(mFunctions.get(), mFeatures, outCaps, outTextureCaps, outExtensions, &mMaxSupportedESVersion, &mMultiviewImplementationType); + // GL_OES_vertex_half_float + outExtensions->vertexHalfFloatOES = true; } GLint RendererGL::getGPUDisjoint() From c8f34d7937051c97a85dd006f1303ed27e1162b5 Mon Sep 17 00:00:00 2001 From: Christopher Homberger Date: Mon, 26 Dec 2022 21:24:44 +0100 Subject: [PATCH 3/8] enable vertexHalfFloatOES also in metal --- src/libANGLE/renderer/metal/DisplayMtl.mm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libANGLE/renderer/metal/DisplayMtl.mm b/src/libANGLE/renderer/metal/DisplayMtl.mm index 41d5af7de50..f555b4ecfb9 100644 --- a/src/libANGLE/renderer/metal/DisplayMtl.mm +++ b/src/libANGLE/renderer/metal/DisplayMtl.mm @@ -612,6 +612,10 @@ bool IsMetalDisplayAvailable() // GL_APPLE_clip_distance mNativeCaps.maxClipDistances = 8; + // minecraft/renderdragon crashs if this capability is missing + // GL_OES_vertex_half_float + mNativeCaps.vertexHalfFloatOES = true; + // Metal doesn't support GL_TEXTURE_COMPARE_MODE=GL_NONE for shadow samplers mNativeLimitations.noShadowSamplerCompareModeNone = true; } From b775f11e390bbafecb4ca1d780c57b6650e90a04 Mon Sep 17 00:00:00 2001 From: Christopher Homberger Date: Mon, 26 Dec 2022 22:18:43 +0100 Subject: [PATCH 4/8] avoid compile error x86_64 --- src/common/apple_platform_utils.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/apple_platform_utils.h b/src/common/apple_platform_utils.h index 55ebb7a8ae5..7712362820b 100644 --- a/src/common/apple_platform_utils.h +++ b/src/common/apple_platform_utils.h @@ -14,6 +14,9 @@ // These are macros for substitution of Apple specific directive @available: // TARGET_OS_MACCATALYST only available in MacSDK 10.15 +#ifndef TARGET_OS_MACCATALYST +#define TARGET_OS_MACCATALYST 0 +#endif // ANGLE_APPLE_AVAILABLE_XCI: check if either of the 3 platforms (OSX/Catalyst/iOS) min verions is // available: From 90e4c1ab523d735bbc126f8e025da45f46f3292d Mon Sep 17 00:00:00 2001 From: Christopher Homberger Date: Mon, 26 Dec 2022 23:12:05 +0100 Subject: [PATCH 5/8] fix build metal --- src/libANGLE/renderer/metal/DisplayMtl.mm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libANGLE/renderer/metal/DisplayMtl.mm b/src/libANGLE/renderer/metal/DisplayMtl.mm index f555b4ecfb9..16b4e8255a5 100644 --- a/src/libANGLE/renderer/metal/DisplayMtl.mm +++ b/src/libANGLE/renderer/metal/DisplayMtl.mm @@ -612,10 +612,6 @@ bool IsMetalDisplayAvailable() // GL_APPLE_clip_distance mNativeCaps.maxClipDistances = 8; - // minecraft/renderdragon crashs if this capability is missing - // GL_OES_vertex_half_float - mNativeCaps.vertexHalfFloatOES = true; - // Metal doesn't support GL_TEXTURE_COMPARE_MODE=GL_NONE for shadow samplers mNativeLimitations.noShadowSamplerCompareModeNone = true; } @@ -700,6 +696,10 @@ bool IsMetalDisplayAvailable() // GL_OES_EGL_sync mNativeExtensions.eglSyncOES = true; } + + // minecraft/renderdragon crashs if this capability is missing + // GL_OES_vertex_half_float + mNativeExtensions.vertexHalfFloatOES = true; } void DisplayMtl::initializeTextureCaps() const From 5a04f6070a9223129f314edca2c38ab369fc796d Mon Sep 17 00:00:00 2001 From: ChristopherHX Date: Fri, 30 Dec 2022 21:22:39 +0100 Subject: [PATCH 6/8] Metal with opengl fallback --- src/libANGLE/Display.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libANGLE/Display.cpp b/src/libANGLE/Display.cpp index 4003a7b9c50..83362e62086 100644 --- a/src/libANGLE/Display.cpp +++ b/src/libANGLE/Display.cpp @@ -193,14 +193,15 @@ EGLAttrib GetDisplayTypeFromEnvironment() return EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE; #elif defined(ANGLE_ENABLE_VULKAN) && defined(ANGLE_PLATFORM_ANDROID) return EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE; +#elif defined(ANGLE_ENABLE_METAL) + // Prefer metal with opengl fallback over opengl + return EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE; #elif defined(ANGLE_ENABLE_OPENGL) # if defined(ANGLE_PLATFORM_ANDROID) || defined(ANGLE_USE_GBM) return EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE; # else return EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE; # endif -#elif defined(ANGLE_ENABLE_METAL) - return EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE; #elif defined(ANGLE_ENABLE_VULKAN) return EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE; #elif defined(ANGLE_ENABLE_NULL) @@ -395,8 +396,13 @@ rx::DisplayImpl *CreateDisplayFromAttribs(EGLAttrib displayType, break; } #endif +#if defined(ANGLE_ENABLE_OPENGL) + // No metal support, just use the old opengl framework + impl = new rx::DisplayCGL(state); +#else // No display available UNREACHABLE(); +#endif break; case EGL_PLATFORM_ANGLE_TYPE_NULL_ANGLE: #if defined(ANGLE_ENABLE_NULL) From 84ac3ee16fa8389029961868267c4d702c371ac3 Mon Sep 17 00:00:00 2001 From: ChristopherHX Date: Fri, 17 Feb 2023 20:27:18 +0100 Subject: [PATCH 7/8] Do not prefer metal over opengl by default --- src/libANGLE/Display.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libANGLE/Display.cpp b/src/libANGLE/Display.cpp index 83362e62086..50716b1e4e5 100644 --- a/src/libANGLE/Display.cpp +++ b/src/libANGLE/Display.cpp @@ -193,15 +193,15 @@ EGLAttrib GetDisplayTypeFromEnvironment() return EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE; #elif defined(ANGLE_ENABLE_VULKAN) && defined(ANGLE_PLATFORM_ANDROID) return EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE; -#elif defined(ANGLE_ENABLE_METAL) - // Prefer metal with opengl fallback over opengl - return EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE; #elif defined(ANGLE_ENABLE_OPENGL) # if defined(ANGLE_PLATFORM_ANDROID) || defined(ANGLE_USE_GBM) return EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE; # else return EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE; # endif +#elif defined(ANGLE_ENABLE_METAL) + // Prefer metal with opengl fallback over opengl + return EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE; #elif defined(ANGLE_ENABLE_VULKAN) return EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE; #elif defined(ANGLE_ENABLE_NULL) From 26930173647bc0a4e8795f77c05456c5c0c37b8e Mon Sep 17 00:00:00 2001 From: ChristopherHX Date: Fri, 17 Feb 2023 23:28:27 +0100 Subject: [PATCH 8/8] fix selecting metal --- src/libANGLE/Display.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libANGLE/Display.cpp b/src/libANGLE/Display.cpp index 50716b1e4e5..ef3ea742c28 100644 --- a/src/libANGLE/Display.cpp +++ b/src/libANGLE/Display.cpp @@ -173,6 +173,13 @@ EGLAttrib GetDisplayTypeFromEnvironment() } #endif +#if defined(ANGLE_ENABLE_METAL) + if (angleDefaultEnv == "metal") + { + return EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE; + } +#endif + #if defined(ANGLE_ENABLE_D3D11) if (angleDefaultEnv == "d3d11") { @@ -200,7 +207,6 @@ EGLAttrib GetDisplayTypeFromEnvironment() return EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE; # endif #elif defined(ANGLE_ENABLE_METAL) - // Prefer metal with opengl fallback over opengl return EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE; #elif defined(ANGLE_ENABLE_VULKAN) return EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE;