src/libANGLE/renderer/metal


Log

Author Commit Date CI Message
Geoff Lang 31c13df5 2022-05-30T15:06:26 Revert "Initialize buffer contents separately from BufferImpl::setData" This reverts commit 34cff1a14b635c76a9063b8710e948d04ef98a79. Reason for revert: Speculative revert for Mac M1 WebGL failures. Bug: chromium:1330314 Original change's description: > Initialize buffer contents separately from BufferImpl::setData > > Some backends can initialize buffer data faster than allocating a > zero-filled scratch buffer (GL can map and memset for example). > Allow those backends the opportunity to make these optimizations. > > Verified that GL, D3D and VK backends do not regress by using a > separate set data call. > > Bug: chromium:983167 > Change-Id: Ibcbe6016059434dc36ab3c754df6a24f0a6e5e72 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3039778 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Peng Huang <penghuang@chromium.org> > Commit-Queue: Geoff Lang <geofflang@chromium.org> Bug: chromium:983167 Change-Id: Id1bfa76b832c35fd0b3ade04da16735aa089fdd2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3677335 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Peng Huang <penghuang@chromium.org>
Geoff Lang 34cff1a1 2021-07-19T14:29:35 Initialize buffer contents separately from BufferImpl::setData Some backends can initialize buffer data faster than allocating a zero-filled scratch buffer (GL can map and memset for example). Allow those backends the opportunity to make these optimizations. Verified that GL, D3D and VK backends do not regress by using a separate set data call. Bug: chromium:983167 Change-Id: Ibcbe6016059434dc36ab3c754df6a24f0a6e5e72 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3039778 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Peng Huang <penghuang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 2df17a12 2022-05-25T16:18:37 Vulkan: Pack driver uniforms Previously 5 vec4s were used for driver uniforms + 2 vec4s if specialization constants couldn't be supported. The driver uniforms are rearranged and packed such that only 2 vec4s are normally used, which include fallback for specialization constants as well. In the future, most of the specialization constants may turn into uniforms, and this change prepares for that. Additional uniforms are used (3 vec4s) only if common extensions are missing; transform feedback and bresenham lines. This change makes it more practical for driver uniforms to be turned into push constants. Additionally, these uniforms could potentially be loaded and cached at the beginning of the shader for more efficient memory access. On Pixel6, with this change, the traces show no difference in wall time. On most traces, CPU time shows up to ~7% improvement. Bug: angleproject:7366 Change-Id: I0f47f863955af06a19c69d1f1d7c45b97d95476e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3668151 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 98c2e169 2022-05-20T16:17:49 Vulkan: Reduce pre-rotation spec const to bool The specialization constant now only dictates whether x and y should be swapped. The complete 8 possible states of rotation and y-flip are achieved by using this swap in combination with a driver uniform for x and y flip. Swapping is still a specialization constant to avoid degrading performance of dFdx/dFdy which otherwise would need both to be evaluated instead of one. On platforms which don't support pre-rotation, the specialization constant will never change and driver uniforms entirely govern y-flip. On platforms that do support pre-rotation, only two variations of the pipeline are needed. Bug: angleproject:7366 Change-Id: I73f84e89fa9349d2098fa5b21573aee57d93a30c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3663151 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Lingfeng Yang <lfy@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
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>
Gregg Tavares 118a6484 2022-05-19T15:11:31 Metal: Upstream buffer cache fix from WebKit Patch is from: https://bugs.webkit.org/show_bug.cgi?id=239015 BufferMtl::getRestartIndices() would recalculate restart indices on each draw because RestartRangeCache::operator bool() would return m_isDirty instead of the intended !m_isDirty. Use std::optional to hold the RestartRangeCache instead of maintaining m_isDirty. This allows the type system to contribute to the correctness of the code. Dirty restart range cache is not useful and takes up memory. Bug: angleproject:7340 Change-Id: I6e3ce527700780b5fea59af405bfe06d3714e79f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3656450 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares dbeba900 2022-05-17T16:52:23 Reland "CGL, MTL: pbuffer for IOSurface fails for some formats" Fixed iOS compiler error https://chromium-review.googlesource.com/c/angle/angle/+/3568380 Bug: angleproject:7175 Change-Id: I1d15ecf0081891db31470abc305e6780c81ab574 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3648215 Commit-Queue: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Yuxin Hu 808192a7 2022-05-09T16:39:45 Code Cleanup In Context::initCaps(), we first read the compressedTextureFormats from the contextImpl::getNativeCaps(), then we are clearing the retrieved compressedTextureFormats array in Context::updateCaps() immediately. We shouldn't need to fill the same array twice. Removing the first array value assignments in all backend. Bug: angleproject:3408 Change-Id: Iea85d367d2c5792de4780995d8d03bcf14af484e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3635275 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
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>
Brian Osman 9200ba53 2022-04-26T12:05:07 Reland "Make SPIRV optional for Metal backend" Updated default conditions to match old behavior. This is a reland of commit 29287e1fc7ad3dff0619736a89e64b3598af8659 Original change's description: > Make SPIRV optional for Metal backend > > This allows clients (ie Skia) to build ANGLE without needing > all of the additional Vulkan dependencies. Developer builds > will continue to include both the direct and SPIRV paths, for > debugging purposes. > > Bug: angleproject:7155 > Change-Id: I1c38ee19e747df8b25fd2f8e8efa3b420a4d7766 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3605764 > Commit-Queue: Kenneth Russell <kbr@chromium.org> > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Auto-Submit: Brian Osman <brianosman@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:7155 Change-Id: I439160f2e1f05a3dbe22df82336246a73a0a7d0b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3615012 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Brian Osman 2c58e7a5 2022-04-27T09:50:01 Reduce console spam from Metal shader translation Skia is seeing this for every test, and it's polluting the logs. Realistically, a developer only needs this once per process. Bug: angleproject:7155 Change-Id: Ied4df3af4024ec542c6a9fd8c33d36f4e82b69cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3611062 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 437053a1 2022-04-28T09:05:43 Revert "Make SPIRV optional for Metal backend" This reverts commit 29287e1fc7ad3dff0619736a89e64b3598af8659. Reason for revert: Possible root cause of Mac failures http://crbug.com/1320588 Original change's description: > Make SPIRV optional for Metal backend > > This allows clients (ie Skia) to build ANGLE without needing > all of the additional Vulkan dependencies. Developer builds > will continue to include both the direct and SPIRV paths, for > debugging purposes. > > Bug: angleproject:7155 > Change-Id: I1c38ee19e747df8b25fd2f8e8efa3b420a4d7766 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3605764 > Commit-Queue: Kenneth Russell <kbr@chromium.org> > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Auto-Submit: Brian Osman <brianosman@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: chromium:1320588 Change-Id: Id160118146dad1b8f1af40c60ddefd717516cd1d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3614527 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Kenneth Russell <kbr@chromium.org> Auto-Submit: Cody Northrop <cnorthrop@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Brian Osman 29287e1f 2022-04-26T12:05:07 Make SPIRV optional for Metal backend This allows clients (ie Skia) to build ANGLE without needing all of the additional Vulkan dependencies. Developer builds will continue to include both the direct and SPIRV paths, for debugging purposes. Bug: angleproject:7155 Change-Id: I1c38ee19e747df8b25fd2f8e8efa3b420a4d7766 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3605764 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Auto-Submit: Brian Osman <brianosman@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gregg Tavares 1a144edf 2022-04-13T17:15:29 Metal:ReadPixels AMD Copy Texture to Buffer optimization On AMD GPUs it's faster to copy a texture to a buffer for read back than to read via a texture. For reading from a normal texture 24-27ms -> 6-9ms For reading from a IOSurface texture 17-20ms -> 7-10ms Bug: angleproject:7117 Change-Id: I7c7f276a3121e87f5c52a1a4287d13203a6b1b37 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3584423 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@chromium.org>
Alexey Knyazev 62ca6449 2022-04-13T09:36:40 Reland "Fix BlendStateExt::mMaxColorMask initialization" This is a reland of commit 50d008a7efcab80f34eb742148d05389b2ed247e Besides fixing the BlendStateExt color mask initialization bug, the following changes were made: * All fields were made private with accessor functions. * A new assertion was added that ensures 64-bit storage for factors and equations. This allowed dropping one redundant mask. * Two new helper functions were added. * BlendStateExt::mMaxDrawBuffers was renamed to mDrawBufferCount. * The BlendStateExt class is now aligned to 8 bytes with an assertion. * Expanded test coverage. Also fixed incorrect usage of BlendStateExt fields in: * StateManagerGL::syncBlendFromNativeContext * StateManagerGL::restoreBlendNativeContext Original change's description: > Fix BlendStateExt::mMaxColorMask initialization > > This variable should not have its unused bits set. > > To avoid confusion with other masks of the same class, > the variable was renamed to mAllColorMask. > > Bug: angleproject:7200 > Change-Id: I72542d49ff8da3dbb8d61c5034ce37c1e8fcc6e1 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3581990 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Bug: angleproject:7200 Change-Id: I87a5fe0f9dfbbf5e525b9120f772aa9adb39ce5f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3593234 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 400d9fe4 2022-04-23T01:08:19 Rename feature files to *_autogen.h To clarify further that they are not to be edited by hand. Bug: angleproject:6435 Change-Id: Iaf79706d2b688a43b3ebb65700cfbdd71a49a742 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3603842 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 2dd13ebb 2022-04-21T11:25:00 Track Surface color & depth/stencil init separately. This clears up some trace testing confusion due when robust resource init is enabled, and the app clears color but not depth on the default surface. Bug: angleproject:7221 Change-Id: Id97871aec32ad831b663aaa9116e04b582ab5a36 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3600375 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Ian Elliott 0690f5d3 2022-04-21T21:58:49 Revert "CGL, MTL: pbuffer for IOSurface fails for some formats" This reverts commit 5b84ad7973a3019b66848aabb2d2eef27c094545. Reason for revert: Breaks the build on the bots (see below) Example AutoRoll CL that has compilation pre-submit error: https://chromium-review.googlesource.com/c/chromium/src/+/3598558 Example bot results, showing compilation error: https://ci.chromium.org/ui/p/chromium/builders/try/ios-simulator/1143059/overview Original change's description: > CGL, MTL: pbuffer for IOSurface fails for some formats > > Some IOSurface SPI formats are compressed, and getting the > element size for those returns values that are not consistent > with the validation. Disable the validation > until a better detection of such formats are known. > > A workaround exists for EAGL. > Apply similar workaround for CGL and Metal. > > This hunk is in downtstream WebKit ANGLE and having it upstream would > help merging back and forth. > > Bug: angleproject:7175 > Change-Id: Ic97afd3b952fed236e7b7e1e8511a1dde9008647 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3568380 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Commit-Queue: Kenneth Russell <kbr@chromium.org> Bug: angleproject:7175 Change-Id: I0c18bdb800e39d6930455dbc86931681b6df20b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3600148 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com> Auto-Submit: Ian Elliott <ianelliott@google.com>
Gregg Tavares 3f800e5c 2022-04-18T18:36:03 Metal:Clear Backbuffer when Robust Resource Init enabled In trying to optimize readPixels (see: https://chromium-review.googlesource.com/c/angle/angle/+/3584423) the test RobustResourceInitTest.SurfaceInitialized was failing. Digging into it it turns out that backbuffer surfaces were not being cleared. WindowSurfaceMtl was losing initialization requests due to back-to-back calls to ensureCurrentDrawableObtained. Refactor surface preparation and track initialized state separately. Bug: angleproject:7117 Change-Id: Ic7eac9e77c4412c55340039a21be63e39b2abc0c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3590971 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Kimmo Kinnunen 5b84ad79 2022-04-05T14:55:58 CGL, MTL: pbuffer for IOSurface fails for some formats Some IOSurface SPI formats are compressed, and getting the element size for those returns values that are not consistent with the validation. Disable the validation until a better detection of such formats are known. A workaround exists for EAGL. Apply similar workaround for CGL and Metal. This hunk is in downtstream WebKit ANGLE and having it upstream would help merging back and forth. Bug: angleproject:7175 Change-Id: Ic97afd3b952fed236e7b7e1e8511a1dde9008647 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3568380 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Shahbaz Youssefi fcec6904 2022-04-13T14:18:06 Generate feature variable names from display names The json file now only contains the feature display name. The variable name is automaticaly derived. For consistence with Chromium and other Chromium-based projects, the display name is now always snake_case, and that's what's specified in the json files. This also makes camelCase variable name generation trivial (as opposed to the other way around). Feature overrides now accept both snake_case and camelCase names to ensure compatibility with existing scripts. This is done by removing _ and comparing override names with feature names in lower case. Bug: angleproject:6435 Change-Id: I0b6ed2bbf5c312bc4f4be7b3c7d55dbaca2a9886 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3584630 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill bddb944b 2022-04-14T05:04:09 Vulkan: Prep variable info map to remove hashing. The removes all the string-based query APIs from the program executable descriptor set init. The new APIs still use string-keyed maps but will be switched out with non-hashed maps in a future CL. Bug: angleproject:4524 Change-Id: I427efb3ebcf22d5fbdf6d20679bbdaa23cd2dc94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3573077 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill e77be663 2022-04-14T05:04:13 Use ProgramExecutable directly in GlslangWrapper. Using the ProgramExecutable instead of the state means we can deal with merged samplers and images immediately. This will make it easier to use linear maps when indexing program resources for descriptor sets. Bug: angleproject:3570 Bug: angleproject:4524 Change-Id: Icd8ee9fe61730b81fafa2bdc59a2788a0d92ad12 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3580882 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Alexey Knyazev 866210ad 2022-04-17T00:29:28 Metal: Fix bytesPerRow computation for compressed formats The value represents the row size in bytes, not pixels. Bug: angleproject:7209 Change-Id: Ib7fade31f13ffd3ae78c5df313120c8e0201936c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3588416 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Gregg Tavares 87187835 2022-04-07T13:51:10 Metal: For readPixels copy IOSurface to non-IOSurface texture For intel GPU/Drivers, it's faster to copy an IOSurface texture to a non-IOSurface texture and read from the copy than it is to read directly from the IOSurface texture. Bug: angleproject:7117 Change-Id: I786009444480f75be6feb05f09f87fb45a3186b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3573078 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@chromium.org>
Shahbaz Youssefi 8074061d 2022-04-09T01:03:53 Remove feature override platform methods Instead, the tests now use the enable() functions to override the feature at platform level. This fixes the forceFallbackFormat feature mistakenly not having been tested. Bug: angleproject:6435 Change-Id: I605e4133407282bd52232887b595af0d2c13575d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3577369 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Gregg Tavares 9237272f 2022-03-31T14:15:43 Metal:remove TextureMtl::mIsPow2 Bug: angleproject:7147 Change-Id: I60876d719989311de07ad97f1be5daecb83c3801 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3564276 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@chromium.org>
Kimmo Kinnunen e08476cf 2022-04-05T14:48:52 Metal: Avoid leaking MTLDevice lists in DisplayMtl Hold the lists via ObjCObj<>. Patch by David Kilzer <ddkilzer@apple.com> Bug: angleproject:6920 Change-Id: Ia25cd59b0dd2e81367d8bf5ca50a22ca02547940 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3568381 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Kimmo Kinnunen 1b2adb40 2022-04-05T15:14:55 Metal: Avoid leaking MTLFunctionConstantValues in ProgramMtl Hold with ObjCObj<>. Patch by David Kilzer <ddkilzer@apple.com> Bug: angleproject:6920 Change-Id: I635097100b1e004e9276490ff8574870e1c5f33f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3568379 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Gregg Tavares ac130106 2022-04-04T13:46:01 Metal: Remove Unused IOSurface code Bug: angleproject:7171 Change-Id: I6eaf9c1194a26c96f4566f5bcc386330df66b870 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3569588 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Kimmo Kinnunen ba04fcfd 2022-03-11T13:58:52 Support ANGLE_PREFERRED_DEVICE on CGL Add the possibility to test both integrated and discrete GPU with ANGLE tests. Previously it was using only discrete. The binaries need the NSSupportsAutomaticGraphicsSwitching bundle property. This is needed to test ANGLE_power_preference. Changes the behavior of test apps: Previously, ./angle_end2end_tests would use discrete GPU. After, ./angle_end2end_tests or ANGLE_PREFERRED_DEVICE=intel ./angle_end2end_tests will use integrated GPU. ANGLE_PREFERRED_DEVICE=amd ./angle_end2end_tests will use discrete GPU. Bug: angleproject:7093 Change-Id: Ia64f6024e3215e69c2a1bde3ba4f67c3ca595476 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3516114 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Kyle Piddington 1670c6dd 2022-02-17T14:15:08 Metal: Buffer data is not correctly updated When using a dynamic draw buffer, Metal creates more buffers to avoid in-flight synchronization issues. However, without correctly rebinding the buffers from the VAO, we get missing data. This patch adds a fix and a test to reproduce the issue. Upstream of https://bugs.webkit.org/show_bug.cgi?id=236427 and https://bugs.webkit.org/show_bug.cgi?id=236733 Bug: angleproject:7122 Change-Id: I879ff688af04a8215df6134400d0aab582b92842 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3472691 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Gregg Tavares e79ed0dc 2022-03-25T17:15:30 Metal: Fix for not submitting command buffers in order First I added a check that CommandBuffers are committed in order as the design requires that they are. This showed several tests asserting including the angle end2end test, OcclusionQueriesNoSurfaceTestES3.SwitchingContextsWithQuery/ES3_Metal and also several others. The check is cheap and helps catch bugs so it seems prudent to have it. Unfortunately, AFAICT, there is no trival fix. The issue is ContextMtl::flushCommandBuffer commits the outstanding commandbuffers but then, if there is/was a query in progress, more work needs to be done. That work calls ContextMtl::getBlitCommandEncoder which calls ContextMtl::ensureCommandBufferReady which calls ProvokingVertexHelper::ensureCommandBufferReady which ends up making a new command buffer. That command buffer should be committed before switching to a new context but the code that would commit it has already executed. It's not at all clear to me how to refactor the code to do this correctly. The simplest solution is to call ContextMlt::flushCommandBuffer twice which I know is gross but at least it fixes the bug and optimizing and/or refactoring can be done separately. Bug: angleproject:7131 Change-Id: Idb11efb35f6ad2fd890a5db15d3791c07586bf34 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3553939 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Shahbaz Youssefi 7a85d114 2022-03-25T15:01:17 Use [[nodiscard]] on RAII classes Scoped* classes provide an RAII way of adding cleanup/restore state/etc in a robust way. Unfortunatley, it's very easy to mistakenly leave the variable name, leading to the destructor being called immediately instead of at the end of the scope: { ScopedX(parameters); // instead of ScopedX x(parameters); // Code here is run after destructor } The [[nodiscard]] attribute, if specified on the ScopedX class would lead to a warning (turned to error with -Werror). This change does that for classes named *Scoped* in ANGLE. Bug: chromium:1103817 Change-Id: I65c9922c9b4eba1f9c033e093fe8fe534648ab62 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3552092 Reviewed-by: Lingfeng Yang <lfy@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Alexey Knyazev 18c36f8a 2022-03-19T19:22:08 Metal: Fix transform feedback with base instance Added TransformFeedbackTest.BaseInstance test case. Bug: angleproject:6963 Change-Id: Ie7b2a5dd2be456172505f07ea60ca291075bf07e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3536660 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev e56f185b 2022-03-19T10:41:50 Metal: clarify instance count assertions Bug: angleproject:6963 Change-Id: I5a686d560efb7912b3426560c8be2806a943158c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3536659 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 7c616871 2022-02-01T15:12:53 Metal: Implement ANGLE_base_vertex_base_instance Includes command buffer and MSL translator updates. The DrawElementsInstancedBaseVertexBaseInstance tests from DrawBaseVertexVariantsTest suite fail for dynamic draw and stream draw buffer usages. Bug: angleproject:6963 Change-Id: I6caa144860356d5fc85948b72458bec282ea3a3b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3429819 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Kimmo Kinnunen b465a736 2021-12-21T12:52:40 Metal: Remove redundant CommandQueue::mMetalCmdBuffersTmp Instead of a member variable, instantiate the temporary at the use site. Bug: angleproject:6842 Change-Id: I64848bc937ce2945e6ac55adea8a6dffcaf9b00d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3347649 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: John Cunningham <johncunningham@apple.com> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Yuxin Hu 1dc9f126 2022-03-16T19:29:26 Revert "Flush the texture staged updates when destroying context share group" This reverts commit 5c29d795d1625f71ac6999f157b6f3bba79d5256. Reason for revert: this is causing some test failures on chromium and blocking the angle-chromium auto roller job: https://chromium-review.googlesource.com/c/chromium/src/+/3529771/ Original change's description: > Flush the texture staged updates when destroying context share group > > If we are using the extension EGL_ANGLE_display_texture_share_group, > flush the texture staged updates upon destroying the context. With the > extension enabled, the texture could still be alive when both context > and its' EGL::ShareGroup are destroyed. If we have staged updates not > yet flushed, the updates will keep the ShareGroupVk bufferpool occupied, > causing an error upon ShareGroupVk::onDestroy(). > > Bug: chromium:1299211 > Change-Id: I260de93c3a3099e023e31acbe017803e824459ad > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3495879 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Yuxin Hu <yuxinhu@google.com> Bug: chromium:1299211 Change-Id: I214161d6a8aec834e1efc5fc9d2479e62e3bfae0 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3530505 Auto-Submit: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Yuxin Hu 5c29d795 2022-02-28T23:56:46 Flush the texture staged updates when destroying context share group If we are using the extension EGL_ANGLE_display_texture_share_group, flush the texture staged updates upon destroying the context. With the extension enabled, the texture could still be alive when both context and its' EGL::ShareGroup are destroyed. If we have staged updates not yet flushed, the updates will keep the ShareGroupVk bufferpool occupied, causing an error upon ShareGroupVk::onDestroy(). Bug: chromium:1299211 Change-Id: I260de93c3a3099e023e31acbe017803e824459ad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3495879 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Gregg Tavares 74f32702 2022-03-03T13:13:34 Metal: Fix for mulitsampled buffers losing their contents Fixes tst included as well as WebGL CTS https://www.khronos.org/registry/webgl/sdk/tests/conformance2/renderbuffers/multisample-draws-between-blits.html Both fail on M1 without this fix. Also fixes WebKit bug https://bugs.webkit.org/show_bug.cgi?id=237113 Bug: angleproject:7073 Change-Id: Id7baa2575c817561f8a0a99181c986b758376a8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3506089 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 2e7cfa9b 2022-02-22T13:10:12 Metal: Fix WebGL CTS fbomultisample tests failing in Metal These tests were failing in Metal: deqp/functional/gles3/fbomultisample.2_samples.html deqp/functional/gles3/fbomultisample.4_samples.html deqp/functional/gles3/fbomultisample.8_samples.html This CL only fixed the tests failing on AMD. Intel still fails. See: https://anglebug.com/7079 Bug: angleproject:7049 Change-Id: I745672bba2e9b8b1d34c7a81e07410889eddd35f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3482157 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Kyle Piddington af45d166 2022-02-23T14:05:47 Metal: PVRTC formats fail conformance tests on simulator Remove support for PVRTC in simulator, as conformance tests fail Bug: angleproject:6874 Change-Id: I2c3f9e26523098aaa6a988db5cb3f4bf748a0cdc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3485640 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Yuxin Hu 1e1505b5 2022-02-24T20:59:57 Upgrade Python scripts from Python2 to Python3 Bug: angleproject:5707 Change-Id: I2c00ef7e7cb529eab2be61378c9a5511a69acd1a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3486298 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Gregg Tavares ed39d49a 2022-02-14T11:32:12 Metal: Fix Hang in WebGL CTS Occlusionquery_strict test If a query was just in progress and then we switch contexts a command buffer, which has already been enqueued, is not committed. Later, other command buffers are enqueued and committed and Metal hangs, waiting on the uncommitted but previously enqueued command buffer. The solution was to not enqueue a command buffer early but instead, enqueue just before committing. Bug: angleproject:6752 Change-Id: I62c07ca3d1ed98cc5b27c8c4af405fdedff922b8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3461419 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Sean Risser 3adace15 2022-01-10T22:53:19 Don't expose detailed driver version info to webGL WebGL's GL_RENDERER string now only includes basic version information on all backends. This is controlled through a bool passed through getBackendVersionString. Bug: angleproject:6777 Change-Id: Ie4e3d91d22c96f175a8139fac1c66e985ed9e1b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3380263 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Sean Risser <srisser@google.com>
Shahbaz Youssefi 1e29ba62 2022-02-11T15:08:05 Vulkan: Enable overlay by default with debug layers Bug: angleproject:6976 Change-Id: I8fdd7546358fc1079525862cba0a4a6ff8357f78 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3457346 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington 91f92540 2022-01-14T18:34:44 Metal: Fix multisample resolves. 1) Only use MTLLoadActionDontCare if store action was MTLStoreActionDontCare, ignoring MTLStoreActionMultisampleResolve. 2) For color, depth and stencil attachments, if they have implicit multisample textures, use MTLStoreActionStoreAndMultisampleResolve rather than MTLStoreActionStore. This addresses bugs when resolving a multisampled framebuffer and copying it to a texture, and fixes these two Three.js demos: https://threejs.org/examples/webgl_framebuffer_texture https://threejs.org/examples/webgl_decals Added CopyTextureTestES3.DrawThenCopyThenBlend modeled after new WebGL 2.0 conformance test in: https://github.com/KhronosGroup/WebGL/pull/3379 Confirmed to catch the bug. On Intel Macs, the Metal debug layers and load/store action validation must be enabled: MTL_DEBUG_LAYER=1 \ MTL_DEBUG_LAYER_VALIDATE_LOAD_ACTIONS=1 \ MTL_DEBUG_LAYER_VALIDATE_STORE_ACTIONS=1 \ MTL_DEBUG_LAYER_VALIDATE_UNRETAINED_RESOURCES=4 \ angle_end2end_tests ... Bug: angleproject:6972 Change-Id: I7bcb7c19e434e22e24b800fdce4c480d10b1fc40 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3450033 Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Alexey Knyazev 6d30de10 2022-02-05T02:25:36 Metal: Fix ANGLEUniformBlock alignment To pass Metal validation, the length of ANGLEUniformBlock structure must be aligned to 16 bytes. Bug: angleproject:5505 Change-Id: I1e2becaac48739966afb44e087fc4a70f7b21d02 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3440067 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Kenneth Russell 812d5fff 2022-01-31T17:32:47 Metal: End the current render pass at glInvalidateFramebuffer. Prior to this, glInvalidateFramebuffer calls were discarding the effects of draw calls made afterward, in the same render pass. Add StateChangeTestWebGL2.InvalidateThenDrawFBO reproducing the basic problem reported, and document the variations attempted. Minimal code was changed to fix this issue because other changes hypothesized as necessary weren't testable. Drive-by cleanup of FragDepthTest, after which StateChangeTestWebGL2 was patterned. Bug: angleproject:6923 Change-Id: If79805dbf62fae76b7b9147940b5d9d301142baa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3426828 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Alexey Knyazev 49488710 2022-02-02T14:57:04 Metal: Remove emulatedInstanceID The uniform variable is no longer referenced. Bug: angleproject:5505 Change-Id: I8de518592e045707d024eaa1c07999caf4b5da66 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3431079 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Kyle Piddington c4a9d416 2022-01-05T15:28:11 Metal: Refactor to build without SPIR-V Refactor ShaderInterfaceInfoMap and constant names to thier own files, allowing Webkit to build without needing to compile SPIRV code via mtl_glslang_utils.cpp. Bug: angleproject:6782 Change-Id: I7a9c7e387145c95807f780e24bd2764e0efb5709 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3364970 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
John Cunningham 45237a04 2022-01-11T00:14:01 Metal: Fix undefined behavior of depth write Writing to an unbound depth attachment is undefined behavior in Metal. Fix this by emitting a function constant to guard depth buffer use in fragment shaders. Bug: angleproject:6865 Change-Id: Id7c10d0aeb349aacfe09c397bc292a71199ab50a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3380304 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Alexey Knyazev a20cd8b7 2022-01-22T01:40:34 Fix initialization for ETC2 punchthrough alpha formats * Zero-filled ETC2_A1 data must be treated as opaque black * Removed init functions when emulation is not needed * Fixed initialization for emulated ETC2_R8G8B8A1_SRGB_BLOCK Bug: angleproject:6936 Bug: angleproject:6941 Change-Id: Ie5555bbaa6b1a2bcfd9c22cb9c17d1a96e72aa70 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3406761 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev ca3b28b4 2022-01-21T14:59:47 Metal: Fix compressed texture initialization and add DXT1 test There was a divergence between WebKit and upstream ANGLE in InitializeTextureContents' handling of compressed textures. Align upstream ANGLE with WebKit, fix a problem with emulated compressed texture formats like ETC2, and add a new test: DXT1CompressedTextureTestWebGL2.InitializeTextureContents Bug: chromium:1289428 Change-Id: Ieac6b99a4b19a34d0d87b7577882760ea395c605 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3406746 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Alexey Knyazev 659725aa 2022-01-20T15:24:40 Metal: Cleanup texture caps init The removed line is redundant as the ASTC texture support is enabled during the setTextureExtensionSupport call. Bug: angleproject:6874 Change-Id: Ib9016e4d40acf1f466fa10920384b7419e6fed49 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3404100 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
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>
Alexey Knyazev 55d12770 2022-01-19T16:00:47 Metal: Cleanup autogenerated format table Skip generating code that sets default values. Bug: angleproject:6874 Change-Id: Id12e39eedbe4665279710125e02b105318d40b82 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3399836 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Kyle Piddington 00a2a2f3 2022-01-06T17:52:23 Merge metal format table updates from Webkit Some texture formats are not supported in the Metal SDK for certain platforms. Refactor the mtl_format_table map to allow Webkit to continue to build all platforms. This change removes a large block of changes between Webkit and OSS ANGLE, due to resolving the generated file differences. Bug: angleproject:6874 Change-Id: Ib53aea4fb95e230d53ad2ebbd74bf97e847005c9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3371882 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Alexey Knyazev f4b0a95f 2021-12-16T02:38:26 Metal: Implement EXT_shader_texture_lod Added CubeMapTextureTest.SampleCoordinateTransformGrad_ES3 Bug: angleproject:6815 Bug: angleproject:6824 Bug: angleproject:3814 Bug: angleproject:6891 Change-Id: I9007bf8ba91309fb9b597e2d1bd33281ff59644a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3343488 Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Jonah Ryan-Davis 2f4f5f8a 2021-12-14T17:30:42 Add EGL_ANGLE_platform_angle_device_id for the Metal backend. This extension takes in a 64-bit device ID in two parts as parameters to eglGetPlatformDisplay and uses it to initialize a display backed by a specific device. The deviceID should match the MTLDevice's registryId. Bug: angleproject:6143 Change-Id: I02188b8266f8d0ac657b04325d191ab89bbef751 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3337985 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Tim Van Patten b0e15ee4 2021-12-28T20:37:33 Decide GL_KHR_parallel_shader_compile in backends GL_KHR_parallel_shader_compile was previously being enabled unconditionally in the front end. However, some backends (Vulkan) perform worse with parallel shader compilation. This CL moves the decision of enabling GL_KHR_parallel_shader_compile to the backends. To support single-threaded shader compilation without affecting the generic worker thread pool, Context::mSingleThreadPool is added to own the single-threaded WorkerThreadPool and can be returned by the new function Context::getShaderCompileThreadPool(). Otherwise, if the extension is enabled, the (renamed) Context::mMultiThreadPool is returned. Bug: angleproject:6748 Change-Id: Ic8d3a183f397608f3002a05480deb976dfe44792 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3360337 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Gregg Tavares 6a255833 2022-01-07T16:13:58 Metal: Fix transform feedback issue The issue is if you issue 2 draw commands back to back, Metal partially ignores the 2nd. Bug: angleproject:6884 Change-Id: I702335ca06828bed1f553f1f5563ddc99f00bc99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3373736 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@chromium.org>
Kyle Piddington abf17f01 2021-12-10T17:10:53 Metal: Support depth filtering queries for D32, D24S8 Port changes from https://bugs.webkit.org/show_bug.cgi?id=232071 Bug: angleproject:6779 Change-Id: Id2d7a0c215e4db072b8830aedd90b878f3817967 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3331666 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>
Kyle Piddington cfc4db34 2021-11-04T16:54:15 Metal: Provoking vertex support for Metal DrawArrays Add in provoking vertex rewrite support for drawArrays command, enabling 6 dEQP tests. GLES3/functional_rasterization_flatshading_line_loop GLES3/functional_rasterization_flatshading_line_strip GLES3/functional_rasterization_flatshading_lines GLES3/functional_rasterization_flatshading_triangle_fan GLES3/functional_rasterization_flatshading_triangle_strip GLES3/functional_rasterization_flatshading_triangles This patch adds a new shader to the Provoking Vertex helper that generates draw commands for all simple data types. Fix bug in provoking vertex helper that caused reused index buffers to suffer from allocation issues. Also fix Provoking vertex for triangle fan generation Bug: angleproject:5325 Change-Id: I7a1211dfcd99329868269ea0666eef1915d487b5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3261635 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@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>
Kimmo Kinnunen aabfe874 2021-12-17T15:43:22 Metal: Use the context device to Texture::resize Makes the resized texture to be attributed to the owner. Bug: angleproject:6832 Change-Id: Ia1eae1bb6c9e83e23fae51121f88d9ce37dc948b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3347642 Reviewed-by: John Cunningham <johncunningham@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Kimmo Kinnunen 624e3c3d 2021-12-17T15:30:54 Fix dangerous use of AutoObjCPtr after ownership identity change Metal new* methods create objects with +1 retain count. AutoObjCPtr is intended to adopt this reference. Otherwise, like before this patch, the AutoObjCPtr holds object with +2 count. Before this patch, some but not all call sites donated the extra retain count to autoreleasepool "out of band", and as such the code did not leak that much. Bug: angleproject:6831 Change-Id: I72bcbc712f2cadbcbc6148c6aedfa7e151314518 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3347641 Reviewed-by: John Cunningham <johncunningham@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Kimmo Kinnunen ede0b8b7 2021-12-17T14:35:47 Avoid ANGLE_MTL_AUTORELEASE inside ASSERT, it leaks on Release Avoid ANGLE_MTL_AUTORELEASE inside ASSERT, it leaks on Release. The create functions already return retained, instead of autoreleasepool retained, so owning the reference via adopting AutoObjCObj is as efficient as autoreleasepool on possible future ARC. Thus use AutoObjCObj, that is safer than autoreleasepool with C++ and works towards being able to perhaps remove use of autoreleasepool. Bug: angleproject:6830 Change-Id: I80f523d9a6846097a593fe94b5ea9715fa88ea15 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3347640 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: John Cunningham <johncunningham@apple.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Kenneth Russell 001221f0 2021-12-16T21:41:29 Metal: upstream fix from WebKit for texture leak. Upstream fix by Kimmo Kinnunen for a leak of MTLTexture instances for render targets from: REGRESSION (r287068): [macOS arm64] TestWebKitAPI.GraphicsContextGLCocoaTest. UnrecycledDisplayBuffersNoLeaks is failing https://bugs.webkit.org/show_bug.cgi?id=234356 The leak would happen through a temporary render pass descriptor that would ref the render target texture. The descriptor was created without an autoreleasepool in call stack. Also fixes the error string leaks. Bug: angleproject:6827 Bug: angleproject:6829 Change-Id: I07ec961886a9fb8caad6df334293358a175eaf15 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3346682 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Gregg Tavares b26bb13a 2021-12-15T15:46:00 Metal: Remove references to xfbActiveUnpaused uniform Metal chooses a shader with or without support for transformfeedback so there's no point in checking in the shader if it's enabled or not. Bug: angleproject:6823 Change-Id: Iacd26b1e55b311a7cc7987dcd8b2f8c0c8727d62 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3343179 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Alexey Knyazev c4d434b9 2021-12-15T22:57:13 Metal: Enable OES_fbo_render_mipmap Bug: angleproject:6813 Change-Id: I643c114d7b37ca0532d2dda1964090a15e470842 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3342568 Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
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>
Gregg Tavares bda49325 2021-12-10T16:11:15 Add guards for 64 bit types on 32bit systems Bug: angleproject:6785 Change-Id: Iff043a22d398f5a7a1a46ae3cc4d2de5a6e3797e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3331639 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares ee1d3cf7 2021-12-10T12:29:16 Metal: Integrate Metal Binary Shader generation Bug: angleproject:6801 Change-Id: I2eb7072ed342f2b4cb5d9ee50ca9db75c5c7df69 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3331206 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@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>
Kyle Piddington 76d42082 2021-12-14T09:30:24 Metal: ETC and ASTC are missing on M1 Platform guards are incorrect in mtl_utils.mm. We need to account for macOS post 10.15, which now supports the apple GPU family query. Bug: angleproject:6809 Change-Id: Iae219a11ffe0ef0715681009aa24cbbc6fd2c61e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3338624 Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: 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 afca80a8 2021-12-09T17:48:49 Metal:Add debug info for shaders This should fix the WEBGL_debug_shader_info CTS test Bug: angleproject:6788 Change-Id: I89e18f94ea3199149c252355372648b5e328e1ed Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3329204 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Kyle Piddington 194687e7 2021-12-06T13:40:24 Metal: Fix M1 and iOS synchronization for readPixels ReadPixels does not implicitly flush context before reading on iOS and macOS hardware due to shared memory. look for any pending GPU Work, and flush the command buffer if needed. Bug: angleproject:6803 Change-Id: I5688b031ecffcd7427263041d4e33ae256f68af6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3318592 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
Gregg Tavares 2d6caae4 2021-12-10T17:25:58 Metal: Add maximum render target size validation Bug: angleproject:6790 Change-Id: I4a7e7285e040cc68e4fc16bb653f6d1512f541c9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3331671 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares d97b1c4a 2021-12-10T16:27:08 Metal: Refactor restartRange cache Bug: angleproject:6784 Change-Id: I8a2e1df2ac621415d75708c0bba16f8ca17b0ce6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3331675 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 1642b4a3 2021-12-10T16:01:10 Metal: Fix Instanced Draw feature support on Simulator Bug: angleproject:6786 Change-Id: I4c567bf2ec61df581ae0e8eeb1c36c7d37e15d04 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3331637 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 2e669566 2021-12-09T18:21:02 Metal: Refactors from Webkit Mostly renaming, typos, cleanup bug: angleproject:6787 Change-Id: Ic71c296d7849244cae2ca29b264a10cb96bca612 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3329261 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 5068c040 2021-12-09T17:55:01 Metal: Merge changes to mtlPixelFormatTable Bug: angleproject:6789 Change-Id: I9893093fdff1138fc8ae35ac4363201fa1e0b825 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3329206 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gregg Tavares 04110e4e 2021-12-01T14:06:03 Metal: Fix Intel backend fails with tall texture Copied test from the WebGL conformance suite. A 1x<MAX_TEXTURE_SIZE> texture fails on Intel in the Metal backend. This was fixed in WebKit so just applying that fix. Bug: angleproject:6754 Change-Id: Id1cafb3b560f14630684d55b0e61cea4c7f33a6d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3311941 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Gregg Tavares <gman@chromium.org>
Tim Van Patten ef65edf2 2021-11-22T14:23:35 Add extension: ANGLE_rgbx_internal_format Add the extension ANGLE_rgbx_internal_format, which exposes the ANGLE internal format GL_RGBX8_ANGLE. The format GL_RGBX8_ANGLE enables emulating RGB8 formats with RGBA8 within ANGLE. This also renames the format GL_RGBX8_ANGLEX to GL_RGBX8_ANGLE, since it's being exposed. Bug: angleproject:6690 Test: Texture2DTestES3.TextureRGBXImplicitAlpha1 Change-Id: I5548a3578a14e2f2a4006bbf59983b01f694b7f3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3296625 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Gregg Tavares a0924015 2021-11-22T19:44:05 Metal:Fix GLSLTest_ES3.GLVertexIDIntegerTextureDrawElements Metal The test was failing if the "first" argument to glDrawElements was odd. When odd the offset was not a multiple of 2 bytes and the code was going down a different path than when the offset was event. The fix for that just removes a check for alignment to 4 bytes. Checking with UNSIGNED_BYTE indices though and it still failed. That was because it was encoding the index conversion path on one command buffer and the provoking index prep on another and so they were happening out of order. Putting both on the same command buffer fixes that. Bug: angleproject:6688 Change-Id: I89b68ba965d073e0fa70b6d5b444dc743b5e34a7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3296631 Commit-Queue: Gregg Tavares <gman@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 17bf6e98 2021-11-11T20:53:31 Implement GL_EXT_multi_draw_indirect * Added the validation functions for multiDrawArraysIndirect() and multiDrawElementsIndirect() according to the specs. * Added generic implementation for the two functions that can be called by back-ends. * Added unit tests for the multiDrawIndirect functions. * Added flags for back-ends so they can enable the extension. * Minor cleanup in MultiDrawTest.cpp Bug: angleproject:6439 Change-Id: I4e5f1cab05c6de330aef82d115492dcc9d2fad44 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3276043 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 6fe13477 2021-11-11T00:47:14 Vulkan: Add external's pNext to ANGLE_external_objects_flags ANGLE was chaining VkImageFormatListCreateInfoKHR to VkImageCreateInfo::pNext to support sRGB extensions. For external images, it was unknown whether that was valid because there was no way to know if external used an identical chain of pNexts. This was causing a discrepancy between images created by Chrome and those created by ANGLE as part of an import. This change updates ANGLE_external_objects_flags to take in the pNext chain external has used to create the image so ANGLE could create the image identically. Bug: chromium:1266094 Change-Id: I479b9e7ff39d437425dc91c79834880749766f99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3274177 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Peng Huang <penghuang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington ec5d3795 2021-11-09T13:23:43 Metal: Fix InvalidateCopyThenBlend Render pass descriptor was not being changed due to blend state not being checked when looking for equality. Bug: angleproject:6669 Change-Id: Ic85dbec29ddb53a8c7e2e708f1ac0c99512e7248 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270596 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jonah Ryan-Davis f422f21a 2021-11-09T18:42:15 Reland "Metal: Reintroduce GPU power preference selection code." This reverts commit 67a8cf07a740c5ce3aafd2ad7fddd370451b3525. Reason for revert: Landed Chromium-side dependency: https://chromium-review.googlesource.com/c/chromium/src/+/3271170 Original change's description: > Revert "Metal: Reintroduce GPU power preference selection code." > > This reverts commit 017161701b7dbf70a13f3c180a39e1fa45c27d9f. > > Reason for revert: Blocking roller, please re-land with the fix. > > Original change's description: > > Metal: Reintroduce GPU power preference selection code. > > > > This CL re-introduces the GPU power preference code to > > the metal backend. It also reworks EGLDisplay caching > > in the frontend to cache based on the native display > > as well as the power preference attribute. > > A new extension, EGL_ANGLE_display_power_preference is > > added based on EGL_ANGLE_power_preference. This extension > > is a client extension that allows selection of GPU on > > display creation, similar to how GPUs are selected on > > context creation in EGL_ANGLE_power_preference. > > This CL adds EGLDisplayPowerPreferenceTest and enables it on > > the metal backend. > > > > Bug: angleproject:6143 > > Change-Id: I0a081dcd2e3f18ab365fdd3498ddcb6e2ba35212 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3231986 > > Reviewed-by: Kenneth Russell <kbr@chromium.org> > > Reviewed-by: Jamie Madill <jmadill@chromium.org> > > Reviewed-by: Gregg Tavares <gman@chromium.org> > > Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> > > TBR=kbr@chromium.org,gman@chromium.org,jonahr@google.com,jmadill@chromium.org,angle-scoped@luci-project-accounts.iam.gserviceaccount.com > > Change-Id: I4f775bf7139253a87b033a30e0da2100b3c1bb02 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: angleproject:6143 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270749 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Jamie Madill <jmadill@chromium.org> # Not skipping CQ checks because this is a reland. Bug: angleproject:6143 Change-Id: Id9b0a5cbb76e4dea9e2f2da2b1c47a0587dfdaf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270970 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Jamie Madill 67a8cf07 2021-11-09T15:10:50 Revert "Metal: Reintroduce GPU power preference selection code." This reverts commit 017161701b7dbf70a13f3c180a39e1fa45c27d9f. Reason for revert: Blocking roller, please re-land with the fix. Original change's description: > Metal: Reintroduce GPU power preference selection code. > > This CL re-introduces the GPU power preference code to > the metal backend. It also reworks EGLDisplay caching > in the frontend to cache based on the native display > as well as the power preference attribute. > A new extension, EGL_ANGLE_display_power_preference is > added based on EGL_ANGLE_power_preference. This extension > is a client extension that allows selection of GPU on > display creation, similar to how GPUs are selected on > context creation in EGL_ANGLE_power_preference. > This CL adds EGLDisplayPowerPreferenceTest and enables it on > the metal backend. > > Bug: angleproject:6143 > Change-Id: I0a081dcd2e3f18ab365fdd3498ddcb6e2ba35212 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3231986 > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Gregg Tavares <gman@chromium.org> > Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> TBR=kbr@chromium.org,gman@chromium.org,jonahr@google.com,jmadill@chromium.org,angle-scoped@luci-project-accounts.iam.gserviceaccount.com Change-Id: I4f775bf7139253a87b033a30e0da2100b3c1bb02 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:6143 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270749 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jonah Ryan-Davis 01716170 2021-10-14T13:24:41 Metal: Reintroduce GPU power preference selection code. This CL re-introduces the GPU power preference code to the metal backend. It also reworks EGLDisplay caching in the frontend to cache based on the native display as well as the power preference attribute. A new extension, EGL_ANGLE_display_power_preference is added based on EGL_ANGLE_power_preference. This extension is a client extension that allows selection of GPU on display creation, similar to how GPUs are selected on context creation in EGL_ANGLE_power_preference. This CL adds EGLDisplayPowerPreferenceTest and enables it on the metal backend. Bug: angleproject:6143 Change-Id: I0a081dcd2e3f18ab365fdd3498ddcb6e2ba35212 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3231986 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Kyle Piddington 77eb8a49 2021-10-29T10:36:06 Metal: Reduce memory usage of attribute re-writing Rework vertex buffer caching to allow us to reuse parts of converted buffers. Reusing conversions dramatically drops the memory usage when drawing index ranges by offset with unaligned attributes. Bug: angleproject:6638 Change-Id: I79797da202629b1632e1397ce1227ee3d7a1c9d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251467 Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Gregg Tavares 604610b4 2021-11-01T12:03:31 Metal: Use Depth32F for DEPTH_COMPONENT16 depth16unorm is broken on Metal. This is a workaround. Bug: angleproject:6597 Change-Id: I1748f9fab587b22980d13e8a141fa880eb6f9db0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3255666 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Gregg Tavares <gman@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 50fc2909 2021-10-27T21:37:02 Merge Webkit up to Oct 27 2021 Merge the following commits from Webkit. This change merges webkit from the following git commits Previous: commit 703b234524e75109ca3e94febbf63098314022f5 Author: Alex Christensen <achristensen@webkit.org> Date: Tue Sep 28 16:22:30 2021 +0000 Mostly fix Mac CMake build https://bugs.webkit.org/show_bug.cgi?id=230868 Current: commit 43d2e637f84b1e6b75c139ac64c26ca108b4f12f Author: Kimmo Kinnunen <kkinnunen@apple.com> Date: Wed Oct 27 17:43:38 2021 +0000 REGRESSION (Safari 15): Poor WebGL performance on https://downloads.scirra.com/labs/particles Commits: commit 8238f462c96e515dabd3db0e26c143b18f47340c Author: Kyle Piddington <kpiddington@apple.com> Date: Wed Oct 6 21:45:18 2021 +0000 Shadertoy "truchet district" fails to compile with error: Internal error compiling shader with Metal backend" commit 2fcb9af290e4b6c804f11ad4359555507c1492f9 Author: Kyle Piddington <kpiddington@apple.com> Date: Thu Oct 14 21:14:26 2021 +0000 https://tankionline.com/play/ html5 engine not working: crashes. (Metal shader not working) https://bugs.webkit.org/show_bug.cgi?id=231490 commit e11955a258380a875115ded16ab8963142c4023b Author: Kyle Piddington <kpiddington@apple.com> Date: Fri Oct 15 23:57:12 2021 +0000 REGRESSION (r283667): webgl/2.0.0/deqp/functional/gles3/lifetime.html fails https://bugs.webkit.org/show_bug.cgi?id=231682 commit 43d2e637f84b1e6b75c139ac64c26ca108b4f12f Author: Kimmo Kinnunen <kkinnunen@apple.com> Date: Wed Oct 27 17:43:38 2021 +0000 REGRESSION (Safari 15): Poor WebGL performance on https://downloads.scirra.com/labs/particles https://bugs.webkit.org/show_bug.cgi?id=230749 Bug: angleproject:6630 Change-Id: Icca411dc429538f839f05834f1851fbc54ef8a1d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3248573 Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Gregg Tavares 20ddb802 2021-10-28T11:01:12 Fix Blitting in Metal backend. The Metal backend was clipping in integer space. If the src and dst are not the same size, say src is 3 wide and dst is 4 wide, and src starts at -1, then src will be clipped by one making the src 2 wide. It got 1/3 smaller so the dst get 1/3 smaller making it 2.666 pixels wide. The dst then needs to be expanded to pixels so 3 wide. But, that means the src also needs to be expanded 0.3333 * 3(originalSrcWidth) / 4(originalDstWidth) so its new left edge is -0.245 which is not an integer. Bug: angleproject:6598 Change-Id: I2faa966b18b457f474a3e7f6844ef64bfa66dbe8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251683 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@chromium.org>