src/libANGLE


Log

Author Commit Date CI Message
Tim Van Patten bd276beb 2021-02-12T10:58:43 Vulkan: Don't wait on unflushed sync objects without a Context The app "Car Parking Multiplayer" issues a ClientWaitSync() command without having already flushed the sync object and without an active context. We should return TIMEOUT immediately rather than attempting to wait on the sync object, since we can't flush it and it'll never be signalled. Bug: angleproject:5613 Bug: angleproject:5656 Test: MultithreadingTest.NoFlushNoContextReturnsTimeout Change-Id: Ieaf675ca9144f9c851c73b9ca399daaf4ed1cd0f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2693375 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Jamie Madill 7e990ef4 2021-02-16T18:15:43 Clean ups to generate_entry_points. Switches to Python 3 support. Made a change to run_code_generation to support this. Affects several generators. Also updates the generator to make a few other small cleanups. Bug: angleproject:5653 Change-Id: I045173c9ca85947c4eac22285701032c09f4c8d0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2699187 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Cody Northrop 51c5137a 2021-01-05T16:58:50 Capture/Replay: Add texture buffer support Test: Fortnite MEC Bug: b/180418810 Bug: angleproject:5658 Change-Id: I2025f0b88f7488a827159029e6d04a4cf4e9a1b8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2611558 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi 7ae8531b 2021-02-17T15:20:07 Vulkan: Fix crash with 0-sized element buffer VertexArray::syncState syncs all dirty bits, including DIRTY_BIT_ELEMENT_ARRAY_BUFFER even for draw calls that don't use this buffer, such as glDrawArrays. If the element buffer is given 0 size, this caused a crash in the Vulkan backend. Bug: chromium:1172577 Change-Id: I02d78c9660c07b896f7403867b648901478251fe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2701831 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 907a3cee 2021-02-17T08:07:45 Vulkan: Add support for EXT_shader_framebuffer_fetch_non_coherent EXT_shader_framebuffer_fetch_non_coherent is implemented using subpass input attachments. The extension will be enabled in a follow up change that adds required changes to the Vulkan translator. Bug: angleproject:5454 Test: FramebufferFetchNonCoherentES31.*Vulkan Change-Id: Ic73c66a476c4a21db5269431166a198841f1dc0c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2598059 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Peng Huang d6e0b0ca 2021-02-17T15:59:52 Remove a debugging code in renderergl_utils.cpp Bug: chromium:1171371 Change-Id: I7cf00edbc337150e40e7afb4f6c5fc88862f0734 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2700332 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Geoff Lang 2cb66715 2021-01-19T12:42:38 EGL: Merge DisplayAndroid into DisplayEGL. These two classes have a lot of duplicated code for no reason. Bug: angleproject:5563 Change-Id: Ia9d8efeb50f3e52ffb1df6a6e462efdb20fd4a9a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2636678 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Peng Huang <penghuang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Tim Van Patten 64b5b3d3 2021-02-12T17:31:58 Vulkan: Further restrict enabling LINE_RASTERIZATION_MODE_BRESENHAM The app "Car Parking Multiplayer" enables GL_SAMPLE_ALPHA_TO_COVERAGE, which leads to a VVL error when LINE_RASTERIZATION_MODE_BRESENHAM is also enabled: VUID-VkGraphicsPipelineCreateInfo-lineRasterizationMode-02766: The Vulkan spec states: If the lineRasterizationMode member of a VkPipelineRasterizationLineStateCreateInfoEXT structure included in the pNext chain of pRasterizationState is VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT or VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT and if rasterization is enabled, then the alphaToCoverageEnable, alphaToOneEnable, and sampleShadingEnable members of pMultisampleState must all be VK_FALSE. This CL adds the additional checking to GraphicsPipelineDesc::initializePipeline() to ensure those conditions are met before setting lineRasterizationMode to VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT. Bug: angleproject:5613 Test: StateChangeTest.AlphaToCoverageEnable Change-Id: Ie2286078f6916c01a19ae6f932321a86619bd4e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2694094 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi 3c28b2a0 2021-02-10T16:49:32 Vulkan: Remove render pass check from setupDraw() ... and move it to handleDirtyGraphicsRenderPass. Bug: angleproject:5528 Change-Id: I416b2fedb1cd924d04fa739aecb65193fd845f6b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2686441 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi e8c0aa81 2021-01-26T23:40:36 Vulkan: Clean up transform feedback extension pause/resume 1. The xfb counter buffer barrier issued was wrong, following a typo in the spec. This barrier is now correctly issued using the usual barrier APIs. 2. A mechanism was added to automatically pause/resume transform feedback when a program pipeline needs to be rebound. This is incorrect as it misses the xfb counter buffer barrier. The render pass is broken instead if transform feedback is active/unpaused and the program pipeline is changed. 3. The transform feedback counter buffers are now disposed of when transform feedback is ended. This avoids an unnecessary barrier that this change would have otherwise incurred (and hence render pass break) in Manhattan which repurposes the same transform feedback object. Bug: angleproject:5528 Change-Id: I1ffe8b4b8975645ba43afd70e9cdbb0765529da5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2651647 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Ian Elliott 60b03e62 2021-02-16T14:31:19 Create getRotatedExtents() and related methods Created: - WindowsSurfaceVk::getRotatedWidth() - WindowsSurfaceVk::getRotatedHeight() - RenderTarget::getRotatedExtents() - ImageHelper::getRotatedExtents() - ImageHelper::getRotatedLevelExtents2D() Note: The FramebufferVk class doesn't use any of these methods Bug: b/175793022 Change-Id: I64395688bfdb172d32853763743fc5f266a6b792 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2686102 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Cody Northrop 741f4039 2021-02-16T17:00:31 Fix spelling in capture owners Bug: None TBR: geofflang@chromium.org Change-Id: I60fd6bc18d8c86087d7640eb1145d575c4008edb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2697986 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Mohan Maiya 2b69462e 2021-02-12T15:55:00 Vulkan: Consolidate image format list initialization code HardwareBufferImageSiblingVkAndroid, RenderbufferVk, SurfaceVk and TextureVk all had similar code to initialize VkImage with VK_KHR_image_format_list extension support. Consolidate all of them into a helper. Bug: angleproject:5520 Change-Id: Ib7ac582a35a26c0da15879e688bcaf0c2a92ea87 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2692641 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Shahbaz Youssefi d7037aa2 2021-02-11T14:35:30 Vulkan: noop glMemoryBarrier(CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT) CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT requires a memory barrier: shader buffer write -> host read. According to the spec, the data is only available after a call to glFinish or wait on sync: > The application must call MemoryBarrier with the > CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT set and then call FenceSync with > SYNC_GPU_COMMANDS_COMPLETE (or Finish). Then the CPU will see the > writes after the sync is complete. When a buffer is written to by the GPU, ANGLE calls onHostVisibleBufferWrite(), which ensures a "memory write -> host read" barrier is issued at the end of the command buffer. Additionally, persistently mapped buffers use VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, so there's no need for a call to vkInvalidateMappedMemoryRanges. As a result, there's nothing necessary in ANGLE to do for this barrier bit. Note that should persistenly mapped buffers start using non-coherent memory, this barrier should imply a call to vkInvalidateMappedMemoryRanges for the persistently mapped buffers. Bug: angleproject:5070 Change-Id: Iaeae019dadfa659a47d2dac41c0c09f1c15e584b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2689380 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 79ae52dd 2021-02-11T14:18:41 Vulkan: Fix missing visibility barrier for host-visible buffer writes See https://chromium-review.googlesource.com/c/angle/angle/+/1661252 for context. This was accidentally broken during the command graph rework. This will eventually be validated by syncval. See https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/2329. Bug: angleproject:5070 Change-Id: Ic16fa900e554d46e54b42fc3fbe0f96d5327fa0f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2689379 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 30622479 2021-02-16T12:33:40 Vulkan: Fix crash with deferred clears and MSRTT The following scenario was mishandled: - MSRTT draw with an unresolve operation (i.e. has two subpasses) - Deferred clear - Flush deferred clear with MSRTT framebuffer not needing unresolve (i.e. has one subpass) Bug: chromium:1178693 Change-Id: If3548e99897d698d61dfafbe9f86193723d06e5a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2697648 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang e153063d 2021-02-16T18:34:25 Add timvp to ANGLE, vulkan and capture owners. Bug: None Change-Id: Ic23994efa3f4184c471eb21e7f3bb039f6b45057 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2697947 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Peng Huang 9c450bee 2021-02-12T14:23:42 Use the default build target vulkan_memory_allocator Bug: chromium:1170339 Change-Id: I00c868e205a16a889e193383c35b2ed42d8a61ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2693028 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi ca6573eb 2021-02-13T21:21:26 Vulkan: Fix dirty bit bug when closing RP in setupDraw() Bug: angleproject:5644 Change-Id: I2e1fa8c4db8eba1beb74c83dcb24cbe2e70ddca6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2694076 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 031dd5c5 2021-02-11T14:56:43 Vulkan: Add fast path for pack buffer copies When vkCmdCopyImageToBuffer is possible, it is used to implement glReadPixels with PBO instead of a CPU readback. A few tests are added to verify synchronization between pack/unpack and compute shader writes. Bug: angleproject:5070 Change-Id: Ia5da0feb31348f6b52d164b973ff95e2a0510582 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2691466 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 2b15062b 2021-02-11T12:52:39 Allow more formats as texture attachments in GLES 1 This change allows all formats in the GLES 1.1 spec, table 3.4 to be used as a texture attachment. Also normalize values passed into glColorPointer if the format is of type GL_UNSIGNED_BYTE. These changes are needed for the android app, Kick the Buddy to render correctly. Bug: angleproject:5599 Tests: *DrawTextureTest.ColorArrayDifferentTypes* *FramebufferObjectTest.TextureObjectDifferentFormats* Change-Id: Ie9d27fc24d94106651262cf9b2080dd3f05af1c5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2690920 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 19e4cf86 2021-02-09T21:49:42 Capture/Replay: Some fixes for capturing WebGL Bug: angleproject:5635 Change-Id: I756471fbad34660c494fb7f9ba1144accd5c08b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2686119 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Mohan Maiya 12990d73 2021-02-11T11:37:03 GetBitSet now uses BitSetArray instead of IterableBitSet Remove the now unused IterableBitSet class. Bug: angleproject:3877 Change-Id: I161e5d062c8183e30a7eb9040f3018116fe6e69e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2683494 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten baf64903 2021-02-03T14:02:55 Allow small compressed mip level copies Update ValidateCopyImageSubDataBase() to take into consideration if the entire mip level is being written, even if the size of the mip level is smaller than the compressed block size. This also uncovered a bug in ImageHelper::initializeNonZeroMemory() where the image extents are not at least as large as the compressed format block size: VUID-vkCmdCopyBufferToImage-imageExtent-00207 This CL adds isAllocateNonZeroMemoryEnabled() to allow skipping the test when that feature is enabled while that bug is chased. Bug: angleproject:5592 Bug: angleproject:5634 Bug: angleproject:5643 Test: Texture2DTestES3.CopyCompressedImageMipMaps Change-Id: I0381e0d3490fb148604b61dc3bae8f96ba8b5f8e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2673069 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tim Van Patten a9de5d99 2021-02-04T20:44:15 Vulkan: setAllDefaultUniformsDirty after createPipelineLayout The default uniform descriptor set is reset while recreating the pipeline layout during handling of immutable samplers and then is never re-allocated and bound before the next draw. The call stack to allocate the program uniforms descriptor set: ProgramExecutableVk::allocUniformAndXfbDescriptorSet ProgramVk::updateUniforms ContextVk::setupDraw ContextVk::drawArrays Context::drawArrays Unfortunately, this occurs before the pipeline layout is reset (and the descriptor sets are reset) due to the presence of an immutable sampler: ProgramExecutableVk::reset <<---- mDescriptorSets.fill(VK_NULL_HANDLE); ProgramExecutableVk::createPipelineLayout ContextVk::updateActiveTextures ContextVk::invalidateCurrentTextures ContextVk::syncState Context::syncDirtyBits Context::prepareForDraw Context::drawArrays This CL calls setAllDefaultUniformsDirty() for the Program/PPO to ensure the default uniforms descriptor sets are re-allocated and re-bound before the next draw command. Bug: b/178424566 Bug: angleproject:5624 Test: CtsCameraTestCases Change-Id: If54a9f2cc09809a5103bc3eac641c77f56362229 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2677385 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Peng Huang 46203e32 2021-02-10T18:41:06 Workaround context lost for Adreno 42x and 3xx Bug: chromium:1171371 Change-Id: I8c2e13f3f35bf1f780526ad1d9d483226ce5ea34 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2688901 Commit-Queue: Peng Huang <penghuang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev 1094d324 2021-02-12T03:14:38 GL: Add allow_etc_formats workaround Enable ETC2/EAC formats on newer Intel GPUs. Bug: angleproject:1552 Change-Id: I240b07d6d81d48e1e03dfcd56aad6fa9f1d7817f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2690952 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 8b624c6d 2021-02-05T15:33:52 Use constexpr initializer list for bitsets Allows setting/resetting multiple bits to be coalesced into one operation. Bug: angleproject:5528 Change-Id: Ibf2dff8c81441a75c268d95066d23da1b2a3c810 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2678885 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi e281fbb0 2021-02-11T15:37:43 Revert "GL: Cache the results of glGetString" This reverts commit 27906e9c9f8a6767fb8af22d9f80264d8672243a. Reason for revert: Causes failures in mac_optional_gpu_tests_rel Original change's description: > GL: Cache the results of glGetString > > To reduce the amount of queries to the driver, we can cache the > results of glGetString. On Mac, we need to invalidate this cache > on GPU switch. > > Bug: chromium:1173672 > Change-Id: I039172068aec35034a87881a8804f52c080ce4ce > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2676882 > Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> TBR=geofflang@chromium.org,jonahr@google.com,jmadill@chromium.org Change-Id: I5799c5d287dd01b946446bd66d4c89aef6756d3a Bug: chromium:1173672 Bug: angleproject:5639 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2690145 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jonah Ryan-Davis 5af5808b 2021-02-10T13:06:36 GL: Do not support ETC1 textures on Desktop GL As pointed out in WebGL issue 3014, ANGLE has been exposing ETC1 texture support on desktop GL when GL_ARB_ES3_compatibility or GL 4.3+ is available. However, it is very likely that none of these platforms actually have hardware support for this format, and are only supporting it for compatiblity with ES3. We shouldn't expose this so that desktop clients can use a better format instead. Bug: chromium:1048244 Change-Id: I53837a05719d0ca3ff390b5b45b61a1f9c72a535 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2687466 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Le Hoang Quyen 807d1ad7 2021-02-10T23:30:56 Metal: fix incorrect default viewport size with contentsScale>1 The correct metal layer's drawable size should be calculated after mMetalLayer.get().contentsScale is set during initialization to allow initial viewport to be computed properly on front-end side. Bug: angleproject:2634 Change-Id: If278f40c0b6800bbe12fb5ea94986f728381bc00 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2687300 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 45a493ea 2021-02-05T13:48:48 Vulkan: Use a dirty bit to start the render pass Some dirty bits need to run before the render pass starts. An upcoming change for example needs to break the render pass when the program pipeline is changed while transform feedback is active. Another upcoming change may need to do the same based on a preceding glMemoryBarrier. This change adds a new dirty bit to start the render pass after some dirty bits have already been processed. Bug: angleproject:5528 Change-Id: I993c9efefed4c8fee268b218a8dd66a582d4e7cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2678863 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Tim Van Patten dccec125 2021-02-08T16:21:30 Vulkan: Clear mCurrentGraphicsPipeline after createPipelineLayout() Set mCurrentGraphicsPipeline = nullptr when the pipeline layout is recreated if immutable samplers are used to prevent a use-after-free. For a fuller discussion on why this is necessary, see: Vulkan: clear mCurrentGraphicsPipeline during invalidate | https://chromium-review.googlesource.com/c/angle/angle/+/2647746 Bug: b/178424566 Bug: angleproject:5624 Change-Id: I70679bda85cd587dbd8893a4576ee5d33aee2b70 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2683041 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang 393c44f1 2021-02-01T15:45:24 EGL: Trim requested config parameters to EGL. ANGLE requests a config with several uneccessary parameters. I suspect these parameters are causing issues in the wild where eglChooseConfig fails. Try requesting ES3 then fall back to ES2 configs. Skip config caveats, floating point configs and multisample configs, we provided the default parameters. The resulting config is very similiar to the one Chrome requests in gl_surface_egl.cc Bug: chromium:1173161 Change-Id: Ifa78ff8081e3d86e823036981e1e2b5f8f751fed Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2665888 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Peng Huang <penghuang@chromium.org>
Peng Huang 0e8f7727 2021-02-10T15:03:10 Fix crash in gl::Context::unMakeCurrent() gl::Context's ctor may need to create a native EGL context and it can fail. If it fails, the context->mImplementation will be nullptr, and it will cause crash elsewhere. Fix the problem by checking it after create a gl::Context instance. Bug: chromium:1171371 Change-Id: Ic57f088dcbf9716b85fee92bf54d557eb94642d0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2686439 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Jamie Madill 6fc10389 2021-02-10T11:20:16 Move Frame Capture to capture/ folder. This will make it easier to trigger the trace tests when these files are modified. Bug: angleproject:5530 Change-Id: I5f0c450595b380cd91b20c1477dc1845bee35dd9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2686120 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jonah Ryan-Davis 27906e9c 2021-02-04T16:54:56 GL: Cache the results of glGetString To reduce the amount of queries to the driver, we can cache the results of glGetString. On Mac, we need to invalidate this cache on GPU switch. Bug: chromium:1173672 Change-Id: I039172068aec35034a87881a8804f52c080ce4ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2676882 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill a8a2a71b 2021-02-01T17:18:18 Vulkan: Support y-flip with no driver support. We can reuse the surface rotation matrix code to do the y-flip. This requires the SPIR-V transformation support. Because not all rotations are encoded into the table we can only support rotation with the driver support for y-flip (currently). Includes some very minimal regression testing. This work is targeted towards supporting vk-portability implementations which are not as up-to-date with Vulkan features. Bug: angleproject:5596 Change-Id: I270fa1efc03267551d28df33ddac9972e1343d60 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2665892 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 80308e20 2021-02-08T16:16:36 Vulkan: Match min/magFilter to chromaFilter VkSamplerCreateInfo.magFilter and minFilter must match VkSamplerYcbcrConversionCreateInfo.chromaFilter. VkSamplerYcbcrConversionCreateInfo.chromaFilter is currently hard-coded to VK_FILTER_NEAREST in HardwareBufferImageSiblingVkAndroid(), so force magFilter and minFilter to VK_FILTER_NEAREST in SamplerDesc::init() if an externalFormat is being used. Bug: b/178424566 Change-Id: Ia1f7fc21e3faa4e57f837ed3ae70608134150aea Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2683038 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi bb062070 2021-02-09T15:30:04 Vulkan: Fix updates to element buffer If glBufferSubData results in a new vk::BufferHelper allocation, VertexArrayVk::mCurrentElementArrayBuffer needs to be updated. VertexArrayVk::syncState was working under the assumption that DIRTY_BIT_ELEMENT_ARRAY_BUFFER_DATA cannot result in a vk::BufferHelper pointer change. This assumption was broken in https://chromium-review.googlesource.com/c/angle/angle/+/2204655. Bug: b/178231226 Change-Id: I969549c5ffec3456bdc08ac3e03a0fa0e7b4593f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2685439 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten c3887991 2021-02-03T13:52:32 Capture/Replay Don't capture invalid commands Special Forces Group 2 issues invalid OpenGL ES commands, which are currently captured by ANGLE's frame capture. These invalid commands generate errors on both ANGLE and the native driver, causing the test to be marked as "failed". This CL updates FrameCapture::captureCall() to not capture invalid commands, which prevents replay errors. However, the other work related to the call is still performed, including: - maybeOverrideEntryPoint() - maybeCapturePreCallUpdates() - maybeCapturePostCallUpdates() This work is necessary, otherwise calls that update necessary members like FrameCapture::mClientArraySizes may be missed, causing leading to compilation failures related to missing symbols. For example, mClientArraySizes is updated via the following call stack: captureClientArraySnapshot() maybeCaptureDrawArraysClientData() maybeCapturePreCallUpdates() It's necessary for mClientArraySizes to contain non-zero values, so that the variable gClientArrays[] is output by WriteCppReplayIndexFiles(). Otherwise a compilation error will occur when it's referenced by a glVertexAttribPointer() call in the capture. Bug: angleproject:5592 Change-Id: I625a074e035eb75267d8384dc61ce6de1717af91 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2673068 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Mohan Maiya f6784006 2021-02-08T16:39:04 Modify data type of ActiveTextureMask and ImageUnitMask ActiveTextureMask and ImageUnitMask need more than 64bits. We can now use the BitSetArray datatype and avoid the perf penalty of using std::bitset Bug: angleproject:3877 Tests: angle_perftests.exe --gtest_filter=TexturesBenchmark* Change-Id: Ic82e09d1aa2c1904d06ad48ba6200f35896665ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2664734 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya f1cbcaba 2021-02-07T13:37:49 Use const reference when possible When retrieving BitSet masks return a const reference of the mask to avoid invoking the copy-constructor. Bug: angleproject:3877 Change-Id: I9f724a4864f3db17aa6f1ab74b81053c65313764 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2681767 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Stephen White ad60c22d 2021-02-09T13:22:09 Add an option to use "metal" as ANGLE_DEFAULT_PLATFORM. Bug: angleproject:5632 Change-Id: Id470993a01609ace851372b1bbe01fee8cde274b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2684635 Commit-Queue: Stephen White <senorblanco@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Mohan Maiya 54242b8f 2021-02-04T12:20:57 Vulkan: Leverage ExtendedDirtyBitType Expand ExtendedDirtyBitType to include bit for clip distance, mipmap generation hint and shader derivative hint. Handle these dirty bits in ContextVk::syncState Bug: angleproject:5611 Change-Id: If8d1646334e737f81ac72cdddb8fe3ba613b4b94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2676173 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jonah Ryan-Davis 4968f6f2 2021-02-04T16:40:36 Move getRendererDescription from ContextImpl to DisplayImpl The other backend description strings are in DisplayImpl. This will help with caching the result of glGetString in the GL backend. Also Update the getters to not be const in order to allow caching. Bug: chromium:1173672 Change-Id: I43df35688762b23429f47f169c04482cf4cd089a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2676881 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Jonah Ryan-Davis e174c358 2021-02-04T15:14:10 GL: Consolidate glGetString calls First step for cacheing the result of glGetString calls is mostly cleanup. Bug: chromium:1173672 Change-Id: I47281a09b9bd5859655d16376977a6eabcfbb3c4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2676203 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Doug Horn 580961fb 2021-02-02T10:27:48 Micro-optimizations for setUniform* This CL improves the setUniform* call for the case where the niform component size is 4. In that case, we can issue a single memcpy. This reduces the average wall time of setUniform4fv in our test app by ~20%. Test: Run the dEQP shader tests. Bug: b/179160884 Change-Id: I9352f6188bc87449719aac522d1a2323adf7fca5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2667592 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Doug Horn <doughorn@google.com>
Ian Elliott ce540d8c 2021-02-01T17:38:10 Create MSAA-swapchain windows' VkImages differently The actual VkImage needs to have rotated extents, but the ImageHelper needs to have non-rotated extents in order for the rest of ANGLE's pre-rotation to work. Bug: b/175793022 Change-Id: I6fa25ab8c636886787ac50b194e566111308f30b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2666514 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Jamie Madill df48c027 2021-02-02T13:34:29 Vulkan: Don't request aliased FB attachments. This produces undefined pixel values in GL. We can also return UNSUPPORTED if required and still be conformant. This fixes an assert in the gfx-rs portability implementation. Bug: angleproject:5601 Change-Id: Ifb84ad9b5e2365360a81cddba766b0bea81f2d51 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2668311 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexis Hetu 18a5e7a6 2021-02-04T11:19:21 Enable packing extensions for the Vulkan backend The following extensions are ES2 extensions which become core in ES3: - EXT_unpack_subimage - NV_pack_subimage Since the Vulkan backend already fully supports ES3, it should be ok to enable these for ES2 contexts. This fixes all YUV related viz_unittests failures when using SwANGLE with the passthrough command decoder. Bug: chromium:1060139 Change-Id: I24ffd7a58f576799b93fe91e6be4032ca3175eda Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2676201 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Alexis Hétu <sugoi@chromium.org>
Tim Van Patten 54367a3e 2021-02-02T19:31:33 Capture/Replay: Support glCopyImageSubData with compressed formats Special Forces Group 2 uses glCopyImageSubData() to copy compressed texture data, which requires special handling for ANGLE's frame capture since compressed texture data can't be read back. To support this, when glCopyImageSubData() is called with textures using compressed formats, a new mCachedTextureLevelData entry will be created for the destination texture which is a copy of the source texture data. Note that this implementation only supports copying the full level data. http://anglebug.com/5604 will track adding support for partial level copies if an app requires that in the future. Bug: angleproject:5592 Bug: angleproject:5604 Change-Id: Ibce13f91f838fd691269c796fbeb5b9c6133c6aa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2669955 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Mohan Maiya 89f50584 2021-02-03T08:51:04 Vulkan: Add ExtendedDirtyBitType bitset ExtendedDirtyBitType qualifies DIRTY_BIT_EXTENDED dirtybit. Clip control code path can now set the appropriate ExtendedDirtyBitType when there is a change in state. Also remove the ClipSpaceOrigin member in the Vulkan backend that cached front-end state. Bug: angleproject:5471 Tests: dEQP-GLES2.functional.clip_control.* Change-Id: I8dbb509ef940e7905439d32483fd67a8fc171a6e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2673062 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Brandon Schade 6cc845bb 2020-12-07T18:14:50 Vulkan: Add support for EXT_blend_func_extended This implementation utilizes vulkan's dualSrcBlend feature. Expose this extension if the underlying vulkan backend allows the use of this feature. Test: angle_end2end_tests --gtest_filter=EXTBlendFuncExtendedDrawTest* Bug: angleproject:5074 Change-Id: I7d2f611df89d65e5cac35158cb5f41a0ebd58aae Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2593151 Commit-Queue: Brandon Schade <b.schade@samsung.com> Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amy Liu 4a09df13 2021-02-02T17:52:56 Vulkan:Fix wrong outputCount of emulated RGB copies. The output count of shaderParams equals componentCount divided by Ed. To avoid losing the last data,replace division with UnsignedCeilDivide function. Bug: angleproject:5598 Change-Id: I079d72f4eefa3d6b0f5d80ada25829fea673410c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2666869 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 7e81056a 2021-02-01T11:16:14 Vulkan: Support integer type incomplete texture Support both signed and unsigned integer type incomplete textures. Bug: angleproject:5502 Bug: angleproject:4432 Tests: IncompleteTextureTestES3.*IntegerType* dEQP.KHR_GLES31/core_sample_variables_mask_rgba8*i_* Change-Id: Ic8c972aac0ca8589b26333b66dd0cc5fb5134043 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2613245 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kenneth Russell 572afd90 2021-01-29T22:45:29 Disable SH_SCALARIZE_VEC_AND_MAT_CONSTRUCTOR_ARGS workaround. It causes incorrect compilation of some shaders. The original graphics driver bugs that motivated enabling it have been fixed, at least on one of the platforms (macOS). Tested with new WebGL conformance test in https://github.com/KhronosGroup/WebGL/pull/3214 . Bug: chromium:1165751 Change-Id: Iee9747769ca918aab143592d6cf158ce02a75ee0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2661024 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 4a426e1f 2021-02-01T12:10:46 Vulkan: Add missing variable inits to ContextVk. This was preventing testing with the viewport flip disabled. Bug: angleproject:5596 Change-Id: I5cc39eb2e1b431625f2f1498ab73828961af42ee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2664249 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten 0d175f30 2021-01-20T16:34:40 Tests: Add eFootball PES 2021 trace Test: angle_perftests --gtest_filter=TracePerfTest.Run/*efootball_pes_2021* Bug: angleproject:5564 Bug: angleproject:5517 Change-Id: I9738876b6a6c365984cecce01f2f09e0260b41cc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2656989 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi b15de455 2021-01-27T13:58:42 Remove extension check in validation of ES3.2 entry points Bug: angleproject:3582 Change-Id: I563c6d77b825afd44809db0d08dc4842a5f93b6a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653914 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jonah Ryan-Davis 0be050a4 2020-09-23T15:12:56 Pass GL_VERSION info through ANGLE's GL_RENDERER string Chrome needs ANGLE to pass through the underlying driver vendor and version, which cannot always be determined by the SystemInfo library. This is done by construction GL_RENDERER in the frontend through combining GL_VENDOR, GL_RENDERER, and GL_VERSION from the backends. Example changes are in the doc: https://docs.google.com/document/d/1p0dvrLlu8NKhO-RCU5gqlQ_LvcQj-ZqhvfwSk1n3Sz8/edit?usp=sharing Bug: chromium:1126526 Bug: chromium:1131248 Bug: chromium:1134669 Bug: chromium:1169861 Change-Id: Ia618ebcd7f3caaeb376b4b6a03446732efdaeecb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2427383 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 61f60161 2021-01-27T13:57:13 Vulkan: Set missing geometry/tessellation limits Bug: angleproject:5557 Bug: angleproject:5579 Change-Id: Idb8ebc0c3beee8f273d0df3b4e0d84722a8590b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653912 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Peng Huang c6a8bc4a 2021-01-30T14:58:22 Fix a crash in DynamicBuffer::~DynamicBuffer() The crash is because mBufferFreeList is not moved from the rhs value for DynamicBuffer's move constructor. Bug: chromium:1170339 Change-Id: I7d41b775ab56af8fa9412369d5a4008f59da3053 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2661615 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi eae262e7 2021-01-27T13:56:49 Vulkan: Fix image layout barriers for tessellation shaders Also fixes a bug where invalid stages may be specified for example if AllGraphicsReadOnly or DepthStencilReadOnly layouts are used and geometry or tessellation shaders are not supported by the implementation. Bug: angleproject:5557 Change-Id: Ia25a6aec8138c67701c63da65783263d8a7bda27 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653911 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi 6d86a0fe 2021-01-29T11:08:04 Fix mActiveImageShaderBits not updated in PPO's executable Allows the backend to rely on this bitset always being valid, instead of working around the bug. Bug: angleproject:5587 Change-Id: I25e1304c0e5e34b5fc1677a819315574603ed034 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2658885 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Cody Northrop d5ca645e 2021-01-29T13:29:49 Capture/Replay: Set uniform buffer offset alignment During capture, we need to set a common uniform buffer offset alignment so the trace will be more portable. The offset used by the trace needs to be divisible by the device's actual value for GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT. Empirically I've seen the following values supported by devices: ARM (16), Intel (32), Qualcomm (128), Nvidia (256) Test: Manhattan 3.1 MEC Bug: angleproject:5589 Change-Id: I071b6ae7be4c827eb8df4a8b39db901226d0f00b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2659849 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Mohan Maiya 37a0dced 2021-01-28T17:52:05 Vulkan: Disable clip space transform based on EXT_clip_control When depth is set to "ZERO_TO_ONE_EXT" using EXT_clip_control API, don't transform the z position in shader since it now matches Vulkan's depth range. Toggle transformPositionToVulkanClipSpace accordingly. Bug: angleproject:5471 Tests: dEQP-GLES2.functional.clip_control.depth_mode_zero_to_one Change-Id: I7e715cb3c98cecf5aaa5cdc3822a3a83bae9c720 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2615864 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Peng Huang a5ab7974 2021-01-28T12:32:10 Turn on vulkan backend for android ndk level < 26 Fixes two issue for build Vulkan backend for android ndk level < 26, * Disable Vulkan validation layers for android ndk level < 26 * Share vulkan memory allocator implementation with chrome to avoid duplicated symbols link errors. * Only run vulkan backend test with Android P or newer Note: This change will break android-binary-size try bot, we need to update expected_static_initializer_count to 4 at [1] while rolling this change into chromium. [1] https://source.chromium.org/chromium/chromium/src/+/master:chrome/android/static_initializers.gni;l=19?q=expected_static_initializer_count&ss=chromium%2Fchromium%2Fsrc Bug: chromium:1170339 Change-Id: Idb9238d8f339724c4d8f9ac136305b95ff06fae4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2656980 Commit-Queue: Peng Huang <penghuang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Kenneth Russell b4fd4628 2021-01-27T15:56:58 Revise WebGL's shaderSource validation. Per discussion in the WebGL working group, shaderSource no longer generates INVALID_VALUE for sources containing characters outside the ESSL character set. Compilation and/or linking is still specified to fail when illegal constructs are used. With this change, https://github.com/KhronosGroup/WebGL/pull/3206 passes with the passthrough command decoder. Revise WebGL compatibility tests to follow the new rules. Bug: chromium:1171506 Change-Id: Id132e0b64fa94b373f2732acf2a7071f38f0d4ff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2654264 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Mohan Maiya 80a4223e 2021-01-28T17:51:31 Vulkan: Handle changes to viewport when clip origin is modified The expected view port is different from current viewport translation when the clip origin is the upper left. So now, it has four different view port translations based on clip origin and y-flip of framebuffer. - add query and state management for EXT_clip_control - add dirty bit for clip control - change viewport, scissor and cull face when clip origin changes Bug: angleproject:5471 Tests: dEQP-GLES2.functional.clip_control.* Change-Id: I78dc752c3287b09f25496034e0d0d2724138010c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2615863 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 6cfbe252 2021-01-27T13:42:55 Fix geometry/tessellation checks to account for ES3.2 Bug: angleproject:5557 Bug: angleproject:5579 Change-Id: Iae54940cefb5ba516dc173413b35b646e1968ba6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653906 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Mohan Maiya 74f7be6d 2021-01-28T14:04:47 Vulkan: Rectify typo in EXT_texture_format_sRGB_override The extension string for EXT_texture_format_sRGB_override was missing the "format" substring. Bug: angleproject:4561 Change-Id: I19788191b589b64639b036d2bb54508077fca7e8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2658355 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 2dae09e8 2021-01-27T13:54:25 Fix draw mode validation of PPOs with geometry/tessellation The properties related to geometry and tessellation shaders were not being copied from the Program's exectuble to the Program Pipeline's. Bug: angleproject:5557 Bug: angleproject:5579 Change-Id: Ied6ff82c7e30f24504c9a3f5c008181b179b07ff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653909 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi ddba70da 2021-01-27T13:52:12 Fix xfb mode validation with geometry/tessellation In the presence of geometry and/or tessellation shaders, transform feedback mode must match what these shaders produce, instead of what's passed to glDrawArrays. Bug: angleproject:5557 Bug: angleproject:5579 Change-Id: I6a21621e66b31553ed6a3a50c3aebf60e1ac7be5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653908 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Peng Huang 122a1cc5 2021-01-26T20:06:24 Fix several vulkan backend problem on Android. * Load AHardwarebuffer API dynamically, so vulkan backend can be built with old NDK, but can work with newer android releases. * Do not link with libvulkan on android. * Expose EGL_ANDROID_get_native_client_buffer extension with vulkan backend. Bug: chromium:1170339 Change-Id: Idf7f6867a86ae40ba6d57a86e419c610ba404ba8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653506 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Shahbaz Youssefi 2baa6288 2021-01-27T13:55:36 Fix validation of glCreateShaderProgramv for geometry/tessellation Bug: angleproject:5557 Bug: angleproject:5579 Change-Id: I581d7485d0e8771f3f23dea4255139d56052bee9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653910 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Peng Huang 53105997 2021-01-28T07:42:15 Initialize some missing vulkan function pointers Those methods are used by VMA. However VMA can get those methods by itself, if null function pointers are provided for creating the VMA. But it will cause problem, when ANGLE & Chromium are sharing one VMA implementation, since the VMA implementation in chromium will be built with VMA_STATIC_VULKAN_FUNCTIONS=0 & VMA_DYNAMIC_VULKAN_FUNCTIONS=0. Bug: chromium:1170339 Change-Id: I5bf435698e4e361bfa7a6afce84390ccc4355b53 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2655795 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi a408ce83 2021-01-27T13:48:27 Fix geometry shader draw mode validation The draw mode (as passed to glDrawArrays) was being compared with the transform feedback mode in the presence of geometry shaders, but the two are completely unrelated. Bug: angleproject:5579 Change-Id: I03bff97f79fe8d8a4354a6ea3abfed58c1e600eb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653907 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Tim Van Patten 5006a573 2021-01-26T17:15:10 Capture/Replay: Capture glUniformBlockBinding() eFootball PES 2021 uses glBindBufferRange(), which requires glUniformBlockBinding() to create the pairing of uniform block indexes to buffer bindings. The uniform buffer indexes that are assigned when each program is linked can differ between drivers, so the glUniformBlockBinding() calls need to be recorded to get the correct index values for the glBindBufferRange() calls. Bug: angleproject:5564 Change-Id: I909e05d5b1cc50e592b887bd130aa80cdb1bb40f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2650993 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 351e6e8c 2021-01-26T17:08:59 Add 'UniformBlockIndex' struct Add the new structure 'UniformBlockIndex'. This is in preparation for capturing glUniformBlockBinding() calls, which requires the (new) corresponding ParamType::TUniformBlockIndex. Bug: angleproject:5564 Change-Id: I88613dd96d058659dd253e8088fab49670c32316 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2651287 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Geoff Lang ea0f3496 2021-01-25T12:47:27 GL: Update VertexArrayGL to not store per-context state. Move StateManagerGL and FunctionsGL members out of VertexArrayGL and query them directly from the context in methods. Bug: angleproject:5577, chromium:1167179 Change-Id: I376f3eff15fbd9855c5956737064f56d54acbceb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2647868 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi de53e308 2021-01-26T12:44:04 Metal: Fix XFB failures on ARM. Metal back-end needs to generate 2 versions of XFB shader: - one version without XFB emulation code for rasterized draw. - one version with XFB emulation code for draws with rasterization disabled. Based on a change by le.hoang.q@gmail.com Bug: chromium:1167763 Change-Id: I2858859e15b18701fadff09092bb08778c4a7e64 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2648636 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Le Hoang Quyen <le.hoang.q@gmail.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 4921e457 2021-01-22T22:36:13 Vulkan: Avoid unnecessary pipeline rebinds Bug: angleproject:5528 Change-Id: I5502498fa5d6767f55635fe9fff949d7fd644f4f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2645640 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jonah Ryan-Davis f9afaaee 2021-01-25T13:46:22 GL: Remove in-thread link status check from parallel link path. A call to checkLinkStatus was wrongly placed in the nativeParallelCompile path, which ended up blocking on shader linking, rendering parallel compilation useless. Bug: chromium:1169477 Bug: chromium:1099763 Change-Id: Id2c5fe31e651abac76207c93919fd83d79f30556 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2647987 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Jamie Madill 9bbcd86a 2021-01-25T10:52:35 Capture/Replay: Fix instanced array client data. Enables a bunch of self-tests. Bug: angleproject:5530 Change-Id: Idd14574ba0f3d44124e153ccb32fec7318baf217 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2647745 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 6689a54d 2021-01-21T00:36:14 Vulkan: autogen for SPIR-V instruction build and parse Handwritten SPIR-V instruction parse and build code is replaced with autogenerated functions based on the SPIR-V grammar. Bug: angleproject:4889 Change-Id: I09d724fd944e79c03fe4eadca3ee3e3ef0b49872 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2644721 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Amy Liu cc5083e0 2021-01-15T10:29:36 Compression of the data from vkGetPipelineCacheData. The size of pipelineCacheData sometimes is greater than 64k which cannot be saved because of the Android blob cache limitation (single cache data size should be < 64k). Implement the compression to store more cache data. Bug: angleproject:4722 Change-Id: I435b086d70d0e6378f1141464ae2bafbe076f193 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2631511 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi c51c3548 2021-01-19T14:15:54 Vulkan: Unconditionally expose OES_shader_io_blocks All relevant tests pass, so no longer conditioned to exposeNonConformantExtensionsAndVersions. Bug: angleproject:3580 Change-Id: I9b398bd962831fabf0ec39ad9aad3b200717d087 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2636687 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill e60ce3da 2021-01-21T16:42:17 Capture/Replay: Allow testing with multiple versions. This embeds the context version and device type info into the replay. The self-tests then can create the correct display and context types. This fixes testing against SwiftShader which is necessary for the bots. Bug: angleproject:4759 Change-Id: If9da6bfdc1c2b315ccd7e453872fc84063277054 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2643363 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Steven An ff5f715e 2021-01-19T16:46:04 Properly fail upon program binary version mismatch Return angle::Result::Stop instead of Incomplete when Program::deserialize detects version mismatch. This causes the caller, Program::loadBinary, to stop trying to load it. At least with the Vulkan backend, trying to load it results in a crash. Added test case to ProgramBinariesAcrossPlatforms which exhibits the old crash. Bug: angleproject:5567 Change-Id: I2ebb27cee0aa895855504f758992b4dfec3f4aa3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2639078 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Steven An <stevenan@google.com>
Tim Van Patten 9ccd3536 2021-01-20T18:19:41 Capture/Replay: Capture all indexed buffer bindings during MEC "eFootball PES 2021" binds uniform buffers via glBindBufferRange() before any frames haves been rendered and then uses those bound buffers for all subsequent frames. A recent fix captured the UBOs that were also bound as GL_UNIFORM_BUFFER, but failed to capture all indexed buffers bound only with glBindBufferRange(). This CL captures all indexed uniform, atomic counter, and shader storage buffers during MEC setup. Bug: angleproject:5564 Change-Id: I0e638ec4407a091f943b9640e8fc6a7c9f4c4e08 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2640424 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Tim Van Patten 535d4783 2021-01-20T14:14:02 Vulkan: Flush if sync object is pending during SyncVk::getStatus() When a glGetSynciv() is performed for GL_SYNC_STATUS, we should flush any pending commands if a sync object is pending a flush, since the caller is interested in the status of a fence. This will guarantee that the work is submitted to the hardware and eventually completes. This is accomplished by moving mSyncObjectPendingFlush from ContextVk to ShareGroupVk, so that any sync objects used by any contexts within the share group are submitted to hardware and the required work completes. Bug: angleproject:5306 Bug: angleproject:5425 Test: FenceSyncTest.BasicOperations Change-Id: I2e2681ad01fda429ba37f061c9bac5eb91f800fd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2641095 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Tim Van Patten 26e02593 2021-01-15T12:38:46 Capture/Replay: Erase texture from mCachedTextureLevelData When the caller issues a glCompressedTexImage call, we need to delete the cached texture data, since the texture size/data are being respecified and the old data is now stale. This fixes MEC for "Klondike Adventures". Bug: angleproject:5549 Change-Id: Ie788e2bf39f7a29ec6bc55f95d6f570f1d22d659 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2633071 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Peng Huang f5d56799 2021-01-20T10:00:54 Do not make context current during context deletion. ANGLE will make a context current during deletion, so ANGLE can release related resources, but for an external context, the API user should make sure the native context is current during deleting the ANGLE external context, so ANGLE doesn't need to make the context current. Bug: angleproject:5509 Change-Id: Ia4cee4e3965e9e9e811e3f989f6f6d72bd940f41 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2640593 Commit-Queue: Peng Huang <penghuang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tim Van Patten bb766000 2021-01-20T16:58:16 Vulkan: Move Flush during SyncHelper::clientWait() earlier The checks and call to contextVk->flushImpl() needs to be moved before the timeout check to ensure that the vkEvent is flushed to HW eventually when the caller is waiting on it, even if they don't specify a timeout. Bug: chromium:1060139 Test: CopyOutputScalingPixelTest.ScaledCopyOfDrawnFrame/48 Change-Id: I725ea492aaf21e291fe3e5b9ae11ea009e59e019 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2640423 Commit-Queue: Alexis Hétu <sugoi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Alexis Hétu <sugoi@chromium.org>
Sunny Sachanandani 137271ff 2021-01-13T14:34:12 Support specifying array slice for D3D11 texture EGLImage Client can specify array slice for creating the SRV/RTV with EGL_D3D11_TEXTURE_ARRAY_SLICE_ANGLE. Test: D3DTextureTest.TextureArrayImage* Bug: angleproject:5538, chromium:1116101 Change-Id: I81cb2823df2145f1d05ad1526b0e36d6a0724d5e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2628609 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
Shahbaz Youssefi bb3adfa4 2020-12-01T15:43:13 Rename ShaderVariable::structName to structOrBlockName Bug: angleproject:3580 Change-Id: Ic53a5267972f153dad2e20948e493e9767a45d16 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2568247 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang df33d561 2021-01-19T11:42:35 EGL: Respect eglMakeCurrent with a null context. Our context virtualization code would try to optimize this case and leave the current context bound when possible. This has the side effect of leaving the current surface bound too, even if it was deleted. During Chrome's window resizing, it deletes the window, calls eglMakeCurrent with null and then recreates the window. This causes an error because the window still exists because it was left current in ANGLE. Bug: chromium:1167718 Change-Id: I857be88be48dfa9c0dd9173f235e155e727e3014 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2637717 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Peng Huang 2ebff7f2 2021-01-20T08:39:40 Support switch surfaces for external context. WebView may change surfaces due to resizing. So we need to support switching surfaces with the external context. Bug: angleproject:5509 Change-Id: Id91eed092a63b3740fd796e0a3cb819ae18baaa9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2639077 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Shahbaz Youssefi ea71c6b6 2021-01-12T14:13:35 Vulkan: Emulate R32F images with R32UI GL requires that imageAtomicExchange be supported for r32f formats. However VK_FORMAT_FEATURE_STORAGE_*_ATOMIC_BIT is nearly unsupported everywhere without some Vulkan extension that brings in unnecessary support. This GL feature is emulated by transforming the shader to use r32ui for all images that originally specified r32f. floatToUintBits and uintBitsToFloat is used to maintain correct usage of the image* builtin functions. Bug: angleproject:5535 Change-Id: Ie607089935d3283b3ffa054f4b4385b81fb8f53d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2635453 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>