src/libANGLE/renderer/metal/mtl_common.h

Branch


Log

Author Commit Date CI Message
Kimmo Kinnunen d4083c79 2025-01-31T15:06:36 Metal: Make ObjCPtr available to all modules Move ObjCPtr implementation to src/common/ObjCPtr.h, angle::ObjCPtr so that it's available also outside libANGLE. Bug: angleproject:393263506 Change-Id: I8ecd5632c7ae33ef4b409fc820fad229e91bc0ab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6219318 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Kimmo Kinnunen 4e5f2ca3 2025-01-31T14:30:05 Metal: Rewrite AutoObjCPtr as ObjCPtr Rewrite without WrappedObject base class, the base class only convolutes things and does not help. This way the class can be moved upwards in the software layers in subsequent commits. Fix the class so that it can be used with ObjCPtr<T> and ObjCPtr<id<P>> signatures, to resemble other smart pointers. Remove the Auto prefix, ObjCPtr should be relatable to other smart pointers such as unique_ptr. Bug: angleproject:393263506 Change-Id: Ia5a5728514b7f9182c2ec8380c04716e8b9d2351 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6219317 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Kimmo Kinnunen 1675d47f 2025-01-31T10:05:03 Metal: Remove incorrect AutoObjCPtr construct on T && The T && constructor and operator= were incorrectly marked up as "ownership transfer", clearing the source. However, there is no ownership transfer in the assignment, and the call sites only work due to the T source holding is never unretained directly. Consider correct sequence (T is NSMutableArray *): NSMutableArray *obj = [[NSMutableArray alloc] init]; AutoObjCPtr<NSMutableArray *> myHolder = std::move(obj); [obj release]; Since the construct was retaining, the correct operation would need a release on the original raw obj-c pointer. However, the T && constructor would clear out the raw obj-c pointer, and thus calling release on the original pointer would not be possible. Remove the T && constructor, and use just normal T constructor. There's no ownership transfer when constructing AutoObjCPtr -- it is a retaining operation. The constructor does need T &&, raw obj-c objects are just passed normally as pointers, T. Call sites keep their std::move()s, which are no-ops. When functions accepting obj-c pointers get changed to accepting AutoObjCPtrs, the move will start actually transferring the ownership. Bug: angleproject:393263506 Change-Id: I5847f2ec98ab372343d0d2559c92dee9a327e126 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6219316 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen bee34ea7 2025-01-30T18:39:00 Metal: Remove redundant AutoObjCObj template alias Some members were held with AutoObjCObj<T> and some with AutoObjCPtr<T *>. Use the latter. Bug: angleproject:393263506 Change-Id: I9d8d56e9ffe3281d5e9087de7959249cbb4b9bd4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6216872 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen a04cb42a 2025-01-30T16:26:44 Metal: Remove autorelease use from libANGLE parts Use adoptObjCPtr() instead of AUTORELEASE to make all code uniform and more easy to reason about. Bug: angleproject:393263506 Change-Id: I15ea7e29784bcbe6bee6341fe288b340db813538 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6216870 Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com>
Kimmo Kinnunen 5325904b 2025-01-29T14:43:35 Metal: Simplify error checking Use normal ANGLE_CHECK, ANGLE_CHECK_GL_ALLOC, ANGLE_CHECK_GL_MATH when appropriate. Use ANGLE_MTL_CHECK for checking Metal NSError return value. Remove mtl::ErrorHandler::handleError variant that responds to NSError. Uses "Internal error." that occur due to implementation bugs. Binary size is already expended with __FILE__ et al to disambiguate the location. The descriptions were not actionable for the API client and sometimes wrong cut-and-paste. Bug: angleproject:392938089 Change-Id: If9525d3d1610d5bc757855053600d78d2a1526c3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6211841 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev a36c459e 2024-08-20T00:00:00 Metal: Remove redundant symbol redeclarations MTLBlitOptionRowLinearPVRTC - macOS 11.0 (min compile 12.0) - iOS/tvOS 9.0 (min compile 17.0) MTLBarrierScope - macOS 10.14 (min compile 12.0) - iOS/tvOS 12.0 (min compile 17.0) MTLBarrierScopeRenderTargets - Moved compile guards to call sites MTLRenderStages, MTLRenderStageVertex, MTLRenderStageFragment - macOS 10.13 (min compile 12.0) - iOS/tvOS 10.0 (min compile 17.0) Bug: angleproject:360147119 Change-Id: I7dac46accde63be486a7de918284bbd6e8367a4e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5806896 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 1dabe52c 2024-08-20T00:00:00 Metal: Remove texture swizzle compile guards Texture swizzle support: - macOS 10.15 (min compile 12.0, min deploy 10.15) - iOS/tvOS 13.0 (min compile 17.0, min deploy 15.0) Bug: angleproject:360147119 Change-Id: If7e59cc094e5bcdb145a54541662d0fe0a989e8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5803984 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 2758d4dc 2024-08-20T16:00:07 Metal: Remove shared event related ifdefs Shared events are supported by iOS 12, macOS 10.14, included in the minimum versions iOS 15, macOS 10.15. Bug: angleproject:360147118 Change-Id: I5b62dade045f9d50864ef1906cb22a18fd09e4da Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5797150 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 27423bff 2024-03-05T17:57:24 Metal: Generate names for rewritten inputs When expanding multi-component fields to multiple single-component fields, use AngleInternal namespace for the new names. The names are generated with form "someField_0" where _0 is the component index. If these are not created in AngleInternal, caller is able to create a name clash by introducing single-component field "someField_0". Fixes an assert where the vec4(a_) + vec4(a) would assert on size mismatch because the variable lookup for "a_" would find a rewritten variable for the expanded matrix row of "a". Bug: angleproject:8558 Change-Id: I64b7a755d7d534543fdb0f4c43008dd5c63f4aad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5323060 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com>
Geoff Lang bd5dce9a 2023-11-21T15:39:04 Metal: Use MTLEvent instead of MTLSharedEvent when possible Refactor mtl::Sync to be abstract and have multiple implementations using either MTLEvent or MTLSharedEvent. Use MTLEvent in all cases except for EGL Syncs when the user sets the sync type to EGL_SYNC_METAL_SHARED_EVENT_ANGLE. Determine completion of the sync object by watching for completion of the command buffer where the event's signaling was enqueued. Avoid any sleep loops by waiting on a condition_variable which is notified when the completed queue serial is updated. Forked from CLs by sky@ and kbr@ Bug: angleproject:8153 Change-Id: I4547444b596366496c811cb9954872b85ab14ad8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5133706 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi ae67a24b 2023-08-25T14:51:50 Metal: Move program state to ProgramExecutableMtl Bug: angleproject:8297 Change-Id: I1d13f7aee1ff5b0ce799b486d8a57c83c4481983 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4812047 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kenneth Russell aea88562 2023-05-19T16:52:43 Reland "Metal: Optimized BufferSubData per device" This reverts commit ee64836f702332adaca58d9f452063a04b2da955 , relanding the patch stack described there. Between patchsets 1 and 5: - The shadow buffer allocation has been replaced with a multimap of precisely-sized buffers, rather than rounding up buffer sizes. - Garbage collection of shadow buffers is triggered in three situations: - A certain number of context switches have occurred; this number was hand-tuned to avoid GC every frame. - A certain number of command buffer submissions has occurred; this number was hand-tuned to GC no more often than every few seconds on representative workloads. - The total size of the allocated shadow buffers is more than 1 MB, and either more than twice the size at the last garbage collection, or 64 MB more than at the last garbage collection. In this case, aggressive GC is performed in order to reclaim shadow buffers more quickly. Performance before and after these changes appears identical on microbenchmarks. On one Figma test case, comparing GPU memory allocated inside the BufferManager, peak consumption is decreased by over 75%, and steady-state consumption decreases by over 88%. Patchset 6 adds a needed workaround for a bug in the AMDMTLBronzeDriver affecting uploads of client-side data, and therefore some dEQP tests. It also streamlines the aggressive GC. Bug: angleproject:7544 Change-Id: I81b061f0b33c27fa403527fa12d626f4e9c88ebe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4497413 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kenneth Russell ee64836f 2023-02-11T17:56:06 Revert "Metal: Optimized BufferSubData per device" This reverts commit 968041b54770af8917001d8fe9b52a881cfed0b2. Includes the following patches: git revert -n 995db1f66bcf87fc9e47d908fb2a885e810d2567 \ 9a6c90c8f802b4d107a081bfccaf4be007e7af54 \ dbd47e378582ef86db52c7379cd220cf0b2c8193 \ 369b320f92f54774879e8b8faff834fc8db0793e \ 4abae6f97586448712e2dc1cced4a678b0901d7b \ 968041b54770af8917001d8fe9b52a881cfed0b2 Several conflicts with top-of-tree were resolved during this revert. The aim is to reland this with additional code which will reduce the amount of excess buffer memory allocated, and release the resources associated with temporary buffer allocations. Bug: angleproject:7544 Change-Id: Ib7a6bc2ab1c2f23cb43112cd980106e2898c3826 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4240556 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Gregg Tavares <gman@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Tiago Vignatti 5ff1298c 2023-01-10T15:02:13 Metal: Fix MTLBarrierScope type availability Latest SDK doesn't provide MTLBarrierScopeRenderTargets for iOS and is very specific for macOS versions: MTLBarrierScopeRenderTargets API_AVAILABLE(macos(10.14), macCatalyst(13.0)) API_UNAVAILABLE(ios) = 1 << 2 This fixes MTLBarrierScopeRenderTargets availability according the latest SDK. Test: build ANGLE with Metal renderer enabled on iOS. Bug: None Change-Id: I101ccfe6ab77d7241ac4a925aeebce8801782428 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4126578 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Chris Dalton <chris@rive.app> Auto-Submit: Tiago Vignatti <tvignatti@igalia.com> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Chris Dalton a4db9477 2022-10-06T10:35:39 Implement pixel local storage with metal::read_write textures Metal's programmable blending feature isn't available on non-Apple Silicon, so on these devices we have to polyfill pixel local storage using read_write textures, which can also be coherent if raster_order_groups are supported. This change leverages the existing PLS transformation to images, and implements just enough shader image functionality in Metal to support the pixel local storage usecase. Missing shader image features are marked with UNIMPLEMENTED(). Bug: angleproject:7279 Bug: angleproject:7792 Bug: angleproject:7794 Bug: angleproject:7797 Bug: angleproject:7803 Change-Id: Ia96a714693d352d57351a1bae4f45437dde000e4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3993363 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app> Reviewed-by: Kyle Piddington <kpiddington@apple.com>
Gregg Tavares 968041b5 2022-08-19T12:11:23 Metal: Optimized BufferSubData per device Adds a staging buffer path which means there are 4 paths for bufferSubData. 1. direct copy * get a pointer to the buffer * copy the new data to the buffer * if the buffer is managed, tell metal which part was updated 2. use a shadow copy * copy the data to a shadow copy * copy the entire shadow to a new buffer * start using the new buffer 3. use a new buffer * get a new buffer (or unused) * put the new data in the new buffer * blit any unchanged data from the old buffer to the new buffer * start using the new buffer 4. use a staging buffer * get a staging buffer * put the new data in the staging buffer * blit from the staging buffer to the existing buffer. Further, there are 3 types of memory storage modes. Managed, Staged, Private. Based on the GPU type different storage modes and different paths in different sitatutions are more performant. So, add feature flags to select paths by GPU. Bug: angleproject:7544 Change-Id: I741dd1874201043416374194bd2001ded8dbd9b4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3842641 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Dan Glastonbury d2a58f00 2022-09-08T14:19:21 EGL: Implement eglCopyMetalSharedEventANGLE Add eglCopyMetalSharedEventANGLE function to the ANGLE_metal_shared_event_sync extension. This brings the extension on par with the EGL_ANDROID_native_fence_sync extension. eglCopyMetalSharedEventANGLE allows for copying the Metal event object from EGLSync objects implemented by the ANGLE Metal renderer. This function follows Objective-C convention for "copy" methods and increases the retain count of the Metal event object. The EGL API user is thus responsible for ensuring to release the returned object to avoid memory leaks. Test: angle_end2end_tests --gtest_filter=EGLSyncTestMetalSharedEvent.* Bug: angleproject:7561 Change-Id: I8c35b559014b85cb8c6a0e76ac2ab7891eed5da0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3881423 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org>
Kenneth Russell 448e2275 2022-07-21T16:40:59 (Reland) [Metal] Disable ANGLE's Metal backend on older GPUs. Disable creation of EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE displays on: iOS: MTLGPUFamilyApple2 and older (A8 and older GPUs) macOS and Mac Catalyst: MTLGPUFamilyMac1 and older This is a partial integration of this recent WebKit fix: https://bugs.webkit.org/show_bug.cgi?id=242764 Refactored to eliminate duplicate copies of this code between libANGLE and the test suites. Changes since initial landing: - Explicitly link the angle_common static library against Metal.framework for the definition of MTLCreateSystemDefaultDevice, which was missing on the iOS Simulator. Fixed: angleproject:7514 Change-Id: I25028a298f1235db5b717ac6a1999552121d60c6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3806252 Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Yuly Novikov 8eaa0ccf 2022-08-02T12:03:21 Revert "[Metal] Disable ANGLE's Metal backend on older GPUs." This reverts commit cc2095d259222de434af06ce8515f17449a8f66d. Reason for revert: breaks rolling into Chromium https://ci.chromium.org/ui/p/chromium/builders/try/ios-simulator/1234241/overview Original change's description: > [Metal] Disable ANGLE's Metal backend on older GPUs. > > Disable creation of EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE displays on: > iOS: MTLGPUFamilyApple2 and older (A8 and older GPUs) > macOS and Mac Catalyst: MTLGPUFamilyMac1 and older > > This is a partial integration of this recent WebKit fix: > https://bugs.webkit.org/show_bug.cgi?id=242764 > > Refactored to eliminate duplicate copies of this code between libANGLE > and the test suites. > > Fixed: angleproject:7514 > Change-Id: I00dd1096bc8e72516f3f77fffcb7d4a886d6f2e4 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3780876 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Kenneth Russell <kbr@chromium.org> Change-Id: If1e78ebc0c8e12a1fa0954d91bdd59fbd734251f No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3804879 Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Kenneth Russell cc2095d2 2022-07-21T16:40:59 [Metal] Disable ANGLE's Metal backend on older GPUs. Disable creation of EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE displays on: iOS: MTLGPUFamilyApple2 and older (A8 and older GPUs) macOS and Mac Catalyst: MTLGPUFamilyMac1 and older This is a partial integration of this recent WebKit fix: https://bugs.webkit.org/show_bug.cgi?id=242764 Refactored to eliminate duplicate copies of this code between libANGLE and the test suites. Fixed: angleproject:7514 Change-Id: I00dd1096bc8e72516f3f77fffcb7d4a886d6f2e4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3780876 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Gregg Tavares 94320a83 2022-05-27T17:41:29 Metal: Validate total bits used in color attachments Metal has 2 limits for color attachments. 1 the number of attachments supported. 2 the total number of bits it can write per pixel. So for example Apple4 through Apple8 GPUs can have 8 attachments but only 512bits of output. That means you can attach 8 RGBA8 textures (256bits), but you can't attach 8 RGBA32UI textures (1024bits). If there are too many bits then return FRAMEBUFFER_UNSUPPORTED from checkFramebufferStatus and INVALID_FRAMEBUFFER_OPERATION from draws Bug: angleproject:7280 Change-Id: I935aebad4d57664f59a60be20a927d6b69afb4ff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3674322 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 8a0351a5 2022-05-26T14:29:21 Metal:Dynamically choose max draw buffers. The code was hard coded to 4 which is lower than OpenGL's 8. This implementation keeps a hard coded array of size 8 in rx::mtl::RenderPassDesc and rx::mtl::RenderPipelineOutputDesc but only uses up to the display's limit. Bug: angleproject:7280 Bug: angleproject:5730 Change-Id: Idd7e64dc47697882b44540804159566158e1e924 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3671695 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 17f9e941 2022-06-01T15:22:29 Metal: Upstream clear performance fix Restricts in-flight render passes per command buffer a predefined limit. The goal is to reduce the number of active render passes on the system at any one time. Patch is from: https://bugs.webkit.org/show_bug.cgi?id=234008 Bug: angleproject:7386 Change-Id: I6712bf38722e2685ed7d21f12ed0a680779b7a41 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3685190 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares cd80b511 2022-05-26T12:00:13 Metal: Upstream uniform limits from WebKit Increases the limit from 4k to 16k which matches OpenGL. Patches are from: https://bugs.webkit.org/show_bug.cgi?id=238914 https://bugs.webkit.org/show_bug.cgi?id=240896 Bug: angleproject:7280 Change-Id: I404adce0066680513e3eaa56bd4b1079c39a7f03 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3669602 Commit-Queue: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Geoff Lang 6ddbfa39 2022-05-09T09:06:16 Metal: Log the shader source when a shader fails to translate Refactor Metal logging to include a message string. Bug: chromium:1322521 Change-Id: I3a7b5c36fcf140b3664ad96a9da924819326bf94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3634725 Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Kyle Piddington 1bd1a3db 2022-01-06T15:08:48 Metal: Canvas resizing causes webpage to run out of memory For https://bugs.webkit.org/show_bug.cgi?id=232122 Introduce a maximum resident amount of memory that a single command buffer can use, before forcing a flush. As part of ensuring that a command buffer is ready, check to see if this limit is exceeded. if so, flush the command buffer, and create a new one. Bug: angleproject:6880 Change-Id: I5e89735d05adbc174237ab79b006a75bbe89e560 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3369922 Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Kyle Piddington f13f440e 2021-12-15T15:11:05 Reland: Metal: Fix Webkit warnings in ANGLE build Fix nullable warnings, unused functions Add in additional function specification to FormatStringIntoVector to correctly fix warning Bug: angleproject:6781 Change-Id: I26af2d698f14d353832802aa7b5ce34c5a1f4b95 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3366796 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Jamie Madill 1da7e3af 2021-12-21T15:55:38 Revert "Metal: Fix Webkit warnings in ANGLE build" This reverts commit 6706799186683dd3733c4610de09d84721aa08c8. Reason for revert: Includes pragma that disables a warning. Original change's description: > Metal: Fix Webkit warnings in ANGLE build > > Fix nullable warnings, unused functions > > Bug: angleproject:6781 > Change-Id: I063331e60d31a55b3cc9df0b41ace014d7d13659 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3343174 > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Commit-Queue: Kenneth Russell <kbr@chromium.org> Bug: angleproject:6781 Change-Id: Id5fce2afd0381030a974871b99e8adf075677bd1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3352086 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Kyle Piddington 67067991 2021-12-15T15:11:05 Metal: Fix Webkit warnings in ANGLE build Fix nullable warnings, unused functions Bug: angleproject:6781 Change-Id: I063331e60d31a55b3cc9df0b41ace014d7d13659 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3343174 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Kyle Piddington 3e7e2758 2021-12-14T15:48:42 Metal: Fix macOS ANGLE build on Catalina (10.15) SDK macOS Catalina does not have an enum for AppleGPUFamily6 In addition, platform includes for macOS 11.0 should use 110000, not 101600 (10.16) Bug: angleproject:6814 Change-Id: I9c6a0587aa22fb2e58d02fcb1779060de2632963 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3340104 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
John Cunningham 42bd4fc2 2021-12-10T14:58:17 Metal: add ANGLE_metal_create_context_ownership_identity. This Metal-specific EGL extension allows a given context and the GPU resources it allocates to be associated with a particular task ID on the system, for system-level bookkeeping purposes. Bug: angleproject:6795 Change-Id: I19ee0993564169b01c4a450e63dcfacd339b98b5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3335172 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Gregg Tavares ab426735 2021-10-29T13:54:09 Template gl::Rectangle so it can be used for float Bug: angleproject:6598 Change-Id: I8cf5894f0e34c56a6ad856c978be93ea9d5ae113 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3253131 Commit-Queue: Gregg Tavares <gman@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington 54d4bfe5 2021-09-28T17:27:57 Update ANGLE Metal to Webkit at Sept 29 2021 This commit merges changes from Webkit into ANGLE upstream. The following commits were used: Current: https://git.webkit.org/?p=WebKit.git;a=commit;h=e01d0bda8f4b7dc2fd834b92802d15d8c15735f Previous: https://git.webkit.org/?p=WebKit.git;a=commit;h=492f078198748e8ff248eea0bb979cf79e5f5adfj The following commits were merged in from the Webkit Repository: (Hashes from git://git.webkit.org/WebKit-https.git) 03ea44c78ce5665d4ec9add271260121cbc7bc6c Problems with drawElements in some conditions https://bugs.webkit.org/show_bug.cgi?id=230107 c8dc8e0c4d1109d39a62eb197b45e95132380290 ANGLE Metal: single-component swizzles do not compile https://bugs.webkit.org/show_bug.cgi?id=230472 7285dbaaf5af15877d6c332b30ef7a4d67225460 webgl-compressed-texture-s3tc-srgb.html fails on Intel+AMD Metal https://bugs.webkit.org/show_bug.cgi?id=229941 4c72f92967ecd2a095666fef431384c4f5f60fb4 fragcolor-fragdata-invariant.html fails https://bugs.webkit.org/show_bug.cgi?id=223317 cd943145467f54e5928793c0dd3dfa2313c007dd ANGLE Metal index buffer restart range cache could be maintained.. https://bugs.webkit.org/show_bug.cgi?id=227451 f075ff77e592eabd54dd659a8e13617cc5faedc8 ANGLE Metal infinities and NaNs generated with incorrect syntax https://bugs.webkit.org/show_bug.cgi?id=229439 5862073269122f4b2d43d96d3922757557755e86 [Metal ANGLE] Fix over-autorelease of rx::DisplayMtl::getMetalDeviceMatchingAttribute()... <https://webkit.org/b/229128> 85f797ad31db048cb82cbafd428ef77f0b839312 ANGLE Cocoa compiles.... https://bugs.webkit.org/show_bug.cgi?id=228987 a67918ba279ad4842b6ae84a79c3f1c0cdc35ace Avoid infinite recursion... https://bugs.webkit.org/show_bug.cgi?id=228978 d341f67de0033adcf1ec6373ace6a54b06c4a031 Cherry-pick ANGLE: Revise WebGL's shaderSource validation https://bugs.webkit.org/show_bug.cgi?id=228951 1e2714d981e97de8234ba055570dfdf56e8b6944 3.5 MB system-wide footprint impact due to thread-locals... https://bugs.webkit.org/show_bug.cgi?id=228240 d32e5cca34081997d32504b0b56c18b9703ff3be Build Default Metal library offline https://bugs.webkit.org/show_bug.cgi?id=227333 33702279faccfd4c8d1c8a6d549925f9ca9a4e8f WebGL2 demo doesn't work due to failing compilation.... https://bugs.webkit.org/show_bug.cgi?id=226865 0a075885d242db38c4e435a6597173dc3b082173 rAF driven WebGL submits excessive amount of GPU work... https://bugs.webkit.org/show_bug.cgi?id=227059 f38a92b3e7c17efda269caa7066e7ffe2f828e72 WebGL shader link error in iOS 15 beta: "Internal error..." https://bugs.webkit.org/show_bug.cgi?id=227723 98d48f011d561531470d97f26a022767b5452fb7 REGRESSION (r279466): [Big Sur] webgl/1.0.3/conformance &... https://bugs.webkit.org/show_bug.cgi?id=227596 Bug: angleproject:6471 Change-Id: I07166d0dc4b5c3579d98353485b3245b81c7b882 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3194322 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Kyle Piddington 7dd2361b 2021-09-17T15:43:22 Metal: ANGLE Metal AutoObjCPtr == nullptr comparison is inverted Port the fix from Webkit for this inverted comparsion Unify the nullptr type throughout all functions Bug: angleproject:6351 Change-Id: Id856af31c9eea5cc79993c3454e452d1c14d0d0e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3169436 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Gregg Tavares <gman@chromium.org>
Kyle Piddington d33a2222 2021-04-26T16:56:15 Upstream Apple's direct-to-Metal backend: compile libANGLE. This change is meant to merge the metal backend changes from Apple's direct-to-Metal backend. Taken from Kyle Piddington's CL: https://chromium-review.googlesource.com/c/angle/angle/+/2857366/ The goal of this CL is to merge the metal backend code in a state that compiles, but not to switch the Metal backend over to using the direct-to-metal backend yet. Bug: angleproject:5505 Bug: angleproject:6127 Change-Id: If6783e06e0086b3a1dd25c6f53caca5cfc96cb86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2950067 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen f2aa9d5d 2021-04-11T14:55:19 Reland: Metal: Support importing external metal textures This relands I4d4a88cfbb77d8b7508b787c7fec44073d3b11b0. Fixes: - uninstantiated ImageTestMetal error - failed ImageTest.ANGLEExtensionAvailability on ARM mac. Bug: angleproject:5763 Bug: angleproject:5814 Change-Id: I906fe52baefd6be3c6e00f594795bd527df01616 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2820178 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Kai Ninomiya 256100b2 2021-04-02T01:45:14 Revert "Metal: Support importing external metal textures" This reverts commit 2ec3e0a1e6890da56de9dfd3da5c9f31a3f7fbb7. Reason for revert: Test suite ImageTestMetal never instantiated https://anglebug.com/5814 Original change's description: > Metal: Support importing external metal textures > > via KHR_image_base and ANGLE_metal_texture_client_buffer > > Bug: angleproject:5763 > Change-Id: I4d4a88cfbb77d8b7508b787c7fec44073d3b11b0 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2757811 > Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> Bug: angleproject:5763, angleproject:5814 Change-Id: Ia862aa37a6c914f6e21f9b3121c7c36d449475ea No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2801155 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Le Hoang Quyen 2ec3e0a1 2021-03-13T22:17:49 Metal: Support importing external metal textures via KHR_image_base and ANGLE_metal_texture_client_buffer Bug: angleproject:5763 Change-Id: I4d4a88cfbb77d8b7508b787c7fec44073d3b11b0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2757811 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Alexey Knyazev ffd80394 2021-03-06T13:32:09 Metal: Enable iOS pixel formats on macOS 11 Bug: angleproject:2634, angleproject:5672 Change-Id: Idd1cc325067e73b02f4f82b2d78d20420e50645b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2739729 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 8a50b42b 2020-10-24T19:29:12 Metal: Convert index & vertex format on GPU when possible. - When converting vertex buffer: - if there is no render pass active, use compute shader to convert. - if there is a render pass active and device supports explicit memory barrier then convert the buffer in vertex shader with direct buffer write and insert a memory barrier. - if there is a render pass active and device doesn't support explicit memory barrier then convert the buffer on CPU. Bug: angleproject:2634 Change-Id: I5346e3a2adb855f40e46a3912d9db404a4482e0f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2434025 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen 83539557 2020-09-27T16:27:16 Metal: Implement texture swizzle Only enabled on macOS 10.15 and iOS 13.0 for now. Bug: angleproject:2634 Change-Id: Ic44a245198e32f076e429312cae844c510e864d1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433333 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Le Hoang Quyen 9ff58e26 2020-09-27T15:27:12 Metal: Implement sampler object & shadow compare mode Note: GL_TEXTURE_COMPARE_MODE=GL_NONE is not supported on shadow sampler for now. Bug: angleproject:2634 Change-Id: I470bad6322e78ef1408e4334e1e778821df7cbf1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433332 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen 80d4901a 2020-09-26T19:22:00 Metal: Support integer textures. Bug: angleproject:2634 Bug: angleproject:5154 Change-Id: Iffea26fe2c683557b4fa7c13fddf3523294b47d4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433329 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 0e5e6078 2020-09-26T23:31:24 Metal: Use MipmapNativeLevel class to store native mip lvl This is to avoid wrong native level in Metal, for example, not taking into account the OpenGL base level. Bug: angleproject:2634 Change-Id: I3a7a3ac41bdbd91a47755bb4ca11bd579c182e04 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433326 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 6dfd855a 2020-03-25T03:02:08 Metal: Implement fence sync Bug: angleproject:2634 Change-Id: If1f7bb12c0e661c8e4b5677798a92440995819e4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433325 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 6136cbcb 2020-09-23T21:31:05 Metal: Implement transform feedback - XFB is currently emulated by writing to storage buffers. - Metal doesn't allow vertex shader to both write to storage buffers and to stage output (i.e clip position). So if GL_RASTERIZER_DISCARD is NOT enabled, the draw with XFB enabled will have 2 passes: + First pass: vertex shader writes to XFB buffers + not write to stage output + disable rasterizer. + Second pass: vertex shader writes to stage output (i.e. [[position]]) + enable rasterizer. If GL_RASTERIZER_DISCARD is enabled, the second pass is omitted. + This effectively executes the same vertex shader twice. TODO: possible improvement is writing vertex outputs to buffer in first pass then re-use that buffer as input for second pass which has a passthrough vertex shader. - If GL_RASTERIZER_DISCARD is enabled, and XFB is enabled: + Only first pass above will be executed, and the render pass will use an empty 1x1 texture attachment since rasterization is not needed. - If GL_RASTERIZER_DISCARD is enabled, but XFB is NOT enabled: + we still enable Metal rasterizer. + but vertex shader must emulate the discard by writing gl_Position = (-3, -3, -3, 1). This effectively moves the vertex out of clip space's visible area. + This is because GLSL still allows vertex shader to write to stage output when rasterizer is disabled. However, Metal doesn't allow that. In Metal, if rasterizer is disabled, then vertex shader must not write to stage output. - See src/libANGLE/renderer/metal/doc/TransformFeedback.md for more details. Bug: angleproject:2634 Change-Id: I6c700e031052560326b7f660ee7597202d38e6aa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2408594 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen 1677cf14 2020-09-13T20:14:59 Metal: Implement Uniform buffers Uniform buffer is implemented in two forms: - If number of ubo used in shader program is low, each buffer will use one discrete Metal buffer slot. - If number of ubo used is large, they will be embedded into one Metal argument buffer. Argument buffer is similar to Vulkan descriptor set. This is due to limit of number of Metal's discrete buffer slots which is only 31 and over half of them are already used by vertex attributes, default uniforms, driver uniforms, etc. The downside is that whenever a buffer binding is changed, the argument buffer must be updated also. Added empty TransformFeedbackMtl implementation to enable ES3 context creation on Metal. Bug: angleproject:2634 Change-Id: I69325696fac735cb45ab88ab55468c0991abc317 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2408593 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen 69da0b92 2020-09-13T20:00:19 Metal: Use shared memory for small dynamic buffers. - If BufferMtl is static or large size, don't use shadow copy. Use one MTLBuffer and map directly on it. - If BufferMtl is dynamic and small size, use shadow copy and buffer pool of 10 MTLBuffer (s). The MTLBuffer is allocated in shared memory in this case (PCI-E memory for example). MTLBuffer in shared memory region doesn't need to sync content between CPU and GPU. - When copyBuffer, if BufferMtl is being used by GPU use blit command to do the copy on GPU side. - Also implemented GL_MAP_UNSYNCHRONIZED_BIT. Bug: angleproject:2634 Change-Id: I7a5aab309d24c76106a7087358ee5883ee05d250 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2408592 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen d7149f2a 2020-08-26T19:44:54 Metal: Disable unused attribute slots. If an attribute slot is unused and user enables it but doesn't bind any buffer, Metal validation layer will complain that a buffer slot is missing (even though the slot is not used inside shader). Fix: if shader program doesn't use an attribute slot or there is no buffer bound to it, then disable that attribute. Bug: angleproject:2634 Change-Id: Ib56e0bf64bab13efce8b2972bfe386e26f45e50e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2392171 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen bdecaf33 2020-08-04T20:16:27 Metal: Implement PBO. Bug: angleproject:2634 Change-Id: I77f085227298bf46361825d1886e04830dc9987a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336558 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 50704dc3 2020-08-04T12:08:00 Metal: Implement EXT_occlusion_query_boolean. - Metal's occlusion(called visibility) query operates per render pass. Implementation details are in src/libANGLE/renderer/metal/doc/OcclusionQueries.md. - New tests: - OcclusionQueriesTest.ClearNotCounted. - OcclusionQueriesTest.MultiQueries (failure on OpenGL/D3D11 back-end). Bug: angleproject:2634 Change-Id: Idd1327b5472d0e8c2b69307a7f04a1da4a847a40 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336121 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: back sept 10 - Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen 4f247baf 2020-08-23T22:58:56 Metal: Implement EXT_draw_buffers & ANGLE_framebuffer_blit Bug: angleproject:2634 Change-Id: I769ca7e113e660870e9b31dafb706c313db8ac24 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2332146 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen 113c5e29 2020-05-11T22:49:03 Metal: deferred render command encoder creation. MTLRenderCommandEncoder creation will be deferred until a render pass ends. Commands will be stored into a back-end owned buffer during render pass. At the end of the render pass, those commands will be re-encoded into an actual MTLRenderCommandEncoder. Benefits: - Useful for future implementation of occlusion query buffer where it could be allocated right before the end of a render pass to be big enough to store all queries within the render pass. - It's possible to change load option (deferred clear) as long as there is no draw call issued yet. This is not implemented yet. - Possibility of commands' re-ordering. Bug: angleproject:2634 Change-Id: I1348716aa882c0540d9120bf175d8dac13fb58bd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2193196 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 5e13757b 2020-05-11T00:50:00 Metal: Fix array of structs containing array of samplers bug. Previously ProgramMtl could try to bind fixed slots to samplers based on layout (set=..., binding=...). However, GLSL layout model is different from Metal slots assignment. For example, The following is valid layout in GLSL: - array samplers A[2] is bound to index 0. - array samplers B[2] is bound to index 1. It is invalid to do so in Metal, since A occupies 2 slots, thus samplers B[2] must be bound to slots starting from 2. New binding method: let spirv-cross auto assigns the texture slots and retrieve them after compilation. Incomplete textures moved to ContextMtl using IncompleteTextureSet. New test added: GLSLTest.ArrayOfStructContainingArrayOfSamplers. Bug: angleproject:2634 Change-Id: Ib0edaaf8b20512e1272c37c1d4b16a88a5b35e75 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2193193 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen ab42afa6 2019-11-21T10:13:44 Metal: fix vertex attribute's conversion lost after changing buffer binding. After vertex buffer's attribute is converted and stored in conversion buffer. Binding the same attribute to another buffer, then binding it back to previous buffer will result in previous conversion information lost. The conversion method would skip the conversion due to buffer's content hadn't been changed, however it didn't reuse the old conversion result. This CL also changed the way binding offset is used in Metal backend. - Previous, the offset would be assigned to the offset field of MTLVertexAttributeDescriptor, then the buffer would simply be bound to the command encoder with offset=0 i.e. setVertexBuffer(buffer, index, 0) - However this approach has several disadvantages. Since Metal doesn't allow MTLVertexAttributeDescriptor's offset to be larger than the vertex attribute's stride, the old approach would force the back-end to convert the attribute and store in conversion buffer. New approach: - MTLVertexAttributeDescriptor's offset will be zero. The offset will be used to bind the buffer itself to the render command encoder. i.e. setVertexBuffer(buffer, index, offset) This way the "offset <= stride" restriction no longer exists. The only restriction is the offset must be multiple of attribute's size. Added 3 new tests: - SimpleStateChangeTest.RebindTranslatedAttribute - VertexAttributeTest.DrawWithLargeBufferOffset - VertexAttributeTest.DrawWithLargeBufferOffsetAndLessComponents Bug: angleproject:2634 Change-Id: I6c2fa8091436e4a24405d791f86d17d97df02d64 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1940009 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen d1860ea1 2019-11-19T23:04:00 Metal: support OES_depth_texture Also added Depth32 & Depth16 texture data upload tests. Bug: angleproject:2634 Change-Id: I103f1cda1dc915f0dc8b04f7aaa2d8c0f9220cda Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1919281 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Quyen fe26bae4 2019-10-29T18:38:53 Metal backend implementation pt 2 This is without Metal specific shader translator implemented yet. Bug: angleproject:2634 Change-Id: I95d589442251c9ba111bd05a2dc379a36739046c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1855069 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Le Quyen d200a77a 2019-10-10T00:44:01 Metal backend skeleton implementation. Bug: angleproject:2634 Change-Id: I34be82f4a80a6851fecb53a51e069b134d82613a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1849079 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>