src/libANGLE


Log

Author Commit Date CI Message
Le Hoang Quyen dc3477f3 2020-03-14T17:22:41 Separate GLES1's state enum switch code from GLES2+ Some enum values such as GLES1's GL_CLIP_PLANE0 and GLES2+'s GL_CLIP_DISTANCE0_EXT have the same value. Thus, the enum switch code has to be separated for GLES1 & GLES2+ Bug: angleproject:4481 Change-Id: I2fcb95f3f75f1fe683a072bee02e797a95686480 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2145284 Commit-Queue: Le Hoang Quyen <le.hoang.q@gmail.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Charlie Lao 8c67c079 2020-04-16T14:42:15 Vulkan: store ImageLayout in PackedAttachmentOpsDesc The layout in the PackedAttachmentOpsDesc only have 5 bits, not enough for raw VKImageLayout enums. This change will store vk::ImageLayout which are ANGLE defined and packed for 5 bits and able to handle the extension bits of VKImageLayout. Bug: b/153885625 Change-Id: Ida268a974094188d8aeee39c61019eef30a60507 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2153845 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill aefa3aa9 2020-04-15T14:27:12 Vulkan: Make staged clears store aspect mask. This will allow us to store depth- or stencil-only clear when we defer clears in FramebufferVk syncing. Currently a refactoring change only. Bug: angleproject:4517 Change-Id: Ifc9bf8f9ebab993509155cf6cf66db5b11f35163 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2151169 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 3fb33ade 2020-04-09T15:27:12 Vulkan: Forward RenderBuffer/Surface dirty messages. Previously we were only forwarding Texture staging changes to the Framebuffer for re-sync. We could miss out on clears that were staged in Surfaces and Renderbuffer attachments. Complete the chain by making the SurfaceVk and RenderbufferVk forward notifications from the VkImage. Bug: angleproject:4517 Change-Id: I15f36c225517e915f656d0c2464a99631ef9f945 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2150699 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 1033d55d 2020-04-07T14:01:24 Pass binding enum to Framebuffer::syncState. Will allow us to determine if we're clearing the read or draw FBO. Then we can stash clears for the draw FBO only and issue them immediately for the read FBO in the Vulkan back-end. Bug: angleproject:4517 Change-Id: Ifc043317d6156a75749b13f9d2c44a17e14ee378 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2139997 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jian Li 943c3bc1 2020-04-16T11:25:02 Vulkan: Fix transform feedback on AMD platform Make sure pCounterBufferOffsets is never a null pointer when counterBufferCount is greater than zero. Bug: angleproject:3206 Change-Id: If161473239b53d2a65b1cccaaf1426a4fefd243a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2152030 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Rafael Cintron 49ad8eaa 2020-04-13T17:55:25 Enable allowClearForRobustResourceInit for Intel drivers NVidia drivers have no trouble clearing textures without showing corruption. AMD ones do. Intel drivers that have trouble have been relegated to the DX9 runtime by Chromium. Bug: angleproject:4460 Change-Id: I9ffbfa041e0f7ef8e05edcc14274bf9530eafae3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2147821 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Jian Li d5ba916d 2020-04-07T17:59:08 Vulkan: Change to record transform feedback related APIs per spec Fix not to record vkCmdBindPipeline and vkCmdBindTransformFeedbackBuffers during transform feedback is active. Initiated by Hyunchang Kim hckim.kim@samsung.com https://chromium-review.googlesource.com/c/angle/angle/+/1971953 Pause Transform feedback on binding graphics pipeline and end of render pass. Set a new dirty bit to indicate transform feedback may need resume when invalidate graphics pipeline. Test: dEQP-GLES3.functional.transform_feedback.* Test: angle_end2end_tests --gtest_filter=TransformFeedbackTest* Bug: angleproject:3206 Change-Id: I6c70ef461a31dcd618058b167835ac278a21d04a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2139474 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Hyunchang Kim 6e0d718a 2020-03-31T18:41:57 Vulkan: Implement device memory sub-allocation Use AMD Vulkan Memory Allocator for device memory sub-allocation. We now have a mempool from which all glBuffer memory is allocated. The CPU overhead involved in repeated IOCTL calls to the kernel is reduced significantly. Bug: angleproject:2162 Change-Id: Id7681ffe2ac3d2853141ebe34c7df7b7fdd0d55e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2124519 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
shrekshao d26fb99e 2020-04-10T16:04:26 Add DrawBaseVertexVariants Tests This tests different DrawElements*BaseVertex draw calls from different extensions including OES_draw_elements_base_vertex, EXT_draw_elements_base_vertex, and ANGLE_base_vertex_base_instance, with various combinations of base vertex, base index values. Bug: angleproject:4536 Change-Id: I3cd256522684c6040199d7704aac8575237dbd96 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2146292 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shrek Shao <shrekshao@google.com> Commit-Queue: Shrek Shao <shrekshao@google.com>
Xinyi He 7ce8f3e0 2020-04-14T11:07:25 Enable perFrameWindowSizeQuery by default on Mali It doesn't return out of date error after the native window has resized, so we need to enable perFrameWindowSizeQuery on Mali GPU. Bug: angleproject:4564 Change-Id: Ib454898c5653fbb1b05dc542f7266dfffb03e793 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2145879 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao dee4d7a5 2020-04-10T10:22:56 Vulkan: Early fragment tests optimization Checks if early fragment tests as an optimization is feasible and enable it if we can. In the link time, if context state diagrees with optimization (in rare case), then remove the ExecutionModeEarlyFragmentTests sprv op code. Bug: angleproject:4508 Change-Id: Ifbb06c0ffb050a9f3ddb16ab50362e908b4b9cf6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2136490 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Xinghua Cao c68dfaf3 2020-04-01T16:36:25 Avoid GPU-GPU copy for StructuredBuffer If uniform block is translated to StructureBuffer on D3D backend, must do a GPU-GPU copy when updating uniform buffer. If buffer's latest usage is StructuredBuffer, directly upload to structured buffer. Bug: angleproject:3682 Change-Id: I7303866d08705a43238732e5f5ae4858f0a33d63 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2131871 Commit-Queue: Xinghua Cao <xinghua.cao@intel.com> Reviewed-by: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Tim Van Patten 405f8e7b 2020-02-24T17:38:10 Vulkan: Support Program Pipeline Objects Add support for PPOs to the Vulkan back end. Bug: angleproject:3570 Change-Id: I5403456929847c185467b008d810f31ecfcb60cc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2072652 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Alexey Knyazev c12c1f57 2020-04-03T01:33:54 D3D11: Skip setting BlendState for integer attachments Some D3D11 drivers may produce unexpected results when blending is apllied to integer attachments. Minor cleanup: early exit for nullptr attachments. New BlendIntegerTest in angle_end2end. Bug: angleproject:4548, angleproject:4547, angleproject:4525, angleproject:4394 Change-Id: I236ac6db1f8dcaca54e9bc1b0803e1775fd75632 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134448 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Mohan Maiya dac5cc3b 2020-04-08T18:26:46 EGL: Add support for EGL_EXT_image_gl_colorspace extension Add support for creating images with custom colorspace. Bug: angleproject:3756 Tests: angle_end2end_tests --gtest_filter=ImageTest* Change-Id: I9c332c012541c094728d9d9bde7add4189084a33 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2104088 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Geoff Lang 23196076 2020-04-08T10:47:33 GL: Protect against infinite loops with CONTEXT_LOST in CheckError If the GL context generates a CONTEXT_LOST error, stop checking for errors. This error will be generated continuously and result in an infinite loop. BUG=angleproject:3020 Change-Id: Ib78d1ff3f84103e658307f2f892538700916449d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2142312 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Tim Van Patten 8bd3dab1 2020-04-03T17:44:02 Create Context::getActiveLinkedProgram() In preparation for support Program Pipeline Objects, the new function Context::getActiveLinkedProgram() is being created that will handle returning the correct Program whether there is currently a Program or PPO active. This initial implementation doesn't actually support PPOs yet; that work is done in a follow-on CL. Bug: angleproject:3570 Test: CQ Change-Id: I534261738a55b2f671ca152c2ef9a1e81517a99c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2135931 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Brandon Schade a156df23 2020-03-20T08:12:34 Vulkan: add support for EXT_texture_sRGB_R8 Added support for EXT_texture_sRGB_R8. The GL_SR8_EXT format will be available if the VK ICD supports VK_FORMAT_R8_SRGB. This does not add support for emulation of this format. Bug: angleproject:4503 Bug: angleproject:3609 Test: dEQP-GLES3.functional.texture.*.srgb_r8_* Change-Id: Ifaec92ac1a8561881f54ddb7fdf0975112711736 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2135853 Commit-Queue: Brandon Schade <b.schade@samsung.com> Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Tim Van Patten <timvp@google.com>
Jamie Madill 76d52be3 2020-04-07T09:14:29 Vulkan: Add VulkanMemoryAllocator to DEPS. Bug: angleproject:2162 Change-Id: If91ae40c1fe818a59d775bb2fa066227dd52859d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2139992 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 2a0c3596 2020-03-31T15:36:45 Vulkan: Clean up robust and emulated image clears. This change consolidates image clears in multiple places into a single site in ImageHelper initialization. It adds support for appending clear image commands as well as prepend (the default). We prepend clears because image initialization happens after data upload. The Vulkan robust clear path now works like the other back-ends. The change flushed out a bug where partially uninitialized CopyTexImage was not correctly initializing a texture before triggering a full resource clear. Texture::copyImage now uses a workaround where we first init the image before clearing it. After the init we upload the new data. We'll use the appending clears path when implementing deferred clears. Bug: angleproject:4517 Change-Id: If9212f3b8cdd0fc8b7e729d364530801a644e164 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2130627 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 78a471ba 2020-04-03T16:21:21 TextureGL: Signal DirtyBitsChanged on dirty bits. This is a refactoring change only in preparation for a change in the Vulkan back-end. We'll need to split the handling for Vulkan and GL into different functions. Bug: angleproject:4517 Change-Id: I2ddf9c70fe247d1dcb4e0aa9ca929bbbd61bd42b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2135893 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill c916fe8a 2020-04-02T16:57:49 Don't call syncState inside FBO queries. This prevents a syncState ordering issue that was confusing FBO sync when robust resource init is enabled. Also cleans up some redundant format processing for the half float extensions. Bug: angleproject:4517 Change-Id: Ieb13fc5203cf824a3e8affda96ea5cbbd89d78ee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134411 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill a30c6f35 2020-04-07T11:25:20 Vulkan: Pass RendererVk to BufferHelper::destroy. Bug: angleproject:2162 Change-Id: I7c0090d48b0a5bac222b1edf4c2db280d5b32930 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2139993 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
shrekshao 90e07c73 2020-04-06T17:04:32 Hook up several drawElements variants in Context11 Turns out the issue for the skia bug is not related to index range cache but simply several new drawElemnts variants are not properly hooked up. Change-Id: I2d1ae15c74233185e4fee8a1443ffe0477f9c444 Bug: angleproject:3402, angleproject:4536 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2137943 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Cody Northrop 461f9ab1 2020-03-30T12:41:34 Capture/Replay: Implement more GLES entry points Test: Temple Run capture and replay Bug: b:152512564 Bug: angleproject:3662 Change-Id: I4cb5d081e4f590d297dc4af6b49f5dc67584ecb7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2128329 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Cody Northrop 84323449 2020-03-30T12:40:12 Capture/Replay: Track buffer contents by ID This CL updates how we restore buffer data after the client has unmapped it. We do this because we have no visibility into whether the buffer has been changed while mapped. Tracking a buffer map/unmap pairing by target as we have been is insufficient as apps can bind multiple buffers in succession before rebinding and unmapping selectively. To avoid this, we change our buffer data resource tracking to use the buffer ID instead of target. Also, since the app can map multiple buffers, we need to track the active buffer during MapBufferRange so we can use it during replay to restore from the appropriate handle. This is a deferred operation, so we store it as a new member of the ParamBuffer to preserve the information. Test: Temple Run capture and replay Bug: b:152512564 Bug: angleproject:3662 Change-Id: I1d3f594b496e5675e814b82acb4a238f845e26d6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2128328 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill 1c95795f 2020-04-03T14:49:45 Use ImageIndex in ensureSubImageInitialized. Passes an already initialized struct so we don't need to separately pass a level and layer. Also removes some redundant gl:: prefixes in Texture.cpp and adds a new helper function doesSubImageNeedInit. Refactoring change only. Bug: angleproject:4517 Change-Id: Ib2d8a5c9ceaada03cc8d299adcb5aed53a0cf13c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2135928 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill c9c4e4ed 2020-04-02T10:29:52 Track rendering feedback loops by-context. This fixes an issue where feedback loops detection would trigger false positives based on texture use in multiple contexts. 1) there are two contexts, C1 and C2, sharing resources 2) in C1, there is a texture T bound to GL_TEXTURE_2D, and a program in use that will sample C1 3) in C2, a framebuffer is created and T is bound to it This fix indexes each set of active bindings in an object by ContextID. We can potentially redo this solution in the future if this proves to have too much tracking overhead. Includes a test writen by Ken Russell. Bug: angleproject:4517 Change-Id: I67012e68947c42d863dca193972576c82d5f3712 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134406 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Mohan Maiya 96c26c68 2020-04-03T07:52:52 Add support for NV_shader_noperspective_interpolation Added support for GL_NV_shader_noperspective_interpolation on the Vulkan and Desktop OpenGL backends Bug: angleproject:4388 Test: angle_end2end_tests --gtest_filter=ShaderInterpTest.NoPerspective/* Change-Id: I12473830c0ea8b4fffeae9c4a8ec92d979c8e18c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2107234 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill e259e7e3 2020-04-02T17:33:17 Pass layer count to robust 2D array texure init. The Vulkan back-end needs the layer count to correctly initialize the whole range of the mip level. Otherwise we were only clearing a single layer of the 2D array. This only popped up when the code started to be lazier about robust resource init. Bug: angleproject:4517 Change-Id: Id5007c877d413dc80d54d9800a5898e130593451 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134412 Reviewed-by: Cody Northrop <cnorthrop@google.com>
Courtney Goeltzenleuchter 390ef299 2020-03-25T14:10:38 Enable blob cache when debugging We've had several issues with shader caches which are only implemented on Android which makes them challenging to debug. The existing BlobCache object has a default implementation that is disabled by default. When debug layers are enabled resize the default cache so that it gets used and provides behavior closer to Android. This caching will be enabled when debug layers are enabled, e.g. EGL_PLATFORM_ANGLE_DEBUG_LAYERS_ENABLED_ANGLE attribute is true. This is done for angle_end2end_tests and deqp tests. Reland after bugfix angleproject:4535 Bug: b:152292873 Bug: angleproject:4535 Change-Id: Icefa8c55e39985d653d8d8a8bc8c734210025b50 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134449 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill e4aa679c 2020-04-01T17:46:31 Texture: Pass explicit unpack buffer to setImage. This will allow us to call setImage internally even if there's an unpack buffer bound. Useful when implementing robust resource init with copyTexImage in some edge cases. Bug: angleproject:4517 Change-Id: I7e8e9536ab9222c620e572f7b6c20b08fa29d646 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2133088 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill dd00f16b 2020-04-02T14:04:44 Vulkan: Fix FBO cache when updating disabled attachments. Fix this by consistently checking if the attachment is enabled when we update the serials. Also includes a regression test and more ASSERTs. Bug: angleproject:4540 Change-Id: I154d23cad71f1674d893390f923f45c643a58925 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134409 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Tobin Ehlis <tobine@google.com>
Jamie Madill 1cc49bb2 2020-04-02T11:57:07 Squash State::mContext and State::mID. These were both id values for the context. This CL consolidates to the monotonically increasing ID since it is both safer and easier to debug. Makes life easier when indexing feedback loops by context ID. Bug: angleproject:4517 Change-Id: I28b40fed4e6e68ea72742f7defde5f8638f4cd47 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2134408 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Geoff Lang dd29370c 2020-04-01T10:42:47 Include the fragment output locations in the program cache key. If the user rebinds the output locations and relinks a program, the wrong program may be loaded from the cache. TEST=gl_tests: TranslatorVariants/EXTBlendFuncExtended* BUG=angleproject:4535 Change-Id: If9a9c2ad935ea4d01c3fe4313810d221e9c9ce38 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2131252 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Nico Weber a053f340 2020-04-01T16:58:16 Vulkan: Use shader stage specific barrier Followup fix for copy/paste error that ImageLayout::GeometryShaderReadOnly was using VK_PIPELINE_STAGE_VERTEX_SHADER_BIT Bug: angleproject:4467 Change-Id: I5be7f800177c4f36a334f1cc75f876e271ca22b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2133089 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 4db77367 2020-03-03T12:04:26 Vulkan: Don't detach separable shaders in Program::detachShader() To support Program Pipeline Objects, we need to hold on to the shaders in separable programs, rather than detaching them during glDetachShader()/glCreateShaderProgramv(). This is necessary due to requiring the shader information for validating shader interfaces, varyings, etc. Instead, a new ShaderMap of bools will be stored in ProgramState::mAttachedShadersMarkedForDetach to track when a caller attempts to detach a shader from a separable Program. Later, when a new shader is attached, we will first validate that the old shader is marked to be detached, and if so, release it then. Bug: angleproject:3570 Change-Id: I63fac2e5914c1c1a73f0b37863bac0f185ecb44c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2084399 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Mohan Maiya 745e0712 2020-03-21T17:46:05 Vulkan: Enable CPU only buffers for PBOs Add support for a CPU only buffer for PBOs that serve as the destination for all host operations like MapBuffer*. This removes the latency caused by waiting for the in-flight GPU commands to be complete before handing over the buffer to the app. This change removes a ~6ms wait/sleep on the first call to MapBuffer* in each frame of Manhattan Bug: angleproject:4339 Tests: angle_end2end_tests --gtest_filter=BufferDataTest*Vulkan Change-Id: I52016b160af8a670cc30f01c05e48f699521310f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2116874 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Tobin Ehlis <tobine@google.com>
Nico Weber dcd98298 2020-04-01T16:58:16 Remove breaks after returns. No behavior change. Bug: chromium:1066980 Change-Id: I26a5c13a730cbc6cde8e888a8a18bd633bb3f748 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2133087 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Nico Weber <thakis@chromium.org>
Hyunchang Kim 449d9d76 2020-03-31T17:27:00 Vulkan: Refactor garbarge collection related parameter Use RendererVk instead of VkDevice as a parameter in garbage collection functions. Bug: angleproject:2162 Change-Id: Ifd53e05223d6d603402c9b7fcfa82fe1f896458c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2131882 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 20e375eb 2020-03-14T20:27:09 Vulkan: Use shader stage specific barrier Seperate vertex and fragment shader read/write with shader stage specific barriers Bug: angleproject:4467 Change-Id: Id18909b497b087e58d750023399943bc9d414edf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2102957 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Hyunchang Kim 6281e30d 2020-03-31T15:41:23 Vulkan: Add flush condition for the device memory updated by CPU Memory created using HOST_COHERENT_BIT does not need to be explicitly flushed. Bug: angleproject:2162 Change-Id: Idc2001e2254de616d7e7067410d225d0b521f29f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2131881 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Hyunchang Kim d30da072 2020-03-31T15:01:14 Vulkan: Request host uncached memory for some glBuffer objects Uncached memory is an optimal memory type for resources with write-only access from the CPU since it avoids polluting CPU caches with data the CPU will never use. Bug: angleproject:2162 Change-Id: I33d0d91830979990bcdcca3bd9eedde0345fb5a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2131880 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao 6328caf3 2020-03-24T19:31:02 Vulkan: Avoid renderpass break for occlusion query This ensures beginQuery and endQuery only get inserted into renderpasses and will not close renderpass because of query call Bug: angleproject:4381 Change-Id: I690f096b9e8e4b7ea9a67045d1be0fd7a319c98c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2119246 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Jonah Ryan-Davis 4b94d7bb 2020-03-24T17:23:19 Split EGL_CHROMIUM_sync_control into EGL_ANGLE_sync_control_rate eglGetMscRateCHROMIUM was added to EGL_CHROMIUM_sync_control based on the original extension GLX_OML_sync_control. However, this new function is not universally implemented. This CL moves it to a new extension, EGL_ANGLE_sync_control_rate, and renames it to eglGetMscRateANGLE. Bug: chromium:1064078 Change-Id: Ia2a29c6776b2b2bf2b98e58ee83b5f141ed01301 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2118154 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Tim Van Patten <timvp@google.com>
Kenneth Russell 91ea27ae 2020-03-27T16:22:14 Apply limitMaxMSAASamplesTo4 workaround to macOS. On dual-GPU MacBook Pros, the maximum number of supported samples can differ between the integrated and discrete GPUs, leading to unexpected OpenGL errors in applications. Detected with WebGL conformance tests in Safari with ANGLE as the WebGL backend. Bug: angleproject:4518 Change-Id: I54997cbb83afd76d98b16d138d117d0afdeec5e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2125407 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Cody Northrop 06f4f3e1 2020-03-30T10:57:06 Capture/Replay: Disable binary formats when FrameCapture is enabled Rather than capture and replay a format that is not cross platform, limit the number of exposed binary formats to zero when FrameCapture is enabled. Test: Temple Run capture and replay Bug: b:152512564 Bug: angleproject:3662 Change-Id: I4a7bc5a353d2cdb1dceb1276a3c61bfbb74dc2f7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2128327 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill db32bda4 2020-03-30T17:01:54 Vulkan: Observe staging buffer changes in TextureVk. This switches where we notify the Texture class that the back-end has a dirty staging buffer. Previously we notified in every possible code site in TextureVk. Now we notify in a single centralized location in the staging buffer. This will allow us to stash clears in the staging buffer in the FramebufferVk class via RenderTargetVk. And ultimately let us defer clears to fix Manhattan's rendering feedback loop. Bug: angleproject:4517 Change-Id: I67760f133e2c58feddbba3d1062de0b966bac281 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2128546 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Geoff Lang 1288aa12 2020-03-27T12:24:52 Update the active texture cache before changing the texture binding. When a new texture is bound, the texture binding state is updated before updating the active texture cache. With this ordering, it is possible to delete the currently bound texture when the binding changes and then use-after-free it when updating the active texture cache. BUG=angleproject:1065186 Change-Id: Id6d56b6c6db423755b195cda1e5cf1bcb1ee7aee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2124588 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Alexis Hetu b83b0f5e 2020-01-31T15:09:17 Add support for NV_read_depth, NV_read_stencil and NV_depth_buffer_float2 extensions This cl adds the ability for the ReadPixels function to read other attachments than the color attachment. Checks were added for both depth and stencil attachments. A new test was added (DepthStencilFormatsTest.DepthStencilReadback) to test this new functionality. As the name mentions, it's used to test reading from the depth and stencil attachments using ReadPixels. Bug: angleproject:4295 Change-Id: I6fe9be11f05d6055a5883b4315f870e7c0ac41ad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2031702 Commit-Queue: Alexis Hétu <sugoi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Corentin Wallez 7939e367 2020-03-30T18:52:19 Revert "Enable blob cache when debugging" This reverts commit 617cb015f3e95c3c89090870bae086e92515a91d. Reason for revert: Seems to cause rolls in Chromium to fail: https://chromium-review.googlesource.com/c/chromium/src/+/2127135 Original change's description: > Enable blob cache when debugging > > We've had several issues with shader caches which are only implemented > on Android which makes them challenging to debug. > The existing BlobCache object has a default implementation that is > disabled by default. When debug layers are enabled resize the default > cache so that it gets used and provides behavior closer to Android. > This caching will be enabled when debug layers are enabled, e.g. > EGL_PLATFORM_ANGLE_DEBUG_LAYERS_ENABLED_ANGLE attribute is true. > This is done for angle_end2end_tests and deqp tests. > > Bug: b:152292873 > Change-Id: I9dcd90a1a8da88127bf8dac25031056b7279207e > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2113133 > Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=courtneygo@google.com,ianelliott@google.com,jmadill@chromium.org Change-Id: I42a445b93eff1237b05a82d2836c218b9bbbd08b No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: b:152292873 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2128106 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Cody Northrop 74e816bf 2020-03-26T17:40:25 Vulkan: Expose extension for ETC1 usage with subimage updates This CL implements the GL_EXT_compressed_ETC1_RGB8_sub_texture extension, which was added to relax restrictions on using ETC1_RGB8_OES for subimage updates. Test: Temple Run on Android Bug: b:152512564 Change-Id: I78cfd7dfd54fab36dee59a93b3ec3bfce17e73e4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2123232 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Courtney Goeltzenleuchter 617cb015 2020-03-25T14:10:38 Enable blob cache when debugging We've had several issues with shader caches which are only implemented on Android which makes them challenging to debug. The existing BlobCache object has a default implementation that is disabled by default. When debug layers are enabled resize the default cache so that it gets used and provides behavior closer to Android. This caching will be enabled when debug layers are enabled, e.g. EGL_PLATFORM_ANGLE_DEBUG_LAYERS_ENABLED_ANGLE attribute is true. This is done for angle_end2end_tests and deqp tests. Bug: b:152292873 Change-Id: I9dcd90a1a8da88127bf8dac25031056b7279207e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2113133 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 1b2dd6f9 2020-03-02T16:28:15 Vulkan: Refactor varying validation for separable programs The varying validation is being refactored to better handle separable programs. Some additional validation is being added as well regarding: - Number of varyings (inputs vs outputs) - Precision This refactor will also allow ProgramPipelines to validate varyings between shaders that are in different Programs. Bug: angleproject:3570 Change-Id: I13f324da2ffea039e696962d6971a54f7a7b6f77 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2083847 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Tim Van Patten b387ce93 2020-02-21T16:05:41 Vulkan: Move ProgramInfo/ShaderInfo to ProgramExecutableVk The classes ProgramInfo and ShaderInfo are being moved into ProgramExecutableVk along with the ProgramVk members mDefaultProgramInfo and mLineRasterProgramInfo. This refactor is necessary since these members are common between ProgramVks and ProgramPipelineVks. Bug: angleproject:3570 Change-Id: I94cdb1096c6a0c007d858135af694da58d7897ff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2068901 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tim Van Patten f47dccab 2020-02-21T15:40:36 Vulkan: Create TransformSpirvCode() To support Program Pipeline Objects, the SPIR-V transformations must be completed at draw time once all of the variable locations are known. To achieve this, the transformation work is being refactored into TransformSpirvCode() which can be called separately from GlslangGetShaderSpirvCode(). Bug: angleproject:3570 Change-Id: Ia479cb2e4b4201e37acd0859c70081cecb80d0bf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2068900 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten 85c076ee 2020-02-20T17:54:35 Vulkan: Make mVariableInfoMap a gl::ShaderMap<> The ShaderInterfaceVariableInfoMap information is specific to each shader stage, since the locations are determined for each shader stage. This change makes mVariableInfoMap a gl::ShaderMap<> to handle this, which will make it easier to compile separable programs, determine the variable locations, and transform the SPIR-V. Bug: angleproject:3570 Change-Id: I28b71a37efe54bbcfe1dcd445fa03ee71e74f0a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2062741 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Tim Van Patten abaa3573 2020-02-20T10:23:02 Vulkan: Only calculate variable locations once Variable locations and descriptor set/binding values are calculated multiple times: - Compiling GLSL->SPIR-V - Creating the Vulkan pipeline layout - Updating descriptor sets These values should instead be calculated once and reused throughout since they won't change without recompiling the shader program. Bug: angleproject:3570 Change-Id: I5d8767b3b2e2f741aade7fec9991eea53ee2eb98 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2067101 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 10ade024 2020-02-13T18:11:54 Create the ProgramExecutableVk Class The ProgramExecutableVk class is being created to collect data structures that are common to both ProgramVks and ProgramPipelineVks, as well as any shared functions. This allows callers to make Program-/ProgramPipeline- specific queries without needing to know exactly which responded by querying the current ProgramExecutableVk. This will also allow the necessary data structures to only be populated and stored within the ProgramExecutableVk when necessary and reused as often as necessary. A few things are being moved into this class: - mVariableInfoMap This information will be required to defer translating the SPIR-V until when the vulkan pipeline layout is determined and the actual locations are known.   This will also allow removing determining these locations twice (during GLSL->SPIR-V compilation and pipeline layout). - createPipelineLayout() - update*DescriptorSet() - Descriptor Set Layout lists - Pipeline Layout - Various other functions/members related to pipeplines, descriptor sets, etc. Bug: angleproject:3570 Change-Id: I4b5ababeafec865148783c8ffd4c15f659f4856d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2055656 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill d03b15b2 2020-03-26T17:22:18 Vulkan: Mask out Depth/Stencil RTs in feedback loops. This should enable some cases of limited support for feedback loops with depth/stencil buffers. For example with Manhattan and the Vulkan back-end. Increases the number of RenderPasses in Manhattan slightly. This will regress performance slightly until we can work out a better solution that is also conformant with the spec. Bug: angleproject:4517 Change-Id: I2758e6b4c2a930474c09cdc0950f3b6c34541089 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2106670 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Tim Van Patten 68083e89 2020-03-04T15:55:53 Vulkan: Move cached samplers/images and has*() to ProgramExecutable The active samplers and images are being moved from Program into ProgramExecutable to unify interacting with them for Programs and ProgramPipelines Also, create some helper functions for gl::Program that ProgramExecutable can call to make it easier for ProgramPipeline to respond to similar queries for each of the Programs in the ProgramPipeline. Bug: angleproject:3570 Change-Id: I0b37f1a379e56b9659d82d92f6d7a546beee11cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2087648 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill bd2bdf9f 2020-03-26T15:40:09 Fix feedback loop clearing detection. Bug: angleproject:4517 Change-Id: I3231b129718019f83495843404cd011eb2cd480d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2122689 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
Jamie Madill 0bba1100 2020-03-27T14:39:44 Update OWNERS information. Also includes some documentation maintenance. Bug: angleproject:4511 Change-Id: I7ecce494909f06387875ff85a10004d0c446bbaf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2124597 Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 13c139e7 2020-03-21T15:25:50 Support masking out DS feedback loops in RenderTargetCache. Currently this is a pure refactor and doesn't change any functionality. In a follow-up we can us this bit to mask out DS RTs when Manhattan and other apps render with feedback loops. Bug: angleproject:4517 Change-Id: I80ccd022d90a781506791110d11be195db8cd3e9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2112936 Reviewed-by: Cody Northrop <cnorthrop@google.com>
Geoff Lang 0e65abea 2020-03-27T10:32:18 D3D11: Serialize and deserialze mImage2DUniforms. mImage2DUniforms was not saved with the program binary causing shaders with images to fail compilation when loaded from binary. BUG: angleproject:4519 BUG: b:152292873 Change-Id: I51581031ae1f9d4b4d986057ef3f876d809c7f24 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2124587 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Tim Van Patten 7e0699a2 2020-02-05T17:04:06 Create the ProgramExecutable Class The ProgramExecutable class is being created to collect data structures that are common to both Programs and ProgramPipelines, as well as any shared functions. This allows callers to request the current ProgramExecutable from the State and make Program-/ProgramPipeline-specific queries without needing to know exactly which responded. This will also allow the necessary data structures to only be populated and stored within the ProgramExecutable when necessary and reused as often as necessary. Bug: angleproject:3570 Change-Id: I101f08ab03421894667b4a426a04d2147489f0e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2040512 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Cody Northrop f2bee304 2020-03-25T22:41:32 Capture/Replay: Implement more GLES entrypoints Tested with several apps that can't be captured otherwise. Bug: angleproject:3611 Change-Id: I2ad18c3bfcab48b0b385b2a868f57369c292b602 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1998838 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Courtney Goeltzenleuchter 6719f54a 2020-03-24T08:36:41 Update Vulkan header and related repos Vulkan header was updated with non-backward compatible change so need to update all dependencies simultaneously. Bug: b:152298150 Bug: angleproject:4510 Change-Id: I46ac9a3a0ccb52184fd183df617804c866b63453 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2118151 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Cody Northrop b69c4e14 2020-03-24T15:02:06 Capture/Replay: Update CaptureReplay sample for compression * Move DecompressBinaryData to a shared helper * Start using it in CaptureReplay sample * Error out if decompress callback isn't set correctly Test: AngryBirds and CandyCrush captures replay on desktop Test: angle_perftests --gtest_filter="*Trace*" Bug: angleproject:4484 Change-Id: I0432004fdb0cfb0fd61f9a66f792591c9aa40d9b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2118790 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill c77cb596 2020-03-24T14:39:32 No-op draw calls with rendering feedback loops. This is quite within spec and protects our various back-ends from FB loops. Also makes the check more cached for optimization purposes. Bug: angleproject:4490 Change-Id: Ia82ec88244d07670d68ce53495b5893b8a75ac42 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2118153 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Ian Elliott d0800d29 2020-03-24T15:01:22 Vulkan: Fix crashes/failures in array-of-struct uniforms When array-of-struct support was added to ANGLE, it was not added to the shader cache serialize/deserialize functions. This affects many GLES 2/3/3.1 dEQP tests, such as: dEQP-GLES2.functional.uniform_api.value.assigned.by_value.render.struct_in_array.sampler2D_samplerCube_vertex Bug: angleproject:4475 Bug: b:151387995 Change-Id: I159f6340db255ec50c16b59fec23a61ed05aa8f7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2118152 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill b91d2630 2020-03-24T13:17:58 Speculative fix for assertion failure with samplers. This was crashing for example here: https://chromium-swarm.appspot.com/task?id=4b174a9710848410 https://chromium-swarm.appspot.com/task?id=4b214baec2ee7e10 With this stack: libglesv2!gl::TextureState::isBoundAsSamplerTexture libglesv2!gl::Texture::onUnbindAsSamplerTexture libglesv2!gl::State::unsetActiveTexture+0x9 libglesv2!gl::State::updateActiveTextureState+0x2d2 libglesv2!gl::State::updateActiveTexture+0x3aa libglesv2!gl::State::setSamplerTexture+0x4a1 libglesv2!gl::Context::bindTexture+0x1ab libglesv2!gl::BindTexture+0x99 chrome!GrGLFunction+0x1f chrome!GrGLGpu::bindTexture+0x1a0 chrome!GrGLProgram::bindTextures+0x1b9 chrome!GrGLOpsRenderPass::onBindTextures+0x50 chrome!GrOpsRenderPass::bindTextures+0x106 chrome!GrOpFlushState::bindTextures+0xf chrome!`anonymous namespace'::FillRectOp::onExecute+0xd3 It's unclear how we could end up with a Texture bound that doesn't go through the normal setter functions. I did see a potential hole where textures might not get an unbind call when a Context is torn down. This could lead to bugs in multi-context situations. This protects the set/unset functions in a helper class to ensure we always call onBind/onUnbind and forces the destructor to call unbind. Bug: angleproject:4490 Change-Id: Ied64e02bbe3a37efcab6cbdd4bf2d1b6dcb8b3ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2118254 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Kenneth Russell e39d055d 2020-03-23T17:45:57 Fix robust resource initialization with clipped CopyTexSubImage2D. When CopyTexSubImage2D calls were clipped against the bounds of the read framebuffer by the underlying renderer backends, the robust resource initialization code assumed that the original destination area would be overwritten by the renderer, which was not the case. Add new tests which were previously failing on macOS with the ES2_OpenGL and ES3_OpenGL backends. The Metal backend is still failing and a follow-on bug has been filed. Bug: angleproject:4504 Change-Id: I34821dd90597f31b3cbf0921b94756556e485c91 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2116873 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Jamie Madill 6fead375 2020-03-21T14:06:19 Vulkan: No-op redundant FB state changes. This uses a trick by comparing the prior to the updated FB description to filter out rendundant changes. Will allow the front-end syncState to sometimes noisily report state changes when there aren't any in the back-end. Ideally we wouldn't generate any updates when there aren't real changes. However because Manhattan often transitons between a few zero states it gets a bit difficult to determine in the front-end. Also adds a no-op for redundant samples changes in the front-end. Fixes a regression in the number of RenderPasses in Manhattan from work to support rendering feedback loops. Bug: angleproject:4490 Change-Id: Ibf83d584107a4561da7ad47a2d3fb543e63e31f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2112935 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Mohan Maiya ca2b6e1f 2020-03-19T16:30:21 Vulkan: Implement EXT_shader_non_constant_global_initializers Enables the translator to handle non-constant global initializers in all essl versions iff the shader enables the extension to do so. Bug: angleproject:4468 Test: angle_end2end_tests --gtest_filter=ShaderNonConstGlobalInitializerTest.* Change-Id: I8f138c12fc83d2f38ff8f45ca9133222b01e4087 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2102959 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Geoff Lang 13ea5b7f 2020-03-19T12:43:12 Implement gl[Get]MemoryObjectParameterivEXT These functions are required to tell the driver that the memory object is dedicated memory. This is required for AMD drivers on Linux. Bug: chromium:1049218 Change-Id: I17d69cde5e6308791dc90784f4d6e348503a6ed6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2110051 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Geoff Lang dd4e09ef 2020-03-20T14:54:36 Update conditions for exposing ASTC extensions. Add commenents to explain the Vulkan ASTC situation. Expose GL_KHR_texture_compression_astc_sliced_3d when the HDR profile exists. Bug: angleproject:4447 Change-Id: I00a86cb3c44873a28397aab33a47fb363d4ecfe9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2112283 Reviewed-by: Alexis Hétu <sugoi@chromium.org> Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Geoff Lang 07467b4a 2020-03-20T10:40:56 Remove GL_CHROMIUM_path_rendering Bug: chromium:1063193 Bug: angleproject:4270 Change-Id: I35b24b7d8d892181955e49dd2495655bc57cb0df Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2112275 Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Alexis Hetu 91f44a9a 2020-03-20T12:08:24 ASTC: LDR support doesn't imply HDR support There are SwiftShader related failures related to enabling the textureCompressionASTCHDRKHR feature without properly checking if the VK_EXT_texture_compression_astc_hdr extension is available, so HDR support shouldn't be enabled only based on the LDR support being enabled. Bug: angleproject:4447 Change-Id: Icde34892c9e2efff4b71e8c4e960c2fcff786700 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2080594 Commit-Queue: Alexis Hétu <sugoi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 4fb3c28f 2020-03-19T19:10:45 Vulkan: Fix Framebuffer cache depth/stencil issue. The DrawBuffers resetting logic didn't update the depth/stencil serial. Fix this and add a regression test that would crash in this situation. Note that the Manhattan benchmark could trigger this under some cases. Bug: angleproject:4322 Bug: angleproject:4490 Change-Id: Ie4b24efeb5991ecaa85bf8f964f77476bd6f167d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2111333 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 1c88cf27 2020-03-18T18:00:01 Add optimized rendering feedback loop tracking. This can be used both for WebGL and the Vulkan back-end workaround for Manhattan. Uses the recently added tracking for Textures being bound as samplers. Then caches this information in the Framebuffer using the Subject/Observer pattern. Bug: angleproject:4490 Change-Id: I08bef0a1b95c4333da19c2dae1f02a993e5835e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2109335 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Cody Northrop a4337121 2020-03-19T15:31:00 Perf: Limit TracePerfTest to single compressed TRex Update the TRex trace to: * Incorporate recent fixes for compressed textures * Incorporate support for compressing the trace * Simplify the tag on the trace (drop the end frame) Update TracePerfTest to: * Temporarily support only a single trace (TRex200). Test: angle_perftests --gtest_filter="*Trace*" Bug: angleproject:4484 Bug: angleproject:4488 Bug: angleproject:4496 Change-Id: Ice0c4ee9de3ad9ae4596305a93c51c6eac842123 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2112629 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 62b72552 2020-03-20T07:51:26 Add support for EXT_EGL_image_external_wrap_modes Allows for more wrap modes to TEXTURE_EXTERNAL_OES textures Test: angle_end2end_tests --gtest_filter=ExternalWrapTest.* Bug: angleproject:4443 Change-Id: I37bde091b166d7471c13c14fd6b0174136b52ecf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2103433 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Xiaoxuan Liu 2709f40f 2020-03-17T14:22:42 Skip updating viewport and scissor info if the same If glViewport() or glScissor() is called with same info, skip updating viewport or scissor info and related dirty bits. Bug: angleproject:4487 Change-Id: I9a0f3eb0df789beb99447ebc98383f502fbc763d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2105528 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill b1eb44bf 2020-03-18T15:33:13 Track if a Texture is bound as a sampler. This will more easily allow us to detect rendering feedback loops. We'll need to support feedback loops to enable Manhattan. Bug: angleproject:4490 Change-Id: I442deebd89dcf0139411688eaa204c5e5b2c2799 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2109334 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Mohan Maiya 7daf31d8 2020-03-18T09:19:52 Vulkan: Use device local memory for conversion buffers that can be converted with the GPU When converting a vertex buffer by using GPU, the conversion buffer doesn't need to be host mappable. Hence the conversion buffer can be allocated on device local memory for faster GPU access times. Bug: angleproject:3534 Change-Id: I2efabec20186992479920bddd3abd36f9c13babc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2108706 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 9d812d35 2020-03-18T15:31:14 Vulkan: Remove public FramebufferVk::getFramebuffer. Goal: enable rendering feedback loop detection for Manhattan. Making getFramebuffer private prevents direct access to the Framebuffer internals. Hiding access lets the FramebufferVk class switch up its implementation to support different VkFramebuffers for feedback loop cases. Also this is a general code cleanup. Bug: angleproject:4490 Change-Id: Ib4f5e34d476ccd8fc43a1adb031933ab347ca7b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2109333 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill dadeffa3 2020-03-18T21:56:05 Capture/Replay: Fix stride in compressed texture caching. We were saving "width" bytes instead of "width * pixelSize". This was causing incorrect rendering in T-Rex and Manhattan. Bug: angleproject:4488 Change-Id: Ib5d38aaf813fb26905aedc155cc13b9d1597ec4c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2109336 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Courtney Goeltzenleuchter 4422d298 2020-03-18T09:54:54 Vulkan: Must call vkFlush while memory is mapped Update to Vulkan validation layers pointed out that vkFlushMappedMemoryRanges needs to be called when the memory is mapped. Bug: b:151820847 Change-Id: I3860306080bca435c063046f9ae20943a8601d17 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2108705 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Tobin Ehlis 4119f033 2020-03-17T13:34:09 Vulkan:Set one-time bit on all command buffers All Vulkan command buffers are only submitted once so we can set the VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT which may help performance. Bug: angleproject:4304 Change-Id: Ibd116dcac4e78a2c058eb3da54489057d6fa8f44 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2107800 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Courtney Goeltzenleuchter 4df67871 2020-03-17T16:13:23 Be sure to clear all program state at unlink At Program::unlink we clear out the program's state but forgot mBufferVariables. That was causing us to hit an assert when trying to load a shader from cache. Only see the issue on Android as that's the only platform where shader caching is supported. Test: KHR-GLES31.core.explicit_uniform_location.uniform-loc Bug: angleproject:4132 Change-Id: Iae9c26a3e3b2d11983cc7d90bcd54a10c0fa9934 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2107235 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill 23d63fc3 2020-03-17T20:34:50 Capture/Replay: Fix MEC Query capture. In Manhattan the test generates a bunch of queries that it doesn't start until later frames. In ANGLE these queries will be stored as nullptr entries in the QueryMap. By default the QueryMap Iterator skips over nullptr entries. This manifested later as GL errors during replay. Fix this by adding a new Iterator type to ResourceMap that does not skip over nullptr values. Bug: angleproject:4489 Change-Id: If56b908fb233de0df0445f9ea19fc322f2c42976 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2107762 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill e54f7ed7 2020-03-17T18:20:44 Capture/Replay: Fix compressed texture subImage caching. The prior code was caching the last subImage data. In fact we should be caching and updating a pixel rectangle. Multiple subImage calls will update the same rectangle until the final capture call sets up the replay with the complete initial data. This was causing an issue with Manhattan and the initial data for 3D compressed textures. Manhattan uploads these one layer at a time. So the prior code was trying to pass a single layer's data to the subImage call for the entire level. Bug: angleproject:4488 Change-Id: I76765dcea884f9d8ea07908c44e97578ddb0ff0d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2107761 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill 7e453a25 2020-03-15T22:11:03 Capture/Replay: Use zlib to compress data files. Gives about a 2-3x reduced data file size. Should help reduce the time we spent transferring trace files on Android. This feature is implemented as a parameter to the capture/replay tool. This keeps backwards compatiblity if we ever need to integrate a cpp replay into an environment that doesn't have access to zlib for decompression. We'll need to update the traces to take advantage of the compression. Bug: angleproject:4484 Change-Id: Id7994efe3c0d529b85fa7e7f1b00444e630dd2cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2104555 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 78a85f2c 2020-03-16T10:28:59 Vulkan: Request device local memory for glBuffer with GL_STATIC* usage glBuffer objects with GL_STATIC_* usage patterns will now request the storage to be allocated in device local memory. For glBuffer objects with GL_DYNAMIC_* usage patterns we request a host cached memory. Bug: angleproject:4480 Change-Id: I7ca968f5ddfb59e4df3ecd07ae65df2bbf734190 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2102958 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill d24752e6 2020-03-15T21:34:10 Capture/Replay: Write to single binary data file. Previously the tool would save to a separate file for every frame and one additional file for the setup function. Frames without binary data would not get an "angledata" binary file. Using a single file has a few advantages: - makes it simpler to track the data dependencies in GN - should be easier to compress and decompress for speed up transfers - no need to wonder if we have frames with missing data files - less overhead reading from the HDD since the whole trace is buffered We might need to worry about extemely huge memory use cases. For now buffering the whole file into memory on startup is simple and fast. Also makes the binary data loader function more robust. Bug: angleproject:4484 Change-Id: Ia74fb0bc65200adf7a21c3143f98aa4da86457b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2104554 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 7c334c56 2020-03-15T17:37:15 Re-enable optimization for angle_perftests. This CL restricts the workaround to the trace perf tests. These trace tests are too big to optimize. Also includes a fix for a 32-bit Windows warnings. We'll need to update the build file to remove a suppression once the traces are updated. Bug: angleproject:3630 Change-Id: Id13a0050fc2a645aa572b8c9079908023b232f28 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2103084 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Mohan Maiya a3cf06ac 2020-03-12T13:15:48 EGL: populate EGL_NATIVE_VISUAL_ID values for Android When generating the default EGL configs, populate EGL_NATIVE_VISUAL_ID with AHARDWAREBUFFER formats. Bug: angleproject:4469 Change-Id: Ifde9df0497cbd4e01219ab6067acd8d97f8460e4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2101577 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Jamie Madill 1393bf9e 2020-02-28T22:03:27 Vulkan: Timestamp internal RenderPasses in perf tests. This change book-ends RenderPasses in the Vulkan back-end with timestamp queries. This allows us to write out a trace of GPU/CPU that we can inspect in Chrome. To enable the GPU trace you can define ANGLE_ENABLE_VULKAN_GPU_TRACE_EVENTS in ContextVk.cpp and run the angle_perftests suite with --enable-trace. Note that we ran into some issues with the implementation not returning monotonic timestamps. This may be a driver bug but bears more investigation. Bug: angleproject:4433 Change-Id: I0e6a364367f15183068e55686549cb418aa94c2a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2081380 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>