src/libANGLE/renderer/metal/TextureMtl.mm

Branch


Log

Author Commit Date CI Message
Tom Sepez 25390156 2025-08-21T00:13:19 Suppress unsafe buffers on a file-by-file basis in src/ [1 of N] In this CL, we suppress many files but stop short of actually enabling the warning by not removing the line from the unsafe_buffers_paths.txt file. That will happen in a follow-on CL, along with resolving any stragglers missed here. This is mostly a manual change so as to familiarize myself with the kinds of issues faced by the Angle codebase when applying buffer safety warnings. -- Re-generate affected hashes. -- Clang-format applied to all changed files. -- Add a few missing .reserve() calls to vectors as noticed. -- Fix some mismatches between file names and header comments. -- Be more consistent with header comment format (blank lines and trailing //-only lines when a filename comment adjoins license boilerplate). Bug: b/436880895 Change-Id: I3bde5cc2059acbe8345057289214f1a26f1c34aa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6869022 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang 86a8d11c 2025-08-11T16:45:39 Metal: Fix potential incorrect format used for texSubImage TextureMtl caches the most recent format used for a texture redefinition in mFormat. During subImage calls, this format may not be the same as the image being uploaded to. Pass ImageDefinitionMtl to these functions which reference mFormat, it contains the format of the image being updated. MacOS OpenGL is skipped because the driver generates errors in glCompressedTexImage2D. Bug: chromium:435683799 Change-Id: Idec6f71870c2d376cad3a5e3628b957009bdced9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6838878 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 27a1b2c9 2025-03-13T09:10:54 Metal: Fix crash with 3d tex, alpha, depth Fix a crash when generating mipmaps for a 3d texture that has mipmaps with w,h == 1, i.e. depth > max(2*w, 2*h). Bug: angleproject:419755713 Change-Id: I7bf7f1f71c03b2bf6f8a30df30dc77ad06d433fe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6580167 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Alexey Knyazev 4b9525b2 2025-04-04T00:00:00 Remove all getClientMajorVersion helpers Client version checks should use proper struct compare operations. Bug: angleproject:408843436 Change-Id: I92cd91d1e7e6daa761f79060835aa534c5671264 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6467460 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang 4d478713 2025-04-03T08:10:40 Revert "Metal: Make StateCache descriptors hash consistent" This reverts commit 4334125be506e0c2c5dde4cfc29b31a7ff2bdec6. Reason for revert: Pipeline creation failures. Bug: chromium:407310859 Original change's description: > Metal: Make StateCache descriptors hash consistent > > Various descriptors would compare equality and do hashing based on the > underlying storage. The storage contains alignment padding and > bitfields. The contents of these are not defined, even when the > constructors tried to memset and memcpy. > > The various hash and compare functions also seemed to be missing some > elements, like rasterSampleCount. > > Missing == on fields and hashing unused memory may lead to inconsistency > where a==b is true but hash(a) != hash(b). > > Fix by: > Remove the memset/memcpy and write out the operator== and > hash() consistently. > > Initialize the members to their default values. > > Use uint32_t : 1 instead of bool if the struct tries to optimize for > size, since mixing types stops the packing. > > Use uint32_t to get the alignment to uint32_t, which is mostly what > is expected. > > Use uint32 someVar : N where N is payload bits + padding bits for > the last member. This way the assignment clears the padding bits. > The goal os to get the operator== to compare the padding bits, which > lets the compiler elide the memberwise compares and use word-wise > compares where it makes sense. > > This is an attempt to fix rare crashes related to map inserts > and lookups. std::unordered_map will crash if operator== is not > consistent with hash. > > Bug: angleproject:403372465 > Change-Id: I0a3a2ff327ac9f65e7d41bc9585cda54ce93ab86 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6355828 > Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> > Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> > Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> > Reviewed-by: Geoff Lang <geofflang@chromium.org> Bug: angleproject:403372465 Change-Id: Id111c0728b603776fd8085fd395819bb5aa14722 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6428466 Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Le Hoang Quyen 0f9feb49 2025-03-15T23:51:04 Metal: Use render passes for B2T PBO copies. This would make it possible to avoid setting ShaderWrite usage to all textures in future. Bug: chromium:392521084 Change-Id: I25145f3578589c71ee469df08162d3a3f17c8cbe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6356129 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Kimmo Kinnunen 4334125b 2025-03-14T16:12:32 Metal: Make StateCache descriptors hash consistent Various descriptors would compare equality and do hashing based on the underlying storage. The storage contains alignment padding and bitfields. The contents of these are not defined, even when the constructors tried to memset and memcpy. The various hash and compare functions also seemed to be missing some elements, like rasterSampleCount. Missing == on fields and hashing unused memory may lead to inconsistency where a==b is true but hash(a) != hash(b). Fix by: Remove the memset/memcpy and write out the operator== and hash() consistently. Initialize the members to their default values. Use uint32_t : 1 instead of bool if the struct tries to optimize for size, since mixing types stops the packing. Use uint32_t to get the alignment to uint32_t, which is mostly what is expected. Use uint32 someVar : N where N is payload bits + padding bits for the last member. This way the assignment clears the padding bits. The goal os to get the operator== to compare the padding bits, which lets the compiler elide the memberwise compares and use word-wise compares where it makes sense. This is an attempt to fix rare crashes related to map inserts and lookups. std::unordered_map will crash if operator== is not consistent with hash. Bug: angleproject:403372465 Change-Id: I0a3a2ff327ac9f65e7d41bc9585cda54ce93ab86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6355828 Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen 7d37d970 2025-01-30T13:47:59 Make error messages end in a dot Some messages had dot and some not. Fix by adding dot to all error message string literals. Best effort, for free form string literals, check ANGLE_CHECK invocation sites only. Bug: angleproject:392938089 Change-Id: Idedc3fe1d1e186fb91b5e54407df87f6830995a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6218460 Reviewed-by: Geoff Lang <geofflang@chromium.org>
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 239ef680 2024-11-21T00:00:00 Metal: Support ANGLE_texture_multisample * Added explicit multisample texture creation support * Added support for SAMPLE_MASK frontend state * Adjusted Metal backend caps Fixed: angleproject:380475003 Change-Id: I90250e14da52869cb954b5a61d9c670e958a526c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6048958 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
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>
Le Hoang Quyen a89ca6c8 2024-07-30T17:14:50 Metal: Fully implement unresolve step for MSRTT. This CL also uses memoryless for implicit MS textures in EXT_multisampled_render_to_texture render passes. Bug: angleproject:42261786 Change-Id: Ic20450574c4c670d05ca846587ced05488012270 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5746181 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Le Hoang Quyen 1bfe5c57 2024-07-30T15:58:47 Metal: partially implement EXT_multisampled_render_to_texture. Implement by implicitly attaching a multisampled texture to the render pass. The content will be preserved across render passes by loading/storing to the implicit multisampled texture. However this won't work if the single sampled texture is used in multiple render passes with different glFramebufferTexture2DMultisampleEXT's sample counts. For that to work we need to implement unresolve step to load the resolve texture's texels into the implicit multisampled texture. That will be implemented in a separate CL. Bug: angleproject:42261786 Change-Id: I12be75af17ce5b98266946846417d0a43fcba455 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5746180 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Le Hoang Quyen 2bc1519c 2024-07-28T05:16:07 Metal: fix base/max level change for mutable textures. Previously, the following scenario would accidentally delete and recreate the native texture storage for a non-immutable TextureMtl: 1. set a texture base/max level. 2. attach the texture to a FBO and clear it. - native storage is created. 3. sample the texture. - native storage is accidentally deleted and recreated. This happened because front-end only notifies the backend about the base/max level dirty bits at step 3. At this point, Metal backend thought that the native storage created at step 2 is no longer valid and attempted to recreate the storage. This CL fixes the bug by checking whether the base/max level is still compatible with the existing native texture storage. If it is then the dirty bits result in no-op. Bug: chromium:355605685 Change-Id: I1daac80a74219109631a101e18e944560606d926 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5741121 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi d193d51b 2024-06-17T22:46:08 Replace issue ids post migration to new issue tracker This change replaces anglebug.com/NNNN links. Bug: None Change-Id: I8ac3aec8d2a8a844b3d7b99fc0a6b2be8da31761 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5637912 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 18bb6e54 2024-06-06T00:00:00 Metal: Support non-layered 2D array shader images Fixed: angleproject:8125 Change-Id: Id148c09d948487bb677c4a3af746e6ea151d84a7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5604225 Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Le Hoang Quyen 4d4c99b1 2024-05-31T02:07:11 Metal: skip copying via parentTexture on iOS simulator. iOS simulator has bug in [MTLTexture parentRelativeSlice] so don't use it to upload data to the texture. Bug: angleproject:343734719 Change-Id: I78cf0066c1120c04f9b62c30e280ad866c2096d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5584042 Reviewed-by: Kenneth Russell <kbr@chromium.org> Auto-Submit: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Le Hoang Quyen 8db2d61a 2024-05-14T00:39:47 Metal: properly handle base/max level for immutable textures. Previously, we treat every texture the same as a non-immutable texture. Every texture has a native mtl::Texture containing mipmap levels from base GL level to max GL level. And base GL level would be mapped to level 0 of the native texture. However, this is not correct for immutable textures, pbuffer or EGLImage bound textures. Such textures have mipmaps pre-allocated either via glTexStorage calls or externally. Base and max GL levels don't affect their allocated mipmap levels, only limit the levels a shader can sample. For example, a texture has 8 levels allocated via glTexStorage. Its base level is set 1, and max level is set to 2. Shaders will only be able to sample from level 1 to level 2 of this texture. However, it's valid to attach level 0 or level > 2 of this texture to an FBO. This CL addresses this bug by separating internal mtl::Texture into two main objects: - A native storage will contain the actual mipmap levels of the texture. FBO attachment or data uploads can refer to a level in this object. - A view of the native storage from base GL level to max GL level. This view will be used in shader sampling and mipmap generations. Bug: angleproject:6447 Bug: angleproject:8355 Bug: b/42265945 Change-Id: I186b69f02e9e40c75830ffe4b48bd5a3c8d49cf2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5531392 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Auto-Submit: Quyen Le <lehoangquyen@chromium.org>
Le Hoang Quyen 0044f4d1 2024-05-13T00:29:30 Metal: fix IOSurface's render targets invalidated by max level change. This CL fixes a bug in the following tricky situation: - Client binds an IOSurface to a texture. - Previously this would internally intialize the texture's max level to the default value 1000. - Client changes the texture's max level to 0. - Client attachs the texture to FBO 1. - Client binds FBO 1 and clear it. - This triggers TextureMtl::getAttachmentRenderTarget() that initializes the RenderTargetMtl of the texture. - Client binds FBO 0 and sample the texture. - Previously this could trigger TextureMtl::onBaseMaxLevelsChanged() which would invalidate the texture's RenderTargetMtl. - Client binds FBO 1. - Client blits FBO 0 to FBO 1. - This will set DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 in FBO 1. - Client calls glFlush to restart render command encoder. - Client issues a draw call. - DIRTY_BIT_COLOR_BUFFER_CONTENTS_0 would cause FrameBufferMtl to re-initialize RenderPassDesc from invalid RenderTargetMtl. - A new render encoder would be created from the invalid RenderPassDesc. - the draw call would be encoded to a render command encoder without any valid color attachment. The fix in this CL is that when we bind an IOSurface to a texture, the texture's max level will be automatically set to 0. This will avoid its RenderTargetMtl from being invalidated if users explicitly change the max level to 0 in future. Note: this is not a foolproof fix for every scenario concerning the base/max level in IOSurface bound/or immutable textures. We will fix them in future CLs. Bug: b/335353385 Change-Id: I3a2da6991764f22393178f40c1d7bbe60503cba4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5531388 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Le Hoang Quyen 251067ed 2024-05-03T22:36:11 Metal: don't break render pass when uploading a texture. Bug: b/337214693 Change-Id: Ib2dc77c364a72f2973cbc3882f6125bffbc0a11b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5514948 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Le Hoang Quyen 085ff15a 2024-03-26T03:33:26 Metal: Fix RenderTargetMtl::getFormat() could return nullptr. Bug: b/326301256 Change-Id: Ia8914e4bc77e34bd510661689837b97d5de82d92 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5394149 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Alexey Knyazev 05e9ec11 2023-11-23T00:00:00 Metal: Saturate floating-point depth textures on upload Metal does not clamp uploaded floating-point depth texture values to the normalized range. Used a compute shader to enforce the expected OpenGL ES semantics. Fixed the following tests on Intel and Apple GPUs: dEQP-GLES3.functional.texture.specification .teximage2d_depth.depth_component32f .teximage2d_depth.depth32f_stencil8 .teximage2d_depth_pbo.depth_component32f .teximage2d_depth_pbo.depth32f_stencil8 .teximage3d_depth.depth_component32f_2d_array .teximage3d_depth.depth32f_stencil8_2d_array .teximage3d_depth_pbo.depth_component32f_2d_array .teximage3d_depth_pbo.depth32f_stencil8_2d_array .texsubimage2d_depth.depth_component32f .texsubimage2d_depth.depth32f_stencil8 .texsubimage3d_depth.depth_component32f_2d_array .texsubimage3d_depth.depth32f_stencil8_2d_array Fixed: angleproject:8422 Fixed: angleproject:8426 Change-Id: I843024f098fef2fbca15e7b6124052681d05b6ad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5062710 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 95bacc28 2023-11-09T00:00:00 Metal: Override texture wrap modes for cube maps Always use clamp-to-edge texture wrapping for cube maps with OpenGL ES 3.0+ client contexts. Fixed the following tests on Apple silicon: dEQP-GLES3.functional.texture.filtering.cube.sizes.63x63_nearest dEQP-GLES3.functional.texture.filtering.cube.sizes.63x63_nearest_mipmap_nearest dEQP-GLES3.functional.texture.filtering.cube.sizes.63x63_nearest_mipmap_linear dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_nearest_repeat_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_nearest_repeat_mirror dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_nearest_mirror_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_clamp_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_repeat_clamp dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_repeat_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_linear_repeat_mirror dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_clamp_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_nearest_mirror_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_clamp_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_repeat_clamp dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_nearest_linear_mirror_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_clamp_repeat dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_repeat_clamp dEQP-GLES3.functional.texture.filtering.cube.combinations.nearest_mipmap_linear_linear_mirror_repeat Fixed: angleproject:7022 Change-Id: I52079b3e8de5ab052a20dd8aee7ead626ced9188 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5030451 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 06819324 2023-10-12T00:00:00 Metal: Linearize PVRTC1 blocks for buffer uploads PVRTC1 blocks are stored in a reflected Morton order and need to be linearized for buffer uploads in Metal. Fixed: angleproject:8376 Change-Id: I59497aaf49eb57aa93e346d62d56c69535555fd9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4973955 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 36439d9c 2023-10-12T00:00:00 Metal: Fix PBO uploads of PVRTC1 textures Do not override row pitch values for PVRTC1 textures during internal backend operations. Instead, set bytesPerRow to 0 before calling replaceRegion just to pass Metal Validation. Enforce CPU path for PBO uploads until GPU block linearization is implemented. Bug: angleproject:8376 Change-Id: I80b9ec69364d55cd9f51005f4d1a180e05e71c2c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4949350 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 4ace4da1 2023-09-28T00:00:00 Metal: Add 2D array and 3D texture type mappings Do not try to copy texture levels with mismatching layer counts to avoid triggering Metal validation. Fixed: angleproject:8364 Change-Id: I4bc72be753a62dd78dc131562c62e14eb540ab2a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4901993 Reviewed-by: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Christopher Cameron 58c8fc8b 2023-09-06T23:54:20 CopySubTexture: Handle sRGB source in Metal backend CopySubTexture should ignore the color encoding of both the source and destination. The implementation currently ignores the color encoding of the destination (and CopyTextureVariationsTest tests this). The implementation does not always ignore the color encoding of the source. As an example of the consequences of this, an RGBA pixel value of 0xFF/80/00/FF, when copied from a GL_SRGB8_ALPHA8 texture to a GL_RGBA8 texture may result in a value of 0xFF/37/00/FF, if the copy was executed using a shader (in which case the sRGB-to-linear function was applied 0x80, resulting in the 0x37). Update the Metal shaders that do this blit, adding an option to apply a linear-to-sRGB transformation to undo the transformation applied by the sampler. The linear-to-sRGB transformation must be applied on unpremultiplied values. Ensure that the sequence of operations in all shaders is first unpremultiply, then linear-to-sRGB, then premultiply. Also remove optimizations to have the unpremultiply and premultiply cancel each other out, if there is also a linear-to-sRGB being applied. Bug: angleproject:7907 Change-Id: I7237bde1c61251a2f83968755e98a139ba949b59 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4848327 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kenneth Russell d48a0d59 2023-08-11T16:57:23 Metal: optimize emulated texture formats. Optimize the following aspects of emulated texture formats like luminance, luminance-alpha and RGB: 1) Redundantly clearing the emulated channels in the texture, for example the alpha channel in RGB textures. If TexImage2D redefines the texture and it hasn't changed format, for example, it's not necessary to re-fill the emulated channels. 2) Clearing the emulated channels was being done on the CPU. Refactor PreferStagedTextureUploads to allow InitializeTextureContents to take the GPU clearing path for emulated textures assuming the texture is renderable. 3) Row-by-row data repacking and upload was allocating a staging buffer for each row. Forcibly disable staging buffers on the row-by-row code paths. Zoom's web client performs well on ANGLE's Metal backend on Intel GPUs with these optimizations. Fixed: chromium:1472087 Change-Id: Ie8b1e9e64fcc82797de76dd07958dd0a5aaa0203 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4771988 Auto-Submit: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: 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>
Geoff Lang f1f80e1e 2023-03-22T12:54:08 Metal: Always prefer staged GPU uploads for textures. Uploading Metal texture data via MTLTexture::replaceRegion is a source of lots of CPU hangs and jank. There may be better heuristics to determine if we should do a CPU vs GPU upload but for now preferring GPU uploads has better overall performance. This also improves the MotionMark images test: - 40 -> 100 when using Metal. - 217 -> 235 when using Metal + https://chromium-review.googlesource.com/c/chromium/src/+/4091749 Bug: angleproject:8024, angleproject:8092, angleproject:8109 Change-Id: I36b5f585884391b4cc416365ae65f8542745beee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4264963 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Alexey Knyazev 4256c022 2023-03-01T00:00:00 Metal: Implement ANGLE_stencil_texturing Used texture views to sample stencil values from combined depth/stencil textures. Texture2DDepthStencilTestES3.TexSampleModes* tests were split into swizzled and non-swizzled variants to suppress only swizzled cases on some platforms. Added a new avoidStencilTextureSwizzle workaround to skip creating swizzled texture views of stencil-only textures on platforms that fail to sample from them. Fixed: angleproject:8051 Change-Id: I0b1148f8d30fc6459239efcdaeee6c0364633cc8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4304058 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@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>
Chris Dalton 8ee1b89f 2022-11-04T13:10:37 Refactor pixel local storage options The various different PLS options were getting scattered and unruly. We are also in need of more backend-specific PLS options that would be difficult to add as-is. This CL refactors them into a single "ShPixelLocalStorageOptions" struct that gets initialized all in one place, and shared between the compiler and the backends. Bug: angleproject:7279 Change-Id: Ic58dccb8d1ba350a0b6cc5848ce15bd687e30fad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4006715 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Chris Dalton <chris@rive.app>
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>
Shahbaz Youssefi 025504b9 2022-10-17T17:03:03 Pass worker pools to image load functions In preparation for the ASTC decoder using threaded decoding. Bug: b/250688943 Change-Id: I70d669bcb57b900dbb633304182e174aec362203 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3961339 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Greg Schlomoff <gregschlom@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
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>
Tiago Vignatti cad7979e 2022-10-07T11:08:14 Metal: Build fix TextureMtl code Changes introduced in CL https://crrev.com/c/3915180 caused an issue when building Metal with TARGET_OS_SIMULATOR enabled. This fixes that and a minor formatting issue that presubmit hook caught). Test: build ANGLE with Metal renderer enabled on iOS. Bug: angleproject:7573 Change-Id: I08baf64e3d37b97af76e9e04188836ed253d34b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3939217 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Geoff Lang 25bad36c 2022-09-23T13:23:57 Metal: Remove unpackLastRowSeparatelyForPaddingInclusion This speculative fix did not work. Bug: angleproject:7573 Change-Id: I345db1746f8725d82420aabffb37c8dd01230a34 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3915182 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Geoff Lang 2aa52da7 2022-09-23T13:15:44 Metal: Upload IOSurface data with staging buffers on AMD Crashes have been seen in the AMD driver when locking IOSurfaces. Avoid this by always using a staging buffer and doing a GPU-GPU copy for uploading client side data to IOSurfaces. Bug: angleproject:7573 Change-Id: I4d981a24554a755a7248199699b486d98cbad83d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3915180 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org>
Geoff Lang 09446a6b 2022-09-02T11:29:32 Metal: Upload the last texture row separately on AMD. Speculative fix for crashes seen when uploading texture data on AMD. Port of the unpackLastRowSeparatelyForPaddingInclusion workaround from the GL backend. Currently constrained to client data 2D uploads to non-compressed textures. Bug: angleproject:7573 Change-Id: Idd036b92619d309e5b2a8062043e8644f4d5b2e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3870655 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Gregg Tavares <gman@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>
Le Hoang Quyen 6c8bb1f3 2022-06-21T06:06:29 Metal: Fix invalid iosurface texture after base/max lvl changed Changing base/max lvl invalidated previously bound iosurface's texture. This caused conformance/canvas/webgl-to-2d-canvas.html failure. Fix by rebinding the iosurface's texture after base/max lvl changed. Bug: chromium:1337324 Change-Id: I28f84b0ac28695221997571f71c476e802cbfac3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3715729 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Peng Huang <penghuang@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>
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>
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>
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 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>
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>
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>
Kenneth Russell da3db87e 2021-07-06T14:00:58 Upstream latest changes to Metal backend from Apple to 7/1/2021 This CL merges in the ANGLE changes between these two WebKit commits: https://git.webkit.org/?p=WebKit.git;a=commit;h=8648b353ab1d7730438c2e08319e1a4d64982c31 https://git.webkit.org/?p=WebKit.git;a=commit;h=166e4924a52971d6a32ad48247a439b16c00e062 Include provoking vertex buffer out of bounds fix from https://bugs.webkit.org/show_bug.cgi?id=230107 Fix bad merge of resetting of dirty bits, breaking DepthStencilFormatsTest.DepthTextureRender test and perhaps others. Disable GL_APPLE_clip_distance when the direct-to-Metal compiler is active. It can not yet handle the gl_ClipDistance array. Disable use of rectangular textures for IOSurfaces. Metal can bind IOSurfaces to 2D textures, and this was passing all tests in the SPIR-V Metal backend. Introducing rectangular textures breaks the SPIR-V Metal backend, and the tests currently fail on the direct-to-Metal backend. Fix several bugs with ProvokingVertex, which was causing both the SpirV and Direct backends to incorrectly draw indices. (https://bugs.webkit.org/show_bug.cgi?id=230107) Skip the following tests on the Metal backend which is still failing RobustResourceInitTestES3.BlitDepthStencilAfterClearBuffer GLSLTest_ES3.GLVertexIDIntegerTextureDrawArrays/ES3_Metal With these changes, angle_end2end_tests again runs to completion. Bug: angleproject:6395 Change-Id: I3cc58f531426a95fc8f177a4ad87f56c1855a546 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3167010 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kyle Piddington <kpiddington@apple.com>
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 04cfe18d 2020-11-05T17:50:53 Metal: Fix typo in TextureMtl::bindToShader Bug: angleproject:2634 Change-Id: I56d13dda7a6c0ad002db15cb780d7bf6b430bf65 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2519712 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Le Hoang Quyen <le.hoang.q@gmail.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Le Hoang Quyen 9ff063e9 2020-10-25T03:08:25 Metal: fix max varyings, copyImage between mips, depth fmt - GLSLTest_ES3.MaxVaryingWithFeedbackAndGLline failed before because gl_Position takes up one slot from max varyings on Metal back-end. FIXED - Previously, copyImage() between mips of the same texture would fail. Due to the read RenderTargetMtl is released before the copy happens. FIXED - GL_DEPTH_COMPONENT24 texture data upload didn't work due to the source 32 bit depth data wasn't handled properly. FIXED - D24S8 format will be disabled on AMD for now, it will be converted to D32S8 instead. Bug: angleproject:2634 Bug: angleproject:5235 Bug: angleproject:5242 Change-Id: Ie7082f0545c0885ce5ec72df8a7ec4ee5d5de4b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2494525 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
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 6422d3b4 2020-10-25T04:36:53 Metal: Fix 2D array texture's robust resource init 2D array texture's robust resource init didn't work due to mtl::InitializeTextureContents() expects one slice at a time, however TextureMtl::initializeContents() created entire layers index via GetZeroLevelIndex() before passing to mtl::InitializeTextureContents(). Fixed by changing to GetLayerMipIndex() instead. Bug: angleproject:2634 Change-Id: Ie8d80d927a987c2b393d913fda8288b6e06e97d0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2494527 Reviewed-by: Jamie Madill <jmadill@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 27e7e446 2020-09-27T00:00:35 Metal: Support 2D array textures and base & max levels. Bug: angleproject:2634 Change-Id: If9e50cec46bdf5f472f1e58c6e82a67b524e2408 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2433327 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 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>
Shahbaz Youssefi 331581e9 2020-08-27T11:55:16 Make copy*Texture parameters consistent for level indices They were passed as size_t, while GL level indices are GLint throughout ANGLE. Bug: angleproject:4880 Change-Id: I43bc9f01a607e457b55a061f473450d3360db808 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2380230 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen 91004654 2020-08-25T01:08:00 Metal: Implement ANGLE_robust_resource_initialization. Bug: angleproject:4929 Bug: angleproject:2634 Change-Id: Ib99b810059420e69d939f1bbb644c2b95de62850 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2374826 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 a4f706b2 2020-08-04T12:08:00 Metal: Use compute to generate 3D texture's mipmap. - Metal's built-in blit based mipmap generator doesn't use box filtering. Hence manual generation using compute is needed. - Compute based mipmap gen can generate up to 4 mips per pass if the base level is power of 2. - This approach can be extended to 2D/cube texture's mipmap generation in future. Bug: angleproject:4921 Bug: angleproject:2634 Change-Id: I7f997669fe39afef075b2bca2406e9424cbb3016 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336120 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com>
Le Hoang Quyen acda9dde 2020-08-08T18:36:57 Metal: Implement GL_OES_texture_3D Bug: angleproject:2634 Change-Id: I8c46493ac28fe1bbfdb29ee3a60b23076bbc4c0c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336119 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 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 a13f1061 2020-08-14T23:37:21 Metal: Fix missing image view for texture from IOSurface. Image view is used by glTexSubImage*, glCopySubImage* and glCopySubTexture*. This fixed some failed WebGL tests that make use of IOSurface. Bug: angleproject:4846 Bug: angleproject:2634 Change-Id: Iebcf840fdc1be2794feab766957b5848a361a63c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2356107 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen f37f1dcb 2020-08-02T19:38:54 Metal: Init format table using Metal-Feature-Set-Tables.pdf - Format table is now initialized using informations from https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf. Previously, it was setup using gl::GenerateMinimumTextureCaps(). - This CL also adds InitializeTextureDataFunction and LoadFunctionMap to mtl::Format. They are needed to properly initialize/convert textures with non-normalized formats. - This CL is prerequisite for integer & floating point format supports. - New test: DXT1CompressedTextureTest.DXT1Alpha (this test was added in the past but was reverted for some reasons). Bug: angleproject:2634 Change-Id: I5eaad812909a49c4c138d0f65fd21a6a199fcb22 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2332144 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 a0880831 2020-08-06T19:11:40 Metal: Implement CHROMIUM_copy_texture Bug: angleproject:4930 Bug: angleproject:2634 Change-Id: I9fd958aa1dd872855be06a14bdbba4c6624dc934 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2340396 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Tim Van Patten 48ba75ac 2020-08-06T15:26:53 Remove TextureCommand TextureCommand::GenerateMipmap can be moved into gl::Command allowing us to remove TextureCommand. Bug: angleproject:4753 Test: CQ Change-Id: Idc546df519e199ffd3a8b8e03b9868cd9152e9ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2338823 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi fc4bd898 2020-08-03T16:29:06 Vulkan: Support ANGLE_external_objects_flags With this extension, it is possible to import Vulkan images into ANGLE (similar to EXT_external_objects) while specifying the Vulkan create and usage flags used to create that image. This can be used by the application to drop usage flags it does not need to improve performance, or add create flags as it requires. Bug: angleproject:4912 Bug: fuchsia:52759 Change-Id: Ia568973b19670999dd0e69f6ac5548e8ef0c3eec Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2335020 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Michael Spang <spang@chromium.org>
Le Hoang Quyen 69ca1025 2020-07-31T02:08:09 Metal: Implement EGL_ANGLE_iosurface_client_buffer. GL_R16UI format is not supported yet. It will be implemented once integer textures are implemented in metal back-end. Bug: angleproject:4847 Bug: angleproject:2634 Change-Id: I60a52c0ce327a524c74e80b18bb15978ac52065b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329091 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 663075ac 2020-07-31T01:54:45 Metal: Fix Intel's LOD clamp and blit shader's filtering. 1. Setting max LOD clamp = FLT_MAX via setSamplerState caused mipmap tests failure on Intel. It always picked wrong mipmap level during texture sampling. Fix: Use value from SamplerState::getMaxLod() instead. 2. Also set default linear filtering for blit shader's sampler. Previously there was no sampler set for this shader. It caused black fragments on Intel. This CL is a prerequisite for enabling end2end tests on Intel & Metal. Bug: angleproject:4133 Bug: angleproject:4915 Bug: angleproject:2634 Change-Id: I9e6b669712a294e09ab692a3c65f3956a799ef8b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329089 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 349b661d 2020-07-08T12:50:00 Metal: fix max point size and RGB565 renderbuffer bug. - Max point size is set to 64, since this is the max size observed. It is not 511 as https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf claims. - RGB565 is emulated on macOS by RGBA, needs to disable alpha write for this format. This was already done for TextureMtl, but wasn't for RenderBufferMtl. - Also enable true non-power-of-two textures support (OES_texture_npot). This was technically already supported, just that the extension wasn't advertised yet. - New Test: FramebufferFormatsTest.RGB565Renderbuffer Bug: angleproject:4816 Bug: angleproject:2634 Change-Id: Ie7e3efb4cb29bb9a3fd706c26e2b50b42ff3f6be Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2281797 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 9277ee74 2020-07-06T12:40:58 Metal: Implement MSAA default framebuffer. GL_SAMPLE_COVERAGE_VALUE is implemented by inserting gl_SampleMask writing logic to fragment shader. New test added: MultisampleTest.ContentPresevedAfterInterruption. - Skip on D3D11 (Bug: angleproject:4609) Bug: angleproject:2634 Change-Id: Ib44daf0baccc36ea320596d81713156047da059c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2281783 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 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>
Shahbaz Youssefi b772a955 2020-06-16T23:32:47 Vulkan: Make texture syncState aware of upcoming generateMipmap By letting TextureVk::syncState know it's being called for generateMipmap, it can make a better decision to initialize the image: - Staged updates to mips that are going to be overwritten are dropped - The image is created with full mipchain to avoid a redefine in the following generateMipmap() call. Bug: angleproject:4551 Change-Id: Ic70ee6c0a0b29c7bd62beaff612b2f2d5276defb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2249340 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Le Hoang Quyen ab372311 2020-05-14T23:27:06 Metal: refactor RenderUtils to split into multiple util classes. This is useful for later modifications where blit/clear could be further categorized based on texture format type (float/integer). Bug: angleproject:2634 Change-Id: I877abd21761af9e91657686a60e189a43a33e3f4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2193195 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill e4aa679c 2020-04-01T17:46:31 Texture: Pass explicit unpack buffer to setImage. This will allow us to call setImage internally even if there's an unpack buffer bound. Useful when implementing robust resource init with copyTexImage in some edge cases. Bug: angleproject:4517 Change-Id: I7e8e9536ab9222c620e572f7b6c20b08fa29d646 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2133088 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Cody Northrop <cnorthrop@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 Hoang Quyen 53e45360 2019-11-09T17:26:58 Metal: support texture's incomplete image definitions. glTexImage*, glCopyImage* will copy data to the image at the respective index, then during draw call, the image data will be transferred to real Metal texture. Test done: MipmapTest.DefineValidExtraLevelAndUseItLater For implementation notes, see src/libANGLE/renderer/metal/doc/TextureDataCompleteness.md Bug: angleproject:2634 Change-Id: I0ca24c8beff2e109a794260c436985e9f4650d83 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1906609 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 405d4cf3 2019-11-09T02:28:49 Metal: multiple bug fixes - ContextMtl: triangle fan draws should call setupDraw() with original parameters. Not the modified parameters. - SurfaceMtl: should initialize metal layer's drawableSize after layer's creation. - TextureMtl & FrameBufferMtl: Fix texture copySubImage CPU path incorrectly copied unflipped area. - mtl_render_utils: Fix wrong variable name used for trifan compute pipeline cache table. - mtl_resources: Fix texture & buffer memory leaks due to missing ANGLE_MTL_AUTORELEASE. - mtl_utils: Fix viewport flipping error due to arithmetic between unsigned & signed values. These bugs were discovered during dEQP tests running. Bug: angleproject:2634 Change-Id: Ie01380910ab68a2b876718d9dac0b5b4c41b607c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1906608 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
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>