src/tests/gl_tests/TextureTest.cpp


Log

Author Commit Date CI Message
Shahbaz Youssefi 518e162e 2024-11-15T00:07:14 Fix validation for 3D depth/stencil textures They should fail with GL_INVALID_OPERATION: > Textures with a base internal format of DEPTH_COMPONENT, DEPTH_STENCIL > or STENCIL_INDEX are supported by texture image specification > commands only if target is TEXTURE_2D, TEXTURE_2D_MULTISAMPLE, > TEXTURE_2D_ARRAY, TEXTURE_2D_MULTISAMPLE_ARRAY, TEXTURE_CUBE_MAP or > TEXTURE_CUBE_MAP_ARRAY. Using these formats in conjunction with any > other target will result in an INVALID_OPERATION error. Bug: angleproject:379674017 Change-Id: Icdd4cea24601f6744a3a85bdf8ef07946569a16f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6019830 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov cc2edfd1 2024-11-05T15:37:21 Fix getPerfMonitorCounterData maxResults, skip AsyncCommandQueue test Skips TextureDataInLoopManyTimes on SwS AsyncCommandQueue. Add more debug info to the test although without the AsyncCommandQueue variant we likely won't be see flakes. Bug: angleproject:377503738 Change-Id: I372531451c280b04ffed84b020463657440fca08 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5995531 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Roman Lavrov <romanl@google.com>
Mohan Maiya 059f66be 2024-10-15T10:04:23 Bugfix in UnitTest_DMSAA_dst_read Skip UnitTest_DMSAA_dst_read test if GL_EXT_sRGB_write_control extension is not supported Bug: angleproject:40644776 Change-Id: I4e8ec6d184b033308b7cd33551555d480bdc8107 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5933569 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Mohan Maiya 605c2f85 2024-09-27T12:00:58 Vulkan: Bugfix in FramebufferVk::blit(...) If any color attachment of GL_DRAW_FRAMEBUFFER is already in use in the currently started renderpass, don't reuse the renderpass for blit. Bug: angleproject:40644776 Tests: Texture2DTestES3.UnitTest_DMSAA_dst_read* Change-Id: Ib4266fc65d0ac7151f362f263e9e706adb1231ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5895158 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 2ae68a20 2024-08-05T14:24:06 Add MRT test for foveated rendering feature Bug: angleproject:42266906 Change-Id: Ia98b1a2a0195ec213bc510a3b62c85b0adc630eb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5763719 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 22ed9877 2024-03-07T15:52:13 Vulkan: Generate fragment shading rates with compute Generating fragment shading rates on the CPU could cause avoidable stalls or increased latencies due to host<->device synchronization. Instead generate the rates using a compute shader. Optimize foveated rendering by treating a foveated draw with focal points whose gainX or gainY is 0 as if it were an un-foveated draw Bug: angleproject:42266906 Change-Id: If8c5504087997666c7d0c1cae8dcc5fab847187e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5754322 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Amirali Abdolrashidi cc7d0220 2024-07-31T14:22:38 Vulkan: Fix serial mismatch during mid-loop flush Currently, if the total buffer updates to the image surpasses a certain threshold, it results in a flush. However, this can cause discrepencies in the queue serial, which can result in incorrect behavior on some platforms. * Updated flushStagedUpdatesImpl() so that the image serial after applying the updates matches that of the current outside command buffer. * That includes when there is a flush in the middle of the update loop, resulting in submission and new queue serial for the CB. * Added a unit test to check if a large texture can uploaded and deleted after a second small texture is uploaded. * Texture1UploadThenTexture2UploadThenTexture1Delete * Added a unit test for flushing when uploading cubemap textures. Bug: b/351650806 Bug: b/356192937 Change-Id: I7f9b20e4b7fd49115f22081a9733b4d44b740e4a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5744377 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@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>
Amirali Abdolrashidi 85875b96 2024-07-11T14:59:27 Fix validation regarding cube map array dims When defining cube map array textures, the depth represents the number of layer-faces, and does not change with mip level. * Updated validation for glTexImage3D(). * The width and the height for a mip level should not exceed the max cube map size for that mip level. * The depth limit has been set to max 3D texture size (similar to glTexStorage3D()) * The spec states that this limit should be at least the value of the implementation-based constant MAX_RECTANGLE_TEXTURE_SIZE. * Added unit tests to check multiple cases for cube map array validation for TexStorage3D, TexImage3D, and TexSubImage3D. Bug: b/338621235 Bug: angleproject:42262247 Change-Id: I0857e68de02238ffd288e34879fb7dfa6e3f545f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5698571 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 640e3716 2024-07-04T00:00:00 Do not rely on 16-bit color read conversions in tests These conversions are not specified. D3DTextureClearTest should assert that all bits are cleared. Texture2DNorm16TestES3.TextureNorm16*TextureTest should not use 16-bit framebuffer attachments as they are tested separately. Bug: angleproject:40096653 Bug: angleproject:351644552 Change-Id: Ib22e9fcc3b643725f25f6ed880569888107928ad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5683107 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 58dc069c 2024-07-04T00:00:00 Rename 16-bit EXPECT_PIXEL test helpers Do not use UI suffix as the format is normalized. Bug: None Change-Id: Ib635397f2cdec02806c2c31484820b9b6964a066 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5680605 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 3f572905 2024-06-19T17:46:38 Add basic begin/end support for perf counters The AMD_performance_monitor extension has explicit begin/end calls to capture counters. This was not implemented in ANGLE and the tests were relying on ANGLE always capturing counters (incurring a small overhead). This change does not complete the implementation of that extension, but does add basic support for starting and stopping perf counter measurements. While inactive, most counters are not updated. Bug: angleproject:42267038 Change-Id: I3ff6448b22ca247c217401cb2d76ef4142c9d759 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5639343 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
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 479c950e 2024-06-06T00:00:00 D3D11: Implement fragment shader image2D layout updates Checked for updated image2D bind layout when triggering program recompilation. Included image2D bind layout variants into D3DPixelExecutable cache. Added tests for binding 2D array texture layers. Fixed: angleproject:8124 Change-Id: I228a29b5bb175bbf0f8b13e70d1f09e8eb4ebb2f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5630654 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Charlie Lao 2c3e5f23 2024-06-06T14:49:06 Vulkan: Add Texture3DTestES3.ClearThenTexSubImageWithOverlapp This CL added two tests: Texture3DTestES3.ClearThenTexSubImageWithOverlappingLayersThenRead to expose a vulkan backend bug that we may incorrectly keep an overlapping update. Then on top of the first test, another test is added to do the darw call after texSubImage call to test the flush call originated from FBO works correctly. Bug: angleproject:345532371 Change-Id: I6014d6f0f1f0ed3a4813b9a78ec7e7ef1dfb2e66 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5606145 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Alexey Knyazev 57524dc9 2024-06-06T00:00:00 Fix shader image level rebinding Added a test that interleaves two draw calls with rebinding the texture level of a shader image; fixed surface init. Vulkan: Fixed subresource serial generation. D3D11: Fixed dirty bit setting. Fixed: angleproject:7647 Bug: angleproject:8124 Change-Id: I4b5d095a1714f31a4f7b63f96dedb366faa17a03 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5611298 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Amirali Abdolrashidi 72c94302 2024-06-04T17:24:24 Vulkan: Enable OES_copy_image Based on the spec, OES_copy_image is functionally identical to EXT_copy_image. In addition, they have both been implemented. However, OES_copy_image remained disabled before this change. * Enabled copyImageOES in vk_caps_utils. * Updated the validation for glCopyImageSubDataOES() so it will check for OES_copy_image instead of EXT_copy_image. * Added the enum class APIExtensionVersion to simplify testing multiple versions of the same API (e.g., EXT, OES) * Added tests using CopyImageSubDataOES(). * Turned the repeated test code into functions: * testCopyImage() * testCopyImageDepthStencil() Bug: b/345013929 Change-Id: Ica36882630dac98775626699a170bffe9404273c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5597736 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Alexey Knyazev 305bdec9 2024-06-06T00:00:00 Add TextureTestES31.Texture2DLayered test Bug: angleproject:344950165 Change-Id: I4d59c12fd7dbe214e52eea498c93171fade82096 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5600864 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@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>
Liza Burakova ead98ed9 2024-05-02T14:04:14 Implement basic texture upload. This change modifies ImageHelper's methods to upload textures to fix webgpu API calls, as well as fully implements uploading texture data via TextureWgpu::setImage for RGBA8 formats. Bug: angleproject:8457 Change-Id: I1c5be3d79ad996a709086ca7157cca6229a336ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5398002 Reviewed-by: Matthew Denton <mpdenton@chromium.org> Commit-Queue: Liza Burakova <liza@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya ba208b45 2024-04-06T21:08:15 Vulkan: wait for post-link tasks in resetLayout Wait for post-link tasks before resetting ProgramExecutableVk. Otherwise mGraphicsProgramInfos, which post-link tasks use to create pipeline, can be prematurely invalidated. Bug: angleproject:8297 Tests: Texture2DTestES3YUV*DisableProgramCaching Change-Id: Ib84cebad252777ae4c37cb32c455c326911416a2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5430927 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 21ef298e 2024-03-13T11:06:22 Consider textures without an attached Buffer as incomplete There are apps that perform a draw call using GL_TEXTURE_BUFFER but without binding a valid buffer thus causing a crash. Instead consider them as incomplete textures and fail validation checks. Also, there is no need to explicitly track the buffer associated with an incomplete buffer texture, the owning texture will handle cleanup. Bug: b/328846669 Tests: TextureBufferTestES31.DrawIncomplete* Tests: TextureBufferTestES31.DrawComplete* Change-Id: Id0b68e8048ba582d677e6767272a86761913ea3a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5369639 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi b3ab67d3 2024-03-14T15:06:02 tests: Remove unnecessary .get() from RAII objects Bug: chromium:40942995 Change-Id: I82509869bce3ad8f51811188fe04267f2de04786 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5370904 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 91ddf851 2024-03-03T10:57:22 Vulkan: support QCOM foveated rendering extensions Add support for foveated rendering in the vulkan backend. This is done by leveraging the VK_KHR_fragment_shading_rate extension. Bug: angleproject:8484 Change-Id: I0d01d07583f710b2302ea07b19c9d113c73bfe41 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5269907 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya b2773c11 2024-03-01T11:24:44 Vulkan: Bug fix in immutable sampler pipeline layout recreation An immutable sampler is tied to a sampler index and changing sampler uniform location value should force a recreation of the pipeline layout Bug: b/155487768 Bug: angleproject:5033 Bug: angleproject:5773 Tests: Texture2DTestES3.TexStorage2DMultipleYuvSamplersSwitch*Vulkan Change-Id: I82aaed332d7f87f11a2fd4923cfc004403ff0bd2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3657480 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com>
Mohan Maiya b978974d 2024-03-03T10:48:48 Update frontend support for QCOM foveated extensions Modifications to frontend support - 1. EXTENDED_DIRTY_BIT_FOVEATED_RENDERING is removed 2. New framebuffer attachment API - getFoveationState 3. Attachment type restriction for foveated rendering is removed 4. Addition of new test - RenderbufferAttachmentClearThenDraw Bug: angleproject:8484 Change-Id: I699cbed81346c9a6344c4ff36afa51d6cc1bf052 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5338529 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 2ee295b4 2024-02-15T11:27:39 Vulkan: Add per-level image update tracker * Add a per-level image write tracker to ImageHelper. * It tracks the updates scheduled for different parts of the image. Within each level, it also tracks different layers, currently up to 64. * kMaxParallelSubresourceUpload renamed to kMaxParallelLayerWrites; moved to vk_helper header. * It is reset when a barrier is issued for the image. * Modified ImageHelper::recordWriteBarrier(). * Added isWriteBarrierNecessary(). * Now it checks the added writes for the image. It will no longer issue a barrier if the image is in the same layout and there is no write to a part of the image to which was previously written. * Added ReadImageSubresources to CommandBufferAccess. * It is used for layouts that allow both reading and writing to the image (including self-copy): * TransferSrcDst (used in CopyImageSubData) * ComputeShaderWrite (used in compute-based mipmap generation) * CommandBufferImageWrite -> CommandBufferImageSubresourceAccess * Updated onImageSelfCopy() args to include read subresource data. * Improves gpu_time for TextureUploadETC2TranscodingBenchmark perf test * Windows/NVIDIA: ~180609 ns -> ~62669 ns (~2.88x) * Linux/NVIDIA: ~157283 ns -> ~93360 ns (~1.68x) * Windows/Intel: ~72297 ns -> ~57153 ns (~1.27x) * Added a test to show that self-copy for a write-after-read works. * ArraySelfCopyImageSubDataWithWriteAfterRead * (ArraySelfCopyImageSubData covers RAW hazards; renamed) Bug: b/308455694 Change-Id: I5cef296d991ce6ec02792edc3ffc5cc4994831e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5301855 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Mark Lobodzinski f546983c 2024-01-30T13:39:27 Add test and skip for 07753 validation error Running Pokemon Masters Ex game on Android generates the validation error VUID-vkCmdDrawIndexed-format-07753. This CL adds the TexImageFormatMismatch test to reproduce the error and updates the SkippedMessages list to avoid test failures. Test: angle_end2end_tests --gtest_filter=*TexImageFormatMismatch* Bug: b/319228278 Change-Id: I6ee2cac0bc899e945ef0d4aff33d5e73299c6954 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5309857 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Mohan Maiya d05c9a5e 2024-01-25T13:01:49 Frontend support for QCOM foveated extensions Add frontend state management to support foveated rendering extensions. Bug: angleproject:8484 Test: Texture2D*Foveation* Change-Id: I0e1be9f11b2d442207674562da760f5bfd7debc8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5208091 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 0ea24ef2 2024-01-26T16:50:39 Unsuppress passing tests Bug: angleproject:3871 Bug: angleproject:3872 Bug: angleproject:3879 Bug: angleproject:4686 Bug: angleproject:4704 Bug: angleproject:4718 Bug: angleproject:4721 Bug: angleproject:4792 Bug: angleproject:5086 Bug: angleproject:5313 Bug: angleproject:6109 Change-Id: I0d0f88a388cd2f19da99a7defd0ab8d98db0e6e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5241306 Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev d7077e9f 2023-12-05T00:00:00 Update macOS end2end expectations Bug: angleproject:2273 Bug: angleproject:2408 Bug: angleproject:3837 Bug: angleproject:5325 Bug: angleproject:5360 Bug: angleproject:5594 Bug: angleproject:6358 Bug: angleproject:6418 Bug: angleproject:6454 Bug: angleproject:6457 Bug: angleproject:6540 Bug: angleproject:6702 Bug: angleproject:6751 Bug: angleproject:7068 Bug: angleproject:7309 Bug: angleproject:7445 Change-Id: I7f4c012ed2de6af83188ed69170b19f8d2bb19de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5087774 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 8ae36a93 2023-11-14T10:11:51 Vulkan: Bugfix in isFastUnpackPossible Disallow fast unpack when there is a mismatch between the actual texture format and intended buffer (PBO or client buffer) format. Bug: angleproject:3777 Test: Texture2DTestES3.UnpackCompatibleFormatButDifferentType* Change-Id: I9ea9d9cdd5e1391acebb3d75d69437e27cfa90df Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5029504 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi 3a6b385f 2023-11-09T15:48:48 Vulkan: Fix depth/stencil texture copy Bug: angleproject:7289 Change-Id: Icde8a26e855e95a6c0a1e506d2435e981adc6f28 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5018798 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi d896fab8 2023-11-09T15:03:05 Vulkan: Fix texture self-copy A new layout is introduced to support self-copy. Bug: angleproject:7289 Change-Id: Ib914c433d55b9a79cfeb7a91f8a2b8680824d473 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5018797 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 9a5d75de 2023-10-30T11:59:19 Vulkan: Fix incompatible redefinition of cube faces The TextureVk::mRedefinedLevels bitmask tracked which levels are incompatibly redefined, greatly reducing the complexity of dealing with GL's mutable textures. It did not however take into account the fact that GL allows each cubemap face to be separately redefined (unlike 2D arrays, where all layers are defined together). This change turns the bitmask into an array of bitmasks. Previously, a single bit represented whether the level is incompatibly redefined. Now, elements of the array track the same information for each cube face. For non-cube-map textures, only element 0 is used. Bug: chromium:1494664 Change-Id: I69568d3da2391796bf5f01505861fee42c6c8924 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4986289 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev b6607672 2023-10-30T00:00:00 Test sampling from a texture with renderable levels below base Bug: angleproject:8378 Change-Id: Id847849e1920c0d1706a4b3441c907ea2451cb6e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4994791 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 118a9b14 2023-10-30T00:00:00 Test sampling from a texture with extra renderable levels Bug: angleproject:8378 Change-Id: I4790d59ce193a2aa4ba9e468debf0933a6e3fe47 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4987639 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev c54c2f81 2023-10-12T00:00:00 Sync border color on format updates When a texture is redefined, its border color should be resynced because of format-specific adjustments. Used memcmp for comparing ColorGeneric structs. Bug: angleproject:7969 Change-Id: If0e3e0bc7761c26dab6d00ab24462c789f5b90bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4935866 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev b870956e 2023-10-05T00:00:00 GL: Limit depth/stencil texture mode updates The DEPTH_STENCIL_TEXTURE_MODE state must affect only DEPTH_STENCIL textures (OpenGL ES 3.2, Section 8.16). Some drivers do not follow this rule and exhibit various side effects when this mode is set to STENCIL_INDEX for textures of other formats. Bug: angleproject:2373 Change-Id: I20a8168d858cf070762ff0b3b7111cdf30e8166d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4936374 Reviewed-by: Shahbaz Youssefi <syoussefi@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>
Shahbaz Youssefi b2e6a196 2023-09-11T15:27:20 Vulkan: Use VK_EXT_host_image_copy for texture uploads Of all the scenarios where host image copy may be useful, this is likely the most common case. There are numerous conditions for when the copy may be done on the host: - The image format must support it, - It must be unused by the GPU, - It must not have any pending updates (this can potentially be mitigated if needed), and - It must be in a host-copyable layout. However, many texture uploads are done: - To compressed formats, where support is highly likely, - On init, where: - the image is never previously used, - the image has no previous uploads - the image is in the UNDEFINED layout which satisfies the conditions above. As a result of this change, when the upload is done on the host, creation of a temp buffer is avoided which greatly reduces memory pressure (specially during app loading which is when most texture data is uploaded) and may even improve performance (due to avoiding a double copy). Testing the first 3 frames of the following traces with a SwiftShader implementation shows the amount of buffer allocated for staged uploads changed as such: - Black Desert: 185MB -> 65MB - Genshin Impact: 125MB -> 12MB - Asphalt 9: 138MB -> 0MB Bug: angleproject:8341 Change-Id: Id71dcc4a7a0f8b67960d2d283fe9d19ce7429a03 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4856676 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi e7418836 2023-08-16T14:25:52 Vulkan: Add context flushing as OOM fallback * As a new fallback for out-of-memory errors, if an allocation results in device OOM, the context is flushed and the allocation is retried. * Functions related to buffer/image allocations now return a VkResult value instead of angle::Result, which will be bubbled up to a higher level for safer handling. * The OOM is no longer handled at the level where the allocation happens, but is moved up to the context. * Added two functions to ContextVk for allocating memory for images and buffer suballocations, which also include the fallback options. * initBufferAllocation(): Uses BufferHelper::initSuballocation() * initImageAllocation(): Uses ImageHelper::initMemory() * Moved initNonZeroMemory() out of the following functions: * BufferHelper::initSuballocation() * Moved to ContextVk::initBufferAllocation(). * ImageHelper::initMemory() * Moved to ContextVk::initImageAllocation(). * Also moved to new function: ImageHelper::initMemoryAndNonZeroFillIfNeeded(). This function replaced the rest of initMemory() usages outside initImageAllocation(). * New macros for memory allocation * VK_RESULT_TRY() * If the output of the command inside it is not VK_SUCCESS, it will return with the error result from the command. * VK_RESULT_CHECK() * If the output of the command inside it is not VK_SUCCESS, it will return with the input error. * Added a test in which allocation would fail due to too much pending garbage without the fix on some platforms. The test ends once there has been a submission. * New suite: UniformBufferMemoryTest * Added a similar test for flushing texture-related pending garbage. * New suite: Texture2DMemoryTestES3 Bug: b/280304441 Change-Id: I60248ce39eae80b5a8ffe4723d8a1c5641087f23 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4787949 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Mike Schuchardt be60f879 2023-06-28T17:29:45 Workaround for tex buffer type mismatch In the event of a mismatch between a texture buffer format (eg GL_R32F) and the shader sampler type (eg usamplerBuffer), adjust the tex buffer format to match the sampler (eg GL_R32UI). Test: angle_end2end_tests \ --gtest_filter="TextureBufferTestES31.TexBufferFormatMismatch*" Bug: b/233119699 Change-Id: I3461bcecabfe1d96be6350c43c15b32d35265b23 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4769137 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Mike Schuchardt <mikes@lunarg.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 113f847b 2023-06-26T12:07:52 centralize basic OS/platform detection functions We had multiple different places that defined these, and with varying naming schemes. Centralize them to be defined in platform_helpers.h. Also renaming the IsApple(uint32_t) functions to IsAppleGPU(uint32_t) to avoid ambiguous meaning: "IsApple" should mean "is Apple-vended OS" while "IsAppleGPU" should mean "is Apple GPU vendor ID". Bug: angleproject:8229 Change-Id: If4e3fc5ac1b5b8ad416663950a1b2ee912ccad99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4647291 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Steven Noonan <steven@uplinklabs.net> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 61eda436 2023-06-15T14:47:35 Fix TexImage3D validation for 2D arrays below ES3 Currently if we try to define a 2D texture array in ES2, a crash occurs during its validation. Since texture3DOES only adds support to 3D textures, we should make sure the validation only passes if ES3 and above are used. * Added check for 2D texture array usage in validating glTexImage3D(). Bug: angleproject:8213 Change-Id: Ib477d8b6eec89c35d605a1b575bfb5519d19452e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4618955 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi bbcf54bc 2023-06-16T16:02:08 Vulkan: Refactor uniform/block binding duplication code Previously, resource binding assignment was done as such: ``` for each shader stage assign bindings to textures assign bindings to blocks assign bindings to images etc ``` To deduplicate bindings when the same resource was used in multiple stages, a map was used, keyed by the resource's name, to detect when an already visited resource is encountered in a future stage. This was both inefficient and unnecessarily complicated. With this change, resource binding assignment is done as such: ``` for each texture assign one binding to all shader stages for each block assign one binding to all shader stages for each image assign one binding to all shader stages etc ``` The aforementioned map is removed. Because the resource bindings are now changed, the rest of the code (which sets up the pipeline layout, updates descriptor sets, sets dynamic buffer offsets, etc) are all updated to follow the above pattern. As a result, nested loops are avoided and duplicate entries in the variable map are never visited. Bug: angleproject:7220 Change-Id: Iaff7b5f8b2bada8ac5078d21e5c790bf0d27aca7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4622011 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi f1e19872 2023-06-12T14:38:23 Vulkan: Fix read pixels with RGBX Typically, the format used for data uploads and downloads as well as the storage format are consistent. That is unfortunately not the case for GL_RGBX8_ANGLE where data uploads are through 3-byte RGB pixels while downloads are through 4-byte RGBX pixels. This change swaps out RGBX for RGBA on the read pixels path. Test credit of Jason Macnak <natsu@google.com> Bug: b/246008627 Test: atest CtsSkQPTestCases Change-Id: I531ebd8318bf4fe5ac09c623068b790a7e301428 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4608488 Reviewed-by: Jason Macnak <natsu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Roman Lavrov ff110417 2023-04-21T15:16:03 Vulkan: Emulate RGB32 uniform texel buffers when unsupported Applies to: GL_RGB32F, GL_RGB32I, GL_RGB32UI When VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT is specified for these formats by the Vulkan driver, behavior is the same as before. When it is not speficied: previously ANGLE wouldn't enable GL_EXT_texture_buffer unless exposeNonConformantExtensionsAndVersions was enabled; now ANGLE always enables it and does the RGB->RGBA conversion (GPU) under the hood and tracks buffer content updates using the paths added for tracking this for Vertex Arrays. Bug: b/278585075 Bug: angleproject:8128 Change-Id: I4605719bf3f51c5a10c1a35ecae767833dcd45d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4456498 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 2ce6d8df 2023-04-20T17:16:00 TextureVk calls onStateChange when releasing buffer views TextureVk::setBuffer releases buffer views and they don't get initialized unless a dirty bit is set. That works on the first draw call because Texture::Texture() sets DIRTY_BIT_IMPLEMENTATION in constructor, but when called twice mBufferViews remains unitialized causing mBufferViews.getView() misbehavior. Fix this by calling onStateChange when buffer views are released. As mBufferViews is only initialized conditionally for texture buffers, add a bool for tracking whether it is in the initialized state to avoid marking texture as dirty unnecessarily. Note that this isn't handled by signalDirtyStorage() inside Texture::setBufferRange because (in this test case?) there are no observers on Texture so onStateChange called from Texture is a no-op. Texture however observes its TextureVk implementation so onStateChange calls from TextureVk end up setting the dirty bit in Texture::onSubjectStateChange. Bug: b/278585075 Change-Id: I2b83160cdd89a086ed81e8412cd64d0aad930911 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4457147 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Amirali Abdolrashidi dae99340 2023-03-23T14:36:28 Remove uninited pixel check from TexStorageWithPBO Towards the end of the test "TexStorageWithPBO" from Texture2DTest, the color of the pixel outside the red square is checked to confirm that it is black. However, due to that part being uninitialized in the test, its color could be left over from a prior test, causing a failure. * Removed the pixel check for outside the square. * Updated the color check for the square to cover its whole area. Bug: angleproject:4126 Bug: angleproject:5081 Bug: angleproject:5097 Bug: angleproject:5651 Bug: angleproject:8093 Change-Id: I3ceb8cf30456f51a60630f9e258210a8ccae0d95 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4367898 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
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>
Alexey Knyazev 3fed0866 2023-02-22T00:00:00 Implement EXT_texture_mirror_clamp_to_edge Support GL_MIRROR_CLAMP_TO_EDGE_EXT address mode when native support is available. Adjusted validation, sorted switch cases by target enums order. Added new TextureMirrorClampToEdge* end2end tests. Drive-by: fixed texture address computation for integer formats with GL_MIRRORED_REPEAT on D3D11. Fixed: angleproject:7968 Change-Id: Iaf29c8b4b32a7630c2a871f832d171f4bc4e2672 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4289137 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Alexey Knyazev a2efea13 2023-03-01T00:00:00 Add ANGLE_stencil_texturing This extension allows texturing of the stencil component of a packed depth stencil texture on OpenGL ES 3.0 contexts. Trivially exposed on backends that support OpenGL ES 3.1, which requires this feature. Adjusted the tests to check for the new extension string instead of the context version. Bug: angleproject:8051 Change-Id: I4d833acbc72e7374bde91d4c861598a0fdaf9b90 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4295312 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev a1f9b9aa 2023-02-20T00:00:00 Implement more texture border color adjustments D3D11: * Exposed EXT_texture_border_clamp extension string, to ensure that the relevant CTS tests are running. * Updated StateManager11::setSamplerState to adjust the border color based on the texture format. * Refactored ShaderConstants11::updateSamplerMetadata to correctly adjust the border color for integer formats. * Removed unused SamplerMetadata.internalFormatBits D3D9: * Updated Renderer9::setSamplerState to adjust the border color value based on the current texture format. * Added borderColorSrgb feature required for some drivers. GL: * Copy alpha value to green for A and LA legacy formats to workaround driver bugs when lumaWorkaround is not used. Tests: * Added ES 2.0 tests for texture formats that require border color adjustments. Fixed: angleproject:7969 Change-Id: I3d36cce43e76e6d5069a51865152c2250ecbb017 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4291000 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Amirali Abdolrashidi 3a7904e1 2023-01-25T23:56:56 Vulkan: Use VMA suballocation for images There is a maximum limit for device memory object allocation. On some platforms, there can be an error regarding too many object allocations when 4096 device memory handles have been allocated. Suballocation can help mitigate this issue. In this CL, some images will be allocated using VMA API calls, which use suballocation. * Added a new feature (useVmaForImageSuballocation). * Added VMA allocation for ImageHelper, which is used in initMemory(). * Suballocation is used for VMA image allocation. * If enabled, mVmaAllocation will be initialized in the ImageHelper object (instead of mDeviceMemory). * It is currently used for all platforms. * Minor change to the name of an arg in CreateBuffer() declaration. * Added test to make sure we can allocate at least 4096 images on supported platforms (8000 in the test). * Skipped the test "NonZeroBaseEmulatedClear" when run on Linux/Intel if this feature is enabled (due to output color mismatch). * Skipped several tests for capture/replay on Windows. Bug: b/218891184 Change-Id: Ibf80c9c8c485b301da7d23b5ba4bcbb1a8e3194f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4191202 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Kimmo Kinnunen 62d35a60 2023-02-10T13:05:14 Metal Fix norm16 subimage uploads w/ signed types The supported texture format tables would have entries for a signed or unsigned internal format and matching type. The texSubImage variants do not communicate the sized internal format, rather unsized format type. Data parameters are validated based on format, not internal format. For these, the signed variants were missing. Add texture format table entries for signed types that match the format parameters. Add a precautionary validation case so that future such bugs would not pass the control flow forward, into the copying phase. Fixed: angleproject:8014 Change-Id: I5b00cca8672691fdb953f62093d62feaa724db99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4238881 Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Alexey Knyazev db86154e 2023-02-03T00:00:00 Adjust TextureState::isStencilMode Backends that need special setup for sampling stencil data rely on the TextureState::isStencilMode() helper function. Ensure that it returns true only when: * the sampled texture has a combined depth-stencil format and the depth-stencil texture mode is set to stencil, OR * the sampled texture has a stencil-only format. New tests cover sampling of all six depth, stencil, and combined depth-stencil formats with both modes. Bug: angleproject:2373 Change-Id: I2b47dc86aea44de507f9eb8d301a0a6d5211aee4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4218603 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev 17931e23 2023-01-27T00:00:00 Fix stencil and depth/stencil data uploads Multiple changes were made to depth and stencil load functions, removing redundant code and fixing issues. Failures were caused by incorrect assumptions about component locations in combined formats. * D32_FLOAT_S8X24_UINT has the same layout as GL_FLOAT_32_UNSIGNED_INT_24_8_REV * D24_UNORM_S8_UINT has stencil data in its MSBs, while GL_UNSIGNED_INT_24_8 puts it in LSBs. Bugfixes * Added LoadD24S8ToS8D24 that swaps D24 and S8 components * Added LoadS8ToS8X24 for stencil-only uploads on D3D * Replaced LoadD24S8ToD32F with LoadD32ToD32F * Fixed D and S extraction in LoadD24S8ToD32FS8X24 * Fixed stencil load and store in LoadD32FS8X24ToS8D24 and LoadD32FS8X24ToD32FS8X24 * Fixed S8_UINT subresource updates in Vulkan * Fixed D24_UNORM_S8_UINT subresource updates from GL_FLOAT_32_UNSIGNED_INT_24_8_REV data in Vulkan Cleanup * Renamed LoadUNorm16To32F to LoadD16ToD32F * Removed LoadUNorm32To32F, replaced it with LoadD32ToD32F * Renamed LoadR32ToR24G8 to LoadD32ToX8D24 * Renamed LoadD32FS8X24ToD24S8 to LoadD32FS8X24ToS8D24 * Removed unused LoadG8R24ToR24G8 * Removed Metal-specific LoadS8D24S8ToD32FX24S8, made use of the fixed LoadD24S8ToD32FS8X24 instead * Simplifed LoadD24S8ToD32F Added Texture2DTestES3.TexImageWithStencilData. Fixed: chromium:1408004 Fixed: angleproject:5317 Change-Id: I231345353aa4a7cebe46ded8458ac80de2c59e01 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4203427 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Cody Northrop b354667e 2022-12-24T12:21:17 FrameCapture: Fix tracking of glCopyImageSubData When tracking texture updates during glCopyImageSubData, choose an enum supported by PackedEnum when looking up the textureID. Also add a test for a common pattern used by the Unreal Engine that trips up FrameCapture. Test: CopyImageTestES31.CubeMapCopyImageSubData/* Bug: angleproject:7913 Change-Id: I6c0fee69064cc6dc81177093ec9461dd5ccc152a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4126449 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 2debd07d 2022-09-21T11:40:18 Automatically query status of features for tests Now tests can skip based on what features exist, compared to what features are explicitly asked for. For example, a test suite may override-enable a (normally disabled) feature that depends on a hardware capability. With this change, it can be skipped if said hardware capability doesn't exist. As a bonus, tests now correctly skip if the feature is overriden through an environment variable. This change also cleans up VulkanPerformanceCounterTest tests which did the same for a number of specific features. Bug: b/243398683 Change-Id: I84f026e3394eab56fd123e02bee72720c7ed94c6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3909789 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Mohan Maiya a2f00721 2022-06-19T15:17:22 Vulkan: Extend bounding box when pruning updates Add support for extending the bounding box when there are updates that enclose the current bounding box. Bug: angleproject:4691 Bug: angleproject:7389 Test: Texture2DArrayTestES3.TextureArrayPruneSupersededUpdates* Change-Id: Ie7e3cc28f17213361b1be407dbb2d984865fe6bd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3712897 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Yuly Novikov 34332f85 2022-09-13T13:54:14 Fix UninstantiatedParameterizedTestSuite errors on iOS. Some test suites are instantiated only on ES31 or Vulkan, which iOS doesn't support. Bug: angleproject:5417 Change-Id: Iea202934edb3804993dabd38f2629d4992eb2095 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3892013 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Yuly Novikov 8e63c6e8 2022-07-25T15:10:11 Remove suppressions for tests which pass with Intel Mesa 20.0.8 Bug: angleproject:3616, angleproject:3614, angleproject:2782 Change-Id: I220d71593270164f77bda92f533608e431c6c9b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3780159 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Yuly Novikov <ynovikov@chromium.org>
Kyle Piddington c4004751 2022-06-23T14:35:21 Metal: texture allocation failures handled incorrectly When allocating large textures, allocation may fail if textures exceed the Metal memory limit. When a nil texture is returned, we should check texture allocation before assigning it as a backing object ANGLE port of the following bug https://bugs.webkit.org/show_bug.cgi?id=240790 Bug: angleproject:7459 Change-Id: Ib94f42d25df28a31513ab78fc42c6523bfbc5f76 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3722601 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org>
Amirali Abdolrashidi 32c5fd8a 2022-05-13T14:31:03 Reland "Vulkan: Flush texture updates more often" This is a reland of 8bb7c35c2159de2fa9e9a008679c692edd4402a6 * Added a condition to make sure the previous texture is not immutable when performing the optimization. * Fixed the issue where mipmap textures with unequal dimensions were not flushed. * Added related tests. * Added kEnableMutableMipmapTextureUpload, a flag to enable/disable the feature (enabled by default). Original change's description: > Vulkan: Flush texture updates more often > > * Added a pointer to the previous texture in ShareGroupVk so we can > flush the texture updates once we switch to a new texture. > > * We check if mip levels 0 and 1 are conformant in terms of > size, format and number of samples. > > * As a part of size check, we also check depths if the texture > target is either 3D, 2D array, or cube map array. For the former > two, they have to conform to mip scaling similar to width and > height. For the latter, the depth represents layer-faces and does > not change for mipmaps. > > * Added a test to ensure the pointer to the previous texture is > deleted when the corresponding texture is deleted, so the old value > is not accessed by a future mutable texture. > > * Added tests to make sure the mutable texture is uploaded with > the appropriate mip level attributes, and not uploaded in cases of > size/format inconsistencies, incompleteness, and no base level. > > Bug: b/202744914 > Change-Id: I9c2c1af87a8a49e75d3ad25523436b0cd51a7e81 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3606329 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Bug: b/202744914 Change-Id: I2bdbcd0182a57c18c1a18968396251a2e366731b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3646959 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Alexey Knyazev 5897d6f5 2022-07-07T00:00:00 GL: Add emulateCopyTexImage2D workaround Using texImage2D + copyTexSubImage2D seems to be more stable than using copyTexImage2D directly. Added missing HALF_FLOAT fix to the code path that requires target texture initialization. Fixed target texture dimensions when initialization is not required. Fixes Apple GPU crashes in: * CopyTexImageTest.DeleteAfterCopyingToTextures * conformance/textures/misc/texture-copying-and-deletion.html * conformance/textures/misc/texture-copying-feedback-loops.html Bug: angleproject:5038 Bug: angleproject:5360 Bug: chromium:1130703 Change-Id: I5cce087983601e768902f01b3462ec2106e2500a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3749921 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Mohan Maiya 81a69da6 2022-06-30T09:56:54 Vulkan: min/mag filters follow chroma filter value The Vulkan spec states that for those formats lacking support for VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT the min and mag filter must be equal to the sampler YCbCr conversion's chroma filter. Having the min/mag filters follow the chroma filter leads to simpler and more efficient code. Also update getPreferredFilterForYUV function to return existing filter value when preferLinearFilterForYUV feature is disabled. Bug: angleproject:7382 Bug: angleproject:7392 Tests: Texture2DTestES3YUV.TexStorage2DYuvFilterModes* Tests: ImageTestES3.SourceYUVAHBTargetExternalYUVSampleLinearFiltering/ES3_Vulkan Change-Id: I550ef8feede1dc6c3a0d8e32f790113e90ef7a4b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3739582 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Cody Northrop 2a5193f6 2022-06-22T17:46:15 Textures: Allow compressed texture from PBO Apex Legends is using a pixel unpack buffer to populate a compressed 3D texture. We had an explicit check in validation that prevented it, possibly due to emulated formats. Rather than prevent it altogether, check whether the format is emulated and proceed if not. Also add a test that exposes the problem. Test: PBOCompressedTexture3DTest Bug: b/236478448 Bug: angleproject:7464 Change-Id: I90105a396bf0a465c62d67910aad2819ba7f8831 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3719161 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Eddie Hatfield 89e38b57 2022-06-22T15:04:08 Refactor to use ANGLETest vs ANGLETestWithParam Bug: angleproject:6747 Change-Id: I72ad52d0268eae0e1a401f12f3e94cc5efa402f2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3719002 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Mohan Maiya 8a8b9665 2022-06-08T14:54:37 Vulkan: Prune superseded staged updates in a texture Add support for pruning superseded staged updates from a client buffer to the texture. If the staged update count or the cumulative staged updates' size exceeds a threshold we check for superseded updates and prune the list. Bug: angleproject:4691 Bug: angleproject:7389 Test: Texture2DTest.InterleavedSupersedingTextureUpdates* Texture2DTest.ManySupersedingTextureUpdates* Change-Id: I4b84f13fa20004a3dc68baa552a0af656d92c0a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3691092 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Stephen White 6c0d4658 2022-05-27T15:32:42 D3D11: implement stencil texturing. When GL_DEPTH_STENCIL_TEXTURE_MODE is set to GL_STENCIL_INDEX, GL requires the stencil value to be in the R component. However, when sampling a depth24stencil8 texture in D3D11, the stencil ends up in the G component. So in this mode, swizzle the result from G to R. In order to sample stencil, use the appropriate stencil-only format for the SRV: X24_TYPELESS_G8_UINT for d24s8, X32_TYPELESS_G8X24_UINT for d32fs8. This required adding a new field to D3D11 Format. Bug: angleproject:7303 Change-Id: I7cf70efaaf6c833fa0b2497e4080618dfd7103ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3679485 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Stephen White <senorblanco@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Hailin Zhang b7474d0a 2022-04-28T14:44:54 D3D11: Add GL_EXT_texture_buffer support tested: deqp-gles31.exe --deqp-gl-context-type=egl --deqp-case=dEQP-GLES31.functional.texture.texture_buffer.* passed Bug: b/206367167 Change-Id: I31a6f84bd701a737735a6bac2f4eef780c24a979 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3639722 Commit-Queue: Hailin Zhang <hailinzhang@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao 3d430f5f 2022-05-17T11:38:39 Vulkan: Add test for texture buffer and buffer data interaction When glBufferData is called on a buffer that is bound to texture buffer, we may create a new buffer storage. This adds a test to ensure this bufferData optimization does not break texture buffer usage. Bug: angleproject:7283 Change-Id: I8153c6c7b8287b5a4265eec82b1ca70ac66992c0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3652244 Reviewed-by: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang 459c367e 2022-01-21T10:02:33 D3D: Initialize storage after generating mipmap images. When TextureD3D generates mipmaps without a storage present, it initializes all the images and then generates mipmaps on the CPU. Attempt to generate a storage after initializing all the mip images so that the mipmap generation can be done on the GPU. Fix several edge cases where texture storage was not copied back to images when redefining for mipmap generation. This resulted in the newly generated mipmaps not using the correct data. Bug: chromium:1256340 Change-Id: I76122d36385450d973bf00f7d07402a1f975492c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3406643 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Roman Lavrov 03ccd9cc 2022-05-13T16:12:11 Revert "Vulkan: Flush texture updates more often" This reverts commit 8bb7c35c2159de2fa9e9a008679c692edd4402a6. Reason for revert: crashes tests in linux-rel Example: https://ci.chromium.org/ui/p/chromium/builders/try/linux-rel/1012030/overview Also possible flakiness https://anglebug.com/7308 Repro: out/Debug/bin/run_blink_web_tests fast/canvas/OffscreenCanvas-2d-drawImage.html Original change's description: > Vulkan: Flush texture updates more often > > * Added a pointer to the previous texture in ShareGroupVk so we can > flush the texture updates once we switch to a new texture. > > * We check if mip levels 0 and 1 are conformant in terms of > size, format and number of samples. > > * As a part of size check, we also check depths if the texture > target is either 3D, 2D array, or cube map array. For the former > two, they have to conform to mip scaling similar to width and > height. For the latter, the depth represents layer-faces and does > not change for mipmaps. > > * Added a test to ensure the pointer to the previous texture is > deleted when the corresponding texture is deleted, so the old value > is not accessed by a future mutable texture. > > * Added tests to make sure the mutable texture is uploaded with > the appropriate mip level attributes, and not uploaded in cases of > size/format inconsistencies, incompleteness, and no base level. > > Bug: b/202744914 > Change-Id: I9c2c1af87a8a49e75d3ad25523436b0cd51a7e81 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3606329 > Reviewed-by: Charlie Lao <cclao@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Bug: b/202744914 Change-Id: Id51fd4c76d058aa5100ec58ba618098c8f614253 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3645493 Auto-Submit: Roman Lavrov <romanl@google.com> Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: Lingfeng Yang <lfy@google.com>
Amirali Abdolrashidi 8bb7c35c 2022-03-23T19:14:54 Vulkan: Flush texture updates more often * Added a pointer to the previous texture in ShareGroupVk so we can flush the texture updates once we switch to a new texture. * We check if mip levels 0 and 1 are conformant in terms of size, format and number of samples. * As a part of size check, we also check depths if the texture target is either 3D, 2D array, or cube map array. For the former two, they have to conform to mip scaling similar to width and height. For the latter, the depth represents layer-faces and does not change for mipmaps. * Added a test to ensure the pointer to the previous texture is deleted when the corresponding texture is deleted, so the old value is not accessed by a future mutable texture. * Added tests to make sure the mutable texture is uploaded with the appropriate mip level attributes, and not uploaded in cases of size/format inconsistencies, incompleteness, and no base level. Bug: b/202744914 Change-Id: I9c2c1af87a8a49e75d3ad25523436b0cd51a7e81 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3606329 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Stephen White 42789b63 2022-05-11T11:56:43 Use GLTexture in TextureTest for RAII goodness. Change-Id: I2a9fd5ddeacb9f7947a8090748b2e1cbbabb4fe6 Bug: angleproject:7266 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3623862 Commit-Queue: Stephen White <senorblanco@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Stephen White 9ab47074 2022-05-02T11:51:31 D3D11: fix BufferToTexture copy when UNPACK_ROW_LENGTH is set. The BufferToTexture fast path rasterizes a point per pixel when copying buffer to texture, and uses the vertexID to determine the buffer location. However, the math is wrong if UNPACK_ROW_LENGTH is set. The fix is to use UNPACK_ROW_LENGTH (if specified) rather than the width in the Draw() call. Bug: angleproject:5542 Change-Id: If0bbc0d7ae3ecbb2211cfb27263324d23c5ff0af Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3621319 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Stephen White <senorblanco@chromium.org>
Shahbaz Youssefi 797e627e 2022-04-08T22:49:51 Autogenerate list of features as enum The WithX() and WithNoX() helpers are removed and replaced with enable() and disable() member functions that take the name of the feature (as a Feature::X enum constant). This has two benefits: - Adding tests that override a feature no longer requires additional helper functions to be written. - There's no mistaking the feature name. This change doesn't yet fix the main issue in anglebug.com/6435, but does fix the following helpers using an old feature name (so they were ineffective): - WithMetalForcedBufferGPUStorage - WithNoVulkanViewportFlip A follow up would remove the old way of overriding features in tests and replaces them with the new way. Bug: angleproject:6435 Change-Id: Ida02b26ec72bc40d7a8938c76a93815bb903ca05 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3580982 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Cheryl Wei 3a72994e 2022-01-26T13:18:14 Vulkan: Add an end2end test Add this test for re-producing http://anglebug.com/6926, currently it has been skipped,once the bug is fixed,will re-open this test. Bug: angleproject:6926 Change-Id: Idbd2b3b60bdbf2a4100e6f6c89353cbf09e5e36b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3412970 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 2ad5f350 2022-01-25T12:15:16 Vulkan: Fix texture array level redefinition When a level of a texture is redefined, all staged updates to that level should be removed, not the ones specific to the new layers. The bug fixed was that if the texture was redefined to have its number of layers changed, the staged higher-layer-count update to the image was not removed. Bug: chromium:1289383 Change-Id: I9b90025f78af80ab19a280f90b58510716da31d2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3413004 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@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>
Tim Van Patten 2ebdd23b 2021-12-28T10:37:49 Cleanup TextureCubeTestES3.CubeMapPixelUnpackBuffer Clean up TextureCubeTestES3.CubeMapPixelUnpackBuffer by removing the unused shader variable 'uLod'. Bug: b/194140619 Test: TextureCubeTestES3.CubeMapPixelUnpackBuffer Change-Id: I14776b34c5921fc4d4177bdaed205843b27b9e94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3359777 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Tim Van Patten 542f7d80 2021-12-22T19:36:27 Vulkan: Copy buffer data to correct cube map face TextureVk::copyBufferDataToImage() was failing to set region.imageSubresource.baseArrayLayer to the correct cube map face value, causing every glTexSubImage2D()-type call using GL_PIXEL_UNPACK_BUFFER to only copy to the GL_TEXTURE_CUBE_MAP_POSITIVE_X face. In the case of PUBG Mobile, this left all other faces with "random" data, resulting in corrupted reflections on things like water, the airplane, etc. Bug: b/194140619 Test: TextureCubeTestES3.CubeMapPixelUnpackBuffer Change-Id: I93a9219ce098985f9f4b906f8fe2e05850fb8d43 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3354091 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Lingfeng Yang 6d3435fd 2021-12-01T17:08:01 Validate SamplerFormat We weren't validating sampler formats in ProgramExecutable validation. Bug: chromium:1273661 Change-Id: Ida0c67c0c7169ea3f47ceb2d433bee17012a7e5e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3312717 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lingfeng Yang <lfy@google.com>
Lingfeng Yang 929c8ed4 2021-12-01T18:16:14 Vulkan: remove staged updates on storage set Previously we would allow staged updates to bigger versions of a texture to go through even if the texture was redefined via glTexStorage*. Bug: chromium:1262080 Change-Id: I9d861fed68d4a1fdcd0777b97caf729cc74c595e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3312718 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Lingfeng Yang <lfy@google.com>
Jonah Ryan-Davis 2d41e0f7 2021-11-30T16:14:03 Rework compressed texture pixel unpack state handling. Compressed images do not use the pixel unpack parameters. Instead of handling this in Context, move this to formatutils, where it's already handled for the 2D case. Also, update the test to generate an ASAN error if not ignored for the 2D case. Bug: chromium:1267496 Change-Id: Ib93bae00a2b0b75eafd74c267f737da225afd993 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3308825 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@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>
Jonah Ryan-Davis 870f458f 2021-11-22T14:30:52 Ignore the pixel unpack state for compressed textures. From OpenGL ES 3 spec: All pixel storage modes are ignored when decoding a compressed texture image This was causing a bad access when calling compressedTexImage3D with GL_UNPACK_IMAGE_HEIGHT greater than the image height. Bug: chromium:1267496 Change-Id: I9b1f4c645548af64f2695fd23262225a1ad07cd7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3296622 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi adf878f3 2021-11-05T17:16:57 Vulkan: Synchronization tests for read-to-read transitions Bug: angleproject:6663 Change-Id: I89aafa6c197233b75562c0faa1d5331969eeedf9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3265604 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten eb1d2474 2021-10-04T20:23:26 Vulkan: Add R8G8B8_UNORM to vk_format_map.json The map of R8G8B8_UNORM -> VK_FORMAT_R8G8B8_UNORM is missing from vk_format_map.json. This leads to attempting to get format bits for angle::FormatID::NONE / VK_FORMAT_UNDEFINED. This CL adds R8G8B8_UNORM to vk_format_map.json, so devices that support it, like ARM, can use it. This allows those devices to import AHBs created with R8G8B8_UNORM. This CL also adds some additional ASSERT() and UNREACHABLE() calls to catch missing formats sooner. This allows the EGL tests to pass on ARM devices, but the tests are still skipped due to Qualcomm not having the necessary support for optimal tiling. Bug: angleproject:6277 Test: dEQP-EGL.functional.image* Change-Id: I41b7ead97a10ae80be4b6048d36d0d85ad71784f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3204152 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi f3d5dac3 2021-08-23T17:25:15 Vulkan: SPIR-V Gen: Drop dependency to glslang The SPIR-V gen path is now made default. Compilation through glslang is still supported for debugging, and is enabled on the GLSL* end2end tests for smoke testing. On release builds, glslang is not supported. To test with glslang, add the following gn arg (only necessary if dcheck is disabled): angle_enable_spirv_gen_through_glslang = true Then enable the generateSPIRVThroughGlslang feature. This can be done by setting an environment variable: ANGLE_FEATURE_OVERRIDES_ENABLED=generateSPIRVThroughGlslang ./angle_deqp_gles2_tests Binary size saving: - 1.3MB on Linux (SPIR-V gen itself: 240KB) - 730KB on Android (SPIR-V gen itself: 140KB) Perf tests: - LinkProgramBenchmark.Run/vulkan_compile_single_thread * Through glslang: truncated mean: 1287033.36 * Direct SPIR-V Gen: truncated mean: 244495.91 (~80% reduction) - LinkProgramBenchmark.Run/vulkan_compile_multi_thread * Through glslang: truncated mean: 4565894.83 * Direct SPIR-V Gen: truncated mean: 1158164.10 (~75% reduction) Bug: angleproject:4889 Bug: angleproject:6210 Change-Id: I486342702977c8114e90073b97183aba115a8b2d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3115140 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Aditya Kushwah d8471b29 2021-10-02T10:36:33 Fix ASAN bug caused by passing empty label string. This CL will fix the ASAN bug that was caused by passing empty label string to getMultisampledRenderTarget, function of TextureStorage11. Instead, pass mTextureLabel so we can get WebGL labels now. Also to avoid this in future, convert ref mTextureLabel to now store copy. The change in the test reflects the steps to first set the label string and later the label being used to initialize mTextureLabel via texture storage creation. Bug: chromium:1254746 Change-Id: I007bdf1c7a421a2b4b9288aa71fa4368c14cf333 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3201030 Reviewed-by: Rafael Cintron <rafael.cintron@microsoft.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Jamie Madill 44bef8ae 2021-10-08T15:01:37 Remove traces of Feature Level 9_3 support from tests. Bug: angleproject:1284 Bug: angleproject:3042 Change-Id: Ic2f77d315e98c3b15c5fc8b0359168bce00867d4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3213294 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jonah Ryan-Davis 212f4592 2021-09-22T12:02:47 Enable direct-to-metal backend by default We are switching over to Apple's direct-to-metal backend instead of generating SPIRV in the metal backend. This CL enables the direct-to-metal generation by default, but the SPIRV backend is still accessible by overriding the feature directMetalGeneration. This CL comes with a change in test expectations to catch new failures and clean up newly passing tests. Bug: angleproject:6080 Change-Id: I4b10ad93c641b88857079a08fb45d3dc575d71f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3175664 Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Shahbaz Youssefi eb1d5ca5 2021-01-29T15:34:49 Vulkan: Enable sync validation Based on a change by tobine@google.com Bug: angleproject:5290 Change-Id: Ieae1be5a29f0dcb3ea8aaa04e77fc402380a08b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3171432 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Peter Kasting 4f2b2995 2021-09-23T09:50:46 Fix -Wshadow. This still disables the warning for glmark2 instead of fixing it, to avoid needing to upstream a patch. Bug: chromium:794619 Change-Id: Ice602996041d6090c9b09ee81c8ed095c4fa6b2e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3179860 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten 68c0da83 2021-09-15T12:00:08 Vulkan: Inform frontend when new buffer is allocated When a buffer is mapped with GL_MAP_INVALIDATE_BUFFER_BIT while it's currently in use, the Vulkan backend will allocate a new buffer, map it, and return the pointer to the new buffer. This was missing a call to inform the frontend that a new buffer was allocated, causing the old buffer data to be accessed in subsequent draw calls. The fix is to add a onStateChange(angle::SubjectMessage::SubjectGhosted) call when the new buffer is allocated, to inform the frontend. Bug: angleproject:5971 Bug: angleproject:6396 Test: TextureBufferTestES31.MapTextureBufferInvalidateThenWrite Change-Id: I9984d1049ab4d6a2066f4440fc710c9b93ff6ab8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3163244 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Brandon Schade d6afeadd 2021-08-30T14:44:59 Vulkan: Make descriptor set bindings consistent across shader stages Previously if a uniform or uniform block was used in a program's shader, a different descriptor set binding index would be used for each linked shader stage. Now, the bindings chosen for uniforms and blocks of the same name will be identical. This change also updates mActiveImagesMask in ProgramExecutable for separable programs. Bug: angleproject:4512 Tests: KHR-GLES3*.core.geometry_shader.api.max_image_uniforms ProgramPipelineTest31.MaxFragmentShaderStorageBufferObjects ProgramPipelineTest31.MaxFragmentUniformBufferObjects ProgramPipelineTest32.MaxGeometryImageUniforms GeometryShaderTestES32.MaxGeometryImageUniforms Change-Id: I3662d06b4dec284f4c51c6047e6b684b82925e3f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3068381 Commit-Queue: Brandon Schade <b.schade@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Aditya Kushwah f015ae81 2021-08-02T12:47:32 Implement onLabelUpdate method. This change will implement the onLabelUpdate method by calling from every TextureStorage object. Instead of using setDebugName, introduced two new functions, setInternalName and setKHRDebugLabel, which will set the internal name and KHR label respectively that will further be sent to D3D string. Bug: chromium:1164111 Change-Id: I401ca9f6e8a2099a8807f0d7f321efe74269f9f0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3067921 Reviewed-by: Rafael Cintron <rafael.cintron@microsoft.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>