Commit 3e0b61a9 by Le Hoang Quyen Committed by Commit Bot

Metal: Compile default shader source files separately.

- Previously all default shader files were included in one file named master_source.metal. - Now they will be compiled separately and link together to generate binary shader. - Also generate a debug binary variant that will be used in debug build. Bug: angleproject:2634 Change-Id: Ic040835c4a729666e73afeba52f5be839b632396 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2281784 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 9277ee74
{ {
"src/libANGLE/renderer/metal/shaders/blit.metal": "src/libANGLE/renderer/metal/shaders/blit.metal":
"1a12b22f56799bd38cf1c6b301b720ee", "8a00929424273e07e4b63d4ab062f005",
"src/libANGLE/renderer/metal/shaders/clear.metal": "src/libANGLE/renderer/metal/shaders/clear.metal":
"1c231afc6100433a79fce49046aa5965", "1c231afc6100433a79fce49046aa5965",
"src/libANGLE/renderer/metal/shaders/common.h": "src/libANGLE/renderer/metal/shaders/common.h":
"7330bd3f7ab21214e4fe16bc526749bb", "7f4fe9c0ee3fa9bee84ea6627df44e04",
"src/libANGLE/renderer/metal/shaders/compiled/mtl_default_shaders.inc": "src/libANGLE/renderer/metal/shaders/compiled/mtl_default_shaders_autogen.inc":
"445538e99fb3679c3c8436f565911c69", "e244973f2fada4861373fbbf36be5d33",
"src/libANGLE/renderer/metal/shaders/constants.h": "src/libANGLE/renderer/metal/shaders/constants.h":
"9bb6e63bf2b48a7a56978c787bde4850", "9bb6e63bf2b48a7a56978c787bde4850",
"src/libANGLE/renderer/metal/shaders/gen_indices.metal": "src/libANGLE/renderer/metal/shaders/gen_indices.metal":
"002511e2b980a7fca7e80cbda6a82712", "002511e2b980a7fca7e80cbda6a82712",
"src/libANGLE/renderer/metal/shaders/gen_mtl_internal_shaders.py": "src/libANGLE/renderer/metal/shaders/gen_mtl_internal_shaders.py":
"0e599fb113dbc3f714291383d85c39c2", "a17189e67fe112942926902691de1539"
"src/libANGLE/renderer/metal/shaders/master_source.metal":
"fbe6f4bfb49a48ae87791a4cff5fab0a",
"src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc":
"ee7ff414da20e7b84f1187d2bea1e84d"
} }
\ No newline at end of file
...@@ -54,9 +54,8 @@ _metal_backend_sources = [ ...@@ -54,9 +54,8 @@ _metal_backend_sources = [
"mtl_state_cache.mm", "mtl_state_cache.mm",
"mtl_utils.h", "mtl_utils.h",
"mtl_utils.mm", "mtl_utils.mm",
"shaders/compiled/mtl_default_shaders.inc", "shaders/compiled/mtl_default_shaders_autogen.inc",
"shaders/constants.h", "shaders/constants.h",
"shaders/mtl_default_shaders_src_autogen.inc",
] ]
config("angle_metal_backend_config") { config("angle_metal_backend_config") {
......
...@@ -15,8 +15,7 @@ ...@@ -15,8 +15,7 @@
#include "libANGLE/renderer/metal/ContextMtl.h" #include "libANGLE/renderer/metal/ContextMtl.h"
#include "libANGLE/renderer/metal/SurfaceMtl.h" #include "libANGLE/renderer/metal/SurfaceMtl.h"
#include "libANGLE/renderer/metal/mtl_common.h" #include "libANGLE/renderer/metal/mtl_common.h"
#include "libANGLE/renderer/metal/shaders/compiled/mtl_default_shaders.inc" #include "libANGLE/renderer/metal/shaders/compiled/mtl_default_shaders_autogen.inc"
#include "libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc"
#include "platform/Platform.h" #include "platform/Platform.h"
#include "EGL/eglext.h" #include "EGL/eglext.h"
...@@ -666,14 +665,20 @@ angle::Result DisplayMtl::initializeShaderLibrary() ...@@ -666,14 +665,20 @@ angle::Result DisplayMtl::initializeShaderLibrary()
{ {
mtl::AutoObjCObj<NSError> err = nil; mtl::AutoObjCObj<NSError> err = nil;
#if defined(ANGLE_MTL_DEBUG_INTERNAL_SHADERS) const uint8_t *compiled_shader_binary;
mDefaultShaders = CreateShaderLibrary(getMetalDevice(), default_metallib_src, size_t compiled_shader_binary_len;
sizeof(default_metallib_src), &err);
#if !defined(NDEBUG)
compiled_shader_binary = compiled_default_metallib_debug;
compiled_shader_binary_len = compiled_default_metallib_debug_len;
#else #else
mDefaultShaders = CreateShaderLibraryFromBinary(getMetalDevice(), compiled_default_metallib, compiled_shader_binary = compiled_default_metallib;
compiled_default_metallib_len, &err); compiled_shader_binary_len = compiled_default_metallib_len;
#endif #endif
mDefaultShaders = CreateShaderLibraryFromBinary(getMetalDevice(), compiled_shader_binary,
compiled_shader_binary_len, &err);
if (err && !mDefaultShaders) if (err && !mDefaultShaders)
{ {
ANGLE_MTL_OBJC_SCOPE ANGLE_MTL_OBJC_SCOPE
......
...@@ -9,10 +9,9 @@ ...@@ -9,10 +9,9 @@
using namespace rx::mtl_shader; using namespace rx::mtl_shader;
// function_constant(0-3) is already used by gen_indices.metal constant bool kPremultiplyAlpha [[function_constant(1)]];
constant bool kPremultiplyAlpha [[function_constant(4)]]; constant bool kUnmultiplyAlpha [[function_constant(2)]];
constant bool kUnmultiplyAlpha [[function_constant(5)]]; constant int kSourceTextureType [[function_constant(3)]]; // Source texture type.
constant int kSourceTextureType [[function_constant(6)]]; // Source texture type.
constant bool kSourceTextureType2D = kSourceTextureType == kTextureType2D; constant bool kSourceTextureType2D = kSourceTextureType == kTextureType2D;
constant bool kSourceTextureType2DArray = kSourceTextureType == kTextureType2DArray; constant bool kSourceTextureType2DArray = kSourceTextureType == kTextureType2DArray;
constant bool kSourceTextureType2DMS = kSourceTextureType == kTextureType2DMultisample; constant bool kSourceTextureType2DMS = kSourceTextureType == kTextureType2DMultisample;
......
...@@ -26,8 +26,4 @@ using namespace metal; ...@@ -26,8 +26,4 @@ using namespace metal;
// Full screen triangle's vertices // Full screen triangle's vertices
constant float2 gCorners[3] = {float2(-1.0f, -1.0f), float2(3.0f, -1.0f), float2(-1.0f, 3.0f)}; constant float2 gCorners[3] = {float2(-1.0f, -1.0f), float2(3.0f, -1.0f), float2(-1.0f, 3.0f)};
fragment float4 dummyFS()
{
return float4(0, 0, 0, 0);
}
#endif /* LIBANGLE_RENDERER_METAL_SHADERS_COMMON_H_ */ #endif /* LIBANGLE_RENDERER_METAL_SHADERS_COMMON_H_ */
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
//
// Copyright 2019 The ANGLE Project. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// master_source.metal:
// Includes all other metal source code in one file.
#include "clear.metal"
#include "blit.metal"
#include "gen_indices.metal"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment