src/libANGLE/renderer/vulkan/RendererVk.cpp


Log

Author Commit Date CI Message
Shahbaz Youssefi c7565353 2019-04-03T14:03:56 Vulkan: break dependency to the depthClamp feature Image clear's masked clear path using a draw call was using this feature to clear the depth buffer, but this feature is not available on ARM and some Qualcomm devices. This change adds a push constant to the vertex shader used in this call to export the depth clear value, removing the need to rely on depth clamping. Bug: angleproject:3241 Change-Id: I565cd5f731c441820e0702e51dfdf02d0bc7de06 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1551522 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
Shahbaz Youssefi f6c937f8 2019-04-02T17:04:08 Vulkan: fix masked stencil clear Previously, masked stencil clear was done by clearing every stencil bit to the ClearValue & Mask. The correct behavior as implemented in this change is to clear only the bits that are set in Mask. This can only be done through a draw call, with ClearValue as the stencil reference, and Mask as the stencil write mask. Note: this change relies on the depthClamp Vulkan feature which is not available on ARM. Bug: angleproject:3241 Change-Id: I0a181c32f881ee813f144e7bdd6f42c8ea6f1966 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1548442 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
Michael Spang 7a8c3e5e 2019-04-03T14:49:57 Generate entrypoints for GL_EXT_memory_object & GL_EXT_semaphore This adds entrypoints for two new extensions that will be useful for importing external Vulkan objects into ANGLE. Bug: angleproject:3289 Change-Id: I206dc76eda5c6c8d836db7c6413c5544326aa722 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1552024 Commit-Queue: Michael Spang <spang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 27f115aa 2019-04-01T10:33:21 Vulkan: clean up framebuffer clear The Qualcomm bug workaround is changed such that clears still go through the render pass loadOp, but the render pass is immediately closed. This allows us to remove a few fallback methods. Bug: angleproject:2361 Change-Id: I24c3884a183f8bb40673e922773f70faffad848f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1545524 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 43997017 2019-03-30T23:24:01 Vulkan: fix non-float clear with draw Instead of using one draw call that clears all attachments, multiple draw calls are issued that clear a single attachment each. This allows us to have a manageable number of variations for the ImageClear.frag shader, now that non-float format support is introduced. Bug: angleproject:3187 Change-Id: Ic0c1067a396250bd80f31d00cad5a272acff8be8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1545523 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Geoff Lang 892d1805 2019-03-27T14:21:34 Vulkan: Have the WindowSurfaceVk own the submit semaphores. Chaining of submit semaphores is only needed for window surfaces because they are required for the first usage of the swap chain image and final present of the image. Move ownership of the submit semaphores from RendererVk to WindowSurfaceVk and update all calls to finish and flush to be piped through a ContextVk which tracks the currently bound window surface. BUG=angleproject:2464 Change-Id: I4b3083124d7910a5dee297afc219e3a3f28057f2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1542257 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 0c128e15 2019-03-25T23:50:14 Vulkan: Use render pass ops to clear images when possible On tiling GPUs, render pass loadOp and stencilLoadOp can be used to very cheaply clear an image as it is being render to. This change uses this feature to clear render targets when possible. Bug: angleproject:2361 Change-Id: Ic4bdc908873f4802760d549f4893f84a47beac0f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1500576 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 56124e68 2019-03-26T15:02:30 Vulkan: remove dependency to inheritedQueries If using vk::priv::SecondaryCommandBuffer. This would allow ES3 support where inheritedQueries is not supported. Bug: angleproject:3136 Change-Id: I10508058301ea6da8f3415cfdcc052500a67f810 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1538829 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
Shahbaz Youssefi 2660b503 2019-03-21T12:08:40 Vulkan: Restore CommandBuffer to namespace vk Moved vk::CommandBuffer and vk::SecondaryCommandBuffer to vk::priv:: and aliased vk::CommandBuffer to one or the other. This allows the rest of the classes to continue seeing vk::CommandBuffer as they used to do. Used a special alias for the primary command buffer that gets submitted (vk::PrimaryCommandBuffer). Bug: angleproject:3136 Change-Id: I61236fd182230991db7395d05e3da3be5e3f45be Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1534456 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tobin Ehlis a8ff8814 2019-03-05T07:06:32 Vulkan:Optimize SecondaryCommandBuffers RELAND of this commit. Had to fix fuzzer build errors. Optimize performance of SecondaryCommandBuffers and enable them as the default build option. To disable this set angle_enable_custom_vulkan_cmd_buffers=false in your build args. This CL enhances the PoolAllocator to have a "fast" mode that can be enabled at class creation. This mode uses an alignment of 1 byte and enables a fastAllocation() call that avoids some bookkeeping overhead. The SecondaryCommandBuffer uses this fastAllocation() function. Furthermore the fast path of fast allocate, using the current page, is inlined for maximum speed. Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate blocks so that the commands occur linearly in memory. This speeds up processing with improved cache coherency and minimizes overhead when recording commands. Also the core Draw functions and their state updates are all inlined as well as the common functions to initialize commands and to copy command pointer data. This change also includes some new, custom commands. One is imageBarrier that is a specialized version of pipelineBarrier that only performs a single image layout transition. There are customized versions of various Draw commands to minimize copying of parameters. There are also specialized commands to bind[Graphics|Compute]Pipeline that have the pipeline type built in to the command. More custom commands and command data size optimizations will be made in follow-on commits. Bug: angleproject:3136 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Change-Id: I621d8f8893308fca240b32390928e8ba0036cf06 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1535385 Reviewed-by: Tobin Ehlis <tobine@google.com>
Jamie Madill 896e7811 2019-03-22T14:56:33 Revert "Vulkan:Optimize SecondaryCommandBuffers" This reverts commit 2219b18c984ed69251f3db3c7b5fd69a2fa68c77. Reason for revert: Failing to compile on ASAN builders: https://ci.chromium.org/p/chromium/builders/try/linux-libfuzzer-asan-rel/134782 Currently blocking roll. Original change's description: > Vulkan:Optimize SecondaryCommandBuffers > > Optimize performance of SecondaryCommandBuffers and enable them as the > default build option. > To disable this set angle_enable_custom_vulkan_cmd_buffers=false in > your build args. > > This CL enhances the PoolAllocator to have a "fast" mode that can > be enabled at class creation. This mode uses an alignment of 1 byte and > enables a fastAllocation() call that avoids some bookkeeping overhead. > The SecondaryCommandBuffer uses this fastAllocation() function. > Furthermore the fast path of fast allocate, using the current page, > is inlined for maximum speed. > Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate > blocks so that the commands occur linearly in memory. This speeds up > processing with improved cache coherency and minimizes overhead when > recording commands. > Also the core Draw functions and their state updates are all inlined > as well as the common functions to initialize commands and to copy > command pointer data. > > This change also includes some new, custom commands. One is > imageBarrier that is a specialized version of pipelineBarrier that only > performs a single image layout transition. > There are customized versions of various Draw commands to minimize > copying of parameters. > There are also specialized commands to bind[Graphics|Compute]Pipeline > that have the pipeline type built in to the command. > More custom commands and command data size optimizations will be made > in follow-on commits. > > Bug: angleproject:3136 > Change-Id: I35453cc2656bc8c51f0d84d1adef106900aca9a5 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418 > Commit-Queue: Tobin Ehlis <tobine@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=tobine@google.com,syoussefi@chromium.org,jmadill@chromium.org Change-Id: I1c0bfe864ff343eb8ea6c88556523f8715c981d5 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:3136 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1535998 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 2219b18c 2019-03-05T07:06:32 Vulkan:Optimize SecondaryCommandBuffers Optimize performance of SecondaryCommandBuffers and enable them as the default build option. To disable this set angle_enable_custom_vulkan_cmd_buffers=false in your build args. This CL enhances the PoolAllocator to have a "fast" mode that can be enabled at class creation. This mode uses an alignment of 1 byte and enables a fastAllocation() call that avoids some bookkeeping overhead. The SecondaryCommandBuffer uses this fastAllocation() function. Furthermore the fast path of fast allocate, using the current page, is inlined for maximum speed. Jamie Madill also updated the SecondaryCommandBuffers to pre-allocate blocks so that the commands occur linearly in memory. This speeds up processing with improved cache coherency and minimizes overhead when recording commands. Also the core Draw functions and their state updates are all inlined as well as the common functions to initialize commands and to copy command pointer data. This change also includes some new, custom commands. One is imageBarrier that is a specialized version of pipelineBarrier that only performs a single image layout transition. There are customized versions of various Draw commands to minimize copying of parameters. There are also specialized commands to bind[Graphics|Compute]Pipeline that have the pipeline type built in to the command. More custom commands and command data size optimizations will be made in follow-on commits. Bug: angleproject:3136 Change-Id: I35453cc2656bc8c51f0d84d1adef106900aca9a5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1497418 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 134425c7 2019-03-15T17:02:17 Vulkan:Integrate SecondaryCommandBuffers Integrate the custom SecondaryCommandBuffer type into the CommandGraph nodes by adding new ANGLE_USE_CUSTOM_VULKAN_CMD_BUFFERS define that can be set in the BUILD gn args with angle_enable_custom_vulkan_cmd_buffers set to "true." Initially the custom cmd buffers are disabled by default. This adds some support functions to SecondaryCommandBuffer to make the integration easier by matching the wrapped cmd buffer interface: initialize(), end(), valid(). Bug: angleproject:3136 Change-Id: Ib910554583192550757bb8ce89914e3ea8737988 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1526556 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 20ae6814 2019-02-27T17:11:58 Vulkan: Decouple EGLSync from renderer serial To support future work where RendererVk functionality is moved to ContextVk. Given multiple contexts, EGLSync can no longer rely on a single serial as it can be used in multiple contexts. Instead, the fence corresponding to the submission in which the EGLSync object signals is kept so it can be waited on. Introduces a `vk::Shared` class that includes a ref-counted reference to a Vulkan object (vk::Fence in this case). This is specially made to `destroy()` object when reference count reaches zero. Bug: angleproject:2464 Change-Id: I68c8229eea8df77974e28fcc2a9563dae5d204f9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1493131 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill (use @chromium please) <jmadill@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 4d153383 2019-02-26T15:08:11 Reland "Vulkan: Implement debug markers" This reverts commit 0c01e36783b20a0177c653490cb4f8ea4a896075. Reason for revert: Its dependency that was reverted has now relanded: https://chromium-review.googlesource.com/c/angle/angle/+/1489153 Original change's description: > Revert "Vulkan: Implement debug markers" > > This reverts commit 983e446921946734fe47217c345a8fe2f079319d. > > Reason for revert: Depends on a CL that's reverted: https://chromium-review.googlesource.com/c/angle/angle/+/1470605 > > Original change's description: > > Vulkan: Implement debug markers > > > > Covers both GL_KHR_debug and GL_EXT_debug_marker. > > > > Debug markers are used to specify events or hierarchically categorize a > > set of commands within the command buffer. When debugging, this allows > > for quicker navigation to the draw calls of interest, and otherwise > > provides context to debug output. > > > > Bug: angleproject:2853 > > Change-Id: Id65e11fc877d9e70b6fd0fae7f0bbbcb1164bf10 > > Reviewed-on: https://chromium-review.googlesource.com/c/1403956 > > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Jamie Madill <jmadill@chromium.org> > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > TBR=geofflang@chromium.org,jmadill@chromium.org,syoussefi@chromium.org > > Change-Id: I7fcfc8683195d396aec61848719f52c0fa049ece > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: angleproject:2853 > Reviewed-on: https://chromium-review.googlesource.com/c/1470606 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> TBR=geofflang@chromium.org,jmadill@google.com,syoussefi@chromium.org Bug: angleproject:2853 Change-Id: Ie19ae103244d54dcf7108d5f61c24e318fc44057 Reviewed-on: https://chromium-review.googlesource.com/c/1489154 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@google.com>
Shahbaz Youssefi 6f1a852f 2019-02-26T15:00:54 Reland "Roll Vulkan repos" This reverts commit 3805122b0297b8208ff734a3bcdaa12850b60a00. Reason for revert: The OOM issue that coincidentally happened at the time this CL landed, and for which this CL was reverted, turned out to be irrelevant to this change. Original change's description: > Revert "Roll Vulkan repos" > > This reverts commit 55ea947c3bdd6c0ef68fc4b9ddbda26889f62622. > > Reason for revert: Seems to be causing a memory corruption on Windows/Intel bots. > > Original change's description: > > Roll Vulkan repos > > > > Bug: angleproject:3095 > > Change-Id: I6ae9d61304981223f9e2f1869ed32612aa38952c > > Reviewed-on: https://chromium-review.googlesource.com/c/1405714 > > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Yuly Novikov <ynovikov@chromium.org> > > TBR=ynovikov@chromium.org,jmadill@chromium.org,syoussefi@chromium.org > > Change-Id: I61879770c9bb16ac2231b081bda08e6211ba6831 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: angleproject:3095 > Reviewed-on: https://chromium-review.googlesource.com/c/1470605 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> TBR=ynovikov@chromium.org,jmadill@google.com,syoussefi@chromium.org Bug: angleproject:3095 Change-Id: Iabe8ea215b44c65c4c22b9b158c5dad3ffffdbb0 Reviewed-on: https://chromium-review.googlesource.com/c/1489153 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@google.com>
Shahbaz Youssefi 76bd848c 2019-02-13T13:00:44 Vulkan: Support ETC, S3TC and BPTC compressed textures Fixes the format table so the correct Vulkan format for the types are generated. Additionally, implements CHROMIUM_copy_compressed_texture as well as other functions relevant to initializing compressed textures. Bug: angleproject:2670, angleproject:2904 Change-Id: I682d36574262525027cddf8f329515f38cd77dc0 Reviewed-on: https://chromium-review.googlesource.com/c/1468048 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@google.com>
Yuly Novikov 1581ff03 2019-02-28T20:59:26 Vulkan: disable VK_PRESENT_MODE_FIFO_KHR on Linux Intel Causes random timeouts. Bug: angleproject:2932, angleproject:3153 Change-Id: I69a200684afab9e00642850bfa8e8efd0da5ad1d Reviewed-on: https://chromium-review.googlesource.com/c/1495229 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@google.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Tobin Ehlis 5546fb4f 2019-01-17T12:25:54 Vulkan:Adding custom pool allocator Migrated pool allocator used by compiler to common. Planning to use this for ANGLE custom command buffers so this some refactoring in preparation for that work. Added a unit test to check PoolAllocator functionality. Bug: angleproject:2951 Reviewed-on: https://chromium-review.googlesource.com/c/1476953 Reviewed-by: Jamie Madill <jmadill@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com> Change-Id: I0b4f3d55ea1799e35c9799c221f7129233f30b24 Reviewed-on: https://chromium-review.googlesource.com/c/1492972
Yuly Novikov dbbdf563 2019-02-27T19:48:16 Require VK_EXT_queue_family_foreign for EGL_ANDROID_image_native_buffer support Even though VK_EXT_queue_family_foreign is required by VK_ANDROID_external_memory_android_hardware_buffer, Pixel 2 PQ2A.190205.002 supports the latter but not the former. Also print the names of unsupported extensions to ease debugging in the future. Bug: angleproject:3121, chromium:857138 Change-Id: Ib1195153cfb74f079a93ee9ce93b9b78e6f6e00a Reviewed-on: https://chromium-review.googlesource.com/c/1493114 Reviewed-by: Jamie Madill <jmadill@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 9dc8eafe 2019-02-11T11:04:54 Vulkan: ES3 dEQP suppressions This re-enables Vulkan ES3 context creation and adds the necessary dEQP suppressions. Bug: angleproject:2950 Change-Id: Ic24a9fb4f867f3bce08f101e056f208abf84bb5e Reviewed-on: https://chromium-review.googlesource.com/c/1483311 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Geoff Lang 009696c5 2019-01-31T14:47:07 Vulkan: Support EGL_ANDROID_image_native_buffer on Android. BUG=angleproject:2668 BUG=angleproject:3121 Change-Id: I0dfb2ec0737ebd963b0fadb78cf720a90874f00b Reviewed-on: https://chromium-review.googlesource.com/c/1452264 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov 0546b538 2019-02-25T22:47:17 Revert "Vulkan:Adding custom pool allocator" This reverts commit 941717496141b96f1d5817f31c2bb4a4e19847b9. Reason for revert: crashes on Debug bots Original change's description: > Vulkan:Adding custom pool allocator > > Migrated pool allocator used by compiler to common. > > Planning to use this for ANGLE custom command buffers so this some > refactoring in preparation for that work. > > Added a unit test to check PoolAllocator functionality. > > Bug: angleproject:2951 > Change-Id: I29618cfdb065b8a5fefd40719a35d27b1f6e99ef > Reviewed-on: https://chromium-review.googlesource.com/c/1476953 > Reviewed-by: Jamie Madill <jmadill@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Tobin Ehlis <tobine@google.com> TBR=ynovikov@chromium.org,jmadill@google.com,tobine@google.com,syoussefi@chromium.org Change-Id: Id8c522bd1d94154e871211d975e801a55cc9c257 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:2951, angleproject:3169 Reviewed-on: https://chromium-review.googlesource.com/c/1487977 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Tobin Ehlis 94171749 2019-01-17T12:25:54 Vulkan:Adding custom pool allocator Migrated pool allocator used by compiler to common. Planning to use this for ANGLE custom command buffers so this some refactoring in preparation for that work. Added a unit test to check PoolAllocator functionality. Bug: angleproject:2951 Change-Id: I29618cfdb065b8a5fefd40719a35d27b1f6e99ef Reviewed-on: https://chromium-review.googlesource.com/c/1476953 Reviewed-by: Jamie Madill <jmadill@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
Shahbaz Youssefi 962c222a 2019-02-20T15:43:41 Vulkan: Enable anisotropy feature when available If anisotropic filtering is used, the feature must be enabled at device creation time. This was missing. Bug: angleproject:2901 Change-Id: I86db55f8b1696dc04eae922b941512f786aa12b8 Reviewed-on: https://chromium-review.googlesource.com/c/1479264 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@google.com>
Frank Henigman 52047de4 2018-11-13T17:22:36 Vulkan: support instanced draws. (reland) Enable instanced draws with the Vulkan backend. So far it only works when Vulkan has VK_EXT_vertex_attribute_divisor. BUG=angleproject:2672 Change-Id: Ib6655625776344305911a1a742c85f17638cee8f Reviewed-on: https://chromium-review.googlesource.com/c/1469263 Reviewed-by: Frank Henigman <fjhenigman@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Shahbaz Youssefi 0c01e367 2019-02-13T21:27:23 Revert "Vulkan: Implement debug markers" This reverts commit 983e446921946734fe47217c345a8fe2f079319d. Reason for revert: Depends on a CL that's reverted: https://chromium-review.googlesource.com/c/angle/angle/+/1470605 Original change's description: > Vulkan: Implement debug markers > > Covers both GL_KHR_debug and GL_EXT_debug_marker. > > Debug markers are used to specify events or hierarchically categorize a > set of commands within the command buffer. When debugging, this allows > for quicker navigation to the draw calls of interest, and otherwise > provides context to debug output. > > Bug: angleproject:2853 > Change-Id: Id65e11fc877d9e70b6fd0fae7f0bbbcb1164bf10 > Reviewed-on: https://chromium-review.googlesource.com/c/1403956 > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> TBR=geofflang@chromium.org,jmadill@chromium.org,syoussefi@chromium.org Change-Id: I7fcfc8683195d396aec61848719f52c0fa049ece No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:2853 Reviewed-on: https://chromium-review.googlesource.com/c/1470606 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 3805122b 2019-02-13T21:21:13 Revert "Roll Vulkan repos" This reverts commit 55ea947c3bdd6c0ef68fc4b9ddbda26889f62622. Reason for revert: Seems to be causing a memory corruption on Windows/Intel bots. Original change's description: > Roll Vulkan repos > > Bug: angleproject:3095 > Change-Id: I6ae9d61304981223f9e2f1869ed32612aa38952c > Reviewed-on: https://chromium-review.googlesource.com/c/1405714 > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Yuly Novikov <ynovikov@chromium.org> TBR=ynovikov@chromium.org,jmadill@chromium.org,syoussefi@chromium.org Change-Id: I61879770c9bb16ac2231b081bda08e6211ba6831 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:3095 Reviewed-on: https://chromium-review.googlesource.com/c/1470605 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 983e4469 2019-01-18T16:04:50 Vulkan: Implement debug markers Covers both GL_KHR_debug and GL_EXT_debug_marker. Debug markers are used to specify events or hierarchically categorize a set of commands within the command buffer. When debugging, this allows for quicker navigation to the draw calls of interest, and otherwise provides context to debug output. Bug: angleproject:2853 Change-Id: Id65e11fc877d9e70b6fd0fae7f0bbbcb1164bf10 Reviewed-on: https://chromium-review.googlesource.com/c/1403956 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 55ea947c 2019-01-10T14:25:29 Roll Vulkan repos Bug: angleproject:3095 Change-Id: I6ae9d61304981223f9e2f1869ed32612aa38952c Reviewed-on: https://chromium-review.googlesource.com/c/1405714 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Michael Spang 229fc83d 2019-01-21T18:09:15 Vulkan: Port renderer to Fuchsia (reland) Add DisplayVk and WindowSurfaceVk subclasses for Fuchsia to the vulkan renderer, as well as an implementation of OSWindow that renders fullscreen for the test suite. Disallow use of the vulkan loader from third_party as Fuchsia uses a fork of the loader and has not sent those changes upstream yet. Add a small wayland-inspired library libfuchsia-egl to provide a type "struct fuchsia_egl_window" to use as EGLNativeWindowType. This type combines a zx_handle_t to an image pipe channel and a surface size. Image pipes can only be used once to create a VkSurfaceKHR. This means we have to recreate the pipe in tests that call eglCreateWindowSurface more than once with a single OSWindow, or the second call will fail. Add a resetNativeWindow() method to accomplish this. Reland disabling -Wextra-semi. BUG=angleproject:2475 TEST=angle_end2end_tests on Fuchsia Change-Id: Ie91715bcd760c6c04d4b8a02a91daa71e32ee30c Reviewed-on: https://chromium-review.googlesource.com/c/1467603 Commit-Queue: Michael Spang <spang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 341304d8 2019-02-12T20:58:54 Revert "Vulkan: support instanced draws." This reverts commit 199a9f385f5489b957fe1e42bf08f3f40edd38ca. Reason for revert: Causes a validation error when the extension is not present. See failures here: https://ci.chromium.org/p/chromium/builders/luci.chromium.try/win-angle-rel/693 Original change's description: > Vulkan: support instanced draws. > > Enable instanced draws with the Vulkan backend. > So far it only works when Vulkan has VK_EXT_vertex_attribute_divisor. > > BUG=angleproject:2672 > > Change-Id: I9445ba64282fa00a6eaee207b15efa2c7a9abbd3 > Reviewed-on: https://chromium-review.googlesource.com/c/1334973 > Commit-Queue: Frank Henigman <fjhenigman@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=fjhenigman@chromium.org,jmadill@chromium.org,syoussefi@chromium.org Change-Id: Iffccc2cca259bcd19c068a87a415d4e196901f45 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:2672 Reviewed-on: https://chromium-review.googlesource.com/c/1468201 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Frank Henigman 199a9f38 2018-11-13T17:22:36 Vulkan: support instanced draws. Enable instanced draws with the Vulkan backend. So far it only works when Vulkan has VK_EXT_vertex_attribute_divisor. BUG=angleproject:2672 Change-Id: I9445ba64282fa00a6eaee207b15efa2c7a9abbd3 Reviewed-on: https://chromium-review.googlesource.com/c/1334973 Commit-Queue: Frank Henigman <fjhenigman@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Ian Elliott 356d26c2 2019-02-11T11:27:01 Vulkan: Create/use a constant for the highest Vulkan version used. Bug: angleproject:3036 Change-Id: Ica056743eed2aa08e96b8a85e693ae70355b52d5 Reviewed-on: https://chromium-review.googlesource.com/c/1464739 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Jamie Madill 3f0ff409 2019-02-12T03:08:51 Revert "Vulkan: Port renderer to Fuchsia" This reverts commit 991d1cfb5e5a2f20a46961da3ad85b95da30b88a. Reason for revert: Failing compile on the fuchsia bots on the ANGLE auto-roller. https://ci.chromium.org/p/chromium/builders/luci.chromium.try/fuchsia_x64/209198 In file included from ../../third_party/angle/util/fuchsia/ScenicWindow.cpp:10: In file included from ../../third_party/angle/util/fuchsia/ScenicWindow.h:13: In file included from gen/third_party/fuchsia-sdk/sdk/fidl/fuchsia/ui/policy/cpp/fidl.h:5: In file included from ../../third_party/fuchsia-sdk/sdk/pkg/fidl_cpp/include/lib/fidl/cpp/internal/header.h:12: ../../third_party/fuchsia-sdk/sdk/pkg/fit/include/lib/fit/function.h:135:6: error: extra ';' after member function definition [-Werror,-Wextra-semi] }; ^ 1 error generated. Original change's description: > Vulkan: Port renderer to Fuchsia > > Add DisplayVk and WindowSurfaceVk subclasses for Fuchsia to the vulkan > renderer, as well as an implementation of OSWindow that renders > fullscreen for the test suite. > > Disallow use of the vulkan loader from third_party as Fuchsia uses a fork > of the loader and has not sent those changes upstream yet. > > Add a small wayland-inspired library libfuchsia-egl to provide a type > "struct fuchsia_egl_window" to use as EGLNativeWindowType. This type > combines a zx_handle_t to an image pipe channel and a surface size. > > Image pipes can only be used once to create a VkSurfaceKHR. This means we > have to recreate the pipe in tests that call eglCreateWindowSurface more > than once with a single OSWindow, or the second call will fail. Add a > resetNativeWindow() method to accomplish this. > > BUG=angleproject:2475 > TEST=angle_end2end_tests on Fuchsia > > Change-Id: I71a613a362dd1c8aada49a3c02ae461e064457bf > Reviewed-on: https://chromium-review.googlesource.com/c/1446496 > Commit-Queue: Michael Spang <spang@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=spang@chromium.org,geofflang@chromium.org,jmadill@chromium.org,syoussefi@chromium.org Change-Id: I2d9abefa9db5363ba63a17c1773d0e147040d055 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:2475 Reviewed-on: https://chromium-review.googlesource.com/c/1465761 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Michael Spang 991d1cfb 2019-01-21T18:09:15 Vulkan: Port renderer to Fuchsia Add DisplayVk and WindowSurfaceVk subclasses for Fuchsia to the vulkan renderer, as well as an implementation of OSWindow that renders fullscreen for the test suite. Disallow use of the vulkan loader from third_party as Fuchsia uses a fork of the loader and has not sent those changes upstream yet. Add a small wayland-inspired library libfuchsia-egl to provide a type "struct fuchsia_egl_window" to use as EGLNativeWindowType. This type combines a zx_handle_t to an image pipe channel and a surface size. Image pipes can only be used once to create a VkSurfaceKHR. This means we have to recreate the pipe in tests that call eglCreateWindowSurface more than once with a single OSWindow, or the second call will fail. Add a resetNativeWindow() method to accomplish this. BUG=angleproject:2475 TEST=angle_end2end_tests on Fuchsia Change-Id: I71a613a362dd1c8aada49a3c02ae461e064457bf Reviewed-on: https://chromium-review.googlesource.com/c/1446496 Commit-Queue: Michael Spang <spang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 00f43c91 2019-02-09T11:41:12 Vulkan: Suppress layer warnings about unbound outputs. This warning could pop up whenever an OpenGL app would write to a particular output and not bind an attachment. This is valid in OpenGL. Also it could happen when writing to gl_FragData instead of gl_FragColor. Since it's hard to fix every usage we can just suppress the warning. Also adds a way to change test platform warnings into errors. Bug: angleproject:2866 Change-Id: I9793f58121ac848d74d6b0131e79ebab2c70f45c Reviewed-on: https://chromium-review.googlesource.com/c/1462057 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 54ed8f0a 2019-02-11T12:32:04 Vulkan: Fix UtilsVk invalidating Context descriptors. Fixes a validation error and rendering artifact in the WebGL test: textures/misc/tex-image-and-sub-image-2d-with-array-buffer-view Only applies to masked clears when combined with draw calls using uniforms or textures. Also make it easier to inspect layer messages in the debugger. Bug: angleproject:2912 Change-Id: I4561895439221581b9dbc341d6de5d5a6c2096aa Reviewed-on: https://chromium-review.googlesource.com/c/1462056 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Frank Henigman 0a87f08d 2019-02-11T11:19:17 Vulkan: make GenerateCaps a member of RendererVk. Instead of passing lots of RendererVk member variables into GenerateCaps(), do the work in a member function. BUG=angleproject:2672 Change-Id: Icf16f3388174ddb676272ec0fa76a288ce2d1e4e Reviewed-on: https://chromium-review.googlesource.com/c/1463959 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Michael Spang 6c13c70c 2019-02-06T15:59:44 Vulkan: Enumerate instance & device extensions provided by layers Add instance & device extensions provided by layers prior to running VerifyExtensionsPresent() so that we won't abort when required extensions are provided in a layer. This happens particularly on Fuchsia as the swapchain extension is implemented in a layer. BUG=angleproject:2475 TEST=angle_end2end_tests on Fuchsia Change-Id: I30385dfe55b14783a20d1410f1209d3e3ad10632 Reviewed-on: https://chromium-review.googlesource.com/c/1456487 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Michael Spang <spang@chromium.org>
Michael Spang 740db7fd 2019-02-06T09:40:13 Vulkan: Add support for loading layers from DisplayVk Fuchsia needs a layer to support VK_KHR_swapchain. Add the ability for DisplayVk subclasses to request a layer in addition to an extension. BUG=angleproject:2475 TEST=angle_end2end_tests on Fuchsia Change-Id: If86c773d4bd4ebecaee4b1631d3d4975105fe849 Reviewed-on: https://chromium-review.googlesource.com/c/1456478 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 4a41914b 2019-02-05T08:50:30 Vulkan: Add trace markers Add systrace markers for various RendererVk::finish paths in order to quickly identify cause of finishes. Also added marker to commandPool destroy which is currently a known hotspot on some devices. Bug: angleproject:2528 Change-Id: I5a2fc741679a58445d71a2edd6204cf9e869d236 Reviewed-on: https://chromium-review.googlesource.com/c/1454277 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Michael Spang 25839802 2019-01-30T18:02:51 Vulkan: Don't crash on diagnostics with null pMessageIdName This can be null and this will causes a crash in strstr(). Check for null before dereferencing this field. BUG=angleproject:2475 TEST=angle_end2end_tests on Fuchsia and angle_enable_vulkan_validation_layers=true Change-Id: I76a2738365838cb2f9cb54af7637417735762b69 Reviewed-on: https://chromium-review.googlesource.com/c/1446506 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill fa7ca18f 2019-01-15T11:20:58 Vulkan: Enable dEQP point limit raster test. This requires enabling a workaround in the ANGLE shader translator to clamp the point size. Bug: angleproject:2599 Change-Id: I3171bdca5dd2e5af965e94ee2a955f46f8d706da Reviewed-on: https://chromium-review.googlesource.com/c/1412235 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 82fddcb1 2019-01-18T14:27:43 Vulkan: Implement GLsync and EGLSync fence syncs That is required in GLES 3 for GLsync and EGL_KHR_fence_sync and EGL_KHR_wait_sync (or EGL 1.5) for EGLSync. The two constructs (GLsync and EGLSync) have similar semantics and share the implementation on the Vulkan backend. The implementation of a fence sync object is achieved through the combined use of a vkEvent and the implicit vkFence inserted at the end of every submission. Imagine the following command buffer: glDraw : Draw glCreateSync: Set Event <-- insertion of fence sync glDraw : Draw : Signal Fence <-- implicit fence at the end of submission glFlush : Submit Assume the serial S is associated to this submission. The following hold: - If event is set, the fence sync is signaled - If S is already finished, the fence sync is signaled - If client is waiting on the sync and S is not yet flushed, there will be a deadlock (unless multi-threaded and another thread performs the flush). The event is used to implement server waits (glWaitSync), as vkEvent is the only entity the GPU can signal and wait on within the command buffer. The wait is inserted in the command graph without incurring a flush, i.e. the wait can be within the same command buffer as event set. The event however does not support CPU waits (glClientWaitSync). vkFence is the only entity the CPU can wait on. For client wait therefore, the following algorithm is used: - If the event is already set, there's no wait -> already signaled - If timeout is zero, there's no wait -> timeout expired - If S is not flushed, flush it to ensure forward progress. - Wait until S is finished -> condition satisfied / timeout expired. Bug: angleproject:2466 Change-Id: I678995a6139dd9533fa8ad361a3d292b202c52a4 Reviewed-on: https://chromium-review.googlesource.com/c/1422552 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 5904ee3f 2019-01-25T11:15:16 Vulkan: Fix timestamp query units Vulkan returns timestamps in cycles, which needs to be converted to nanoseconds (by multiplying by limits.timestampPeriod) for GLES. On NVidia, this multiplier seems to be 1 for a majority of their hardware, while the timer has less and more varying granularity on AMD, Intel and others. Bug: angleproject:2885 Change-Id: I34e08ad386e06619170975039385ce35cab025a5 Reviewed-on: https://chromium-review.googlesource.com/c/1436835 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tobin Ehlis 47ca1b2f 2019-01-23T16:11:41 Revert "Vulkan: Adding custom pool allocator" This reverts commit 05459e06fde5047ae8f5f90fe091c3255e6bc88e. Reason for revert: Clusterfuzz bugs flagged this commit Original change's description: > Vulkan: Adding custom pool allocator > > Copied pool allocator used by compiler to common and hooking it up as > custom allocator for CommandPools. Modified it to support reallocation. > > RendererVk now has a private poolAllocator and VkAllocationCallbacks > struct. The allocation callbacks are initialized to static functions > in RendererVk::initializeDevice() and then passed to CommandPool init() > and destroy() functions. > > Using the pool allocator saves Command Pool/Buffer clean-up time which > was showing us as a bottleneck is some cases. > > Bug: angleproject:2951 > Change-Id: I81aa8a7ec60397676fa722d6435029db27947ef4 > Reviewed-on: https://chromium-review.googlesource.com/c/1409867 > Commit-Queue: Tobin Ehlis <tobine@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=jmadill@chromium.org,tobine@google.com,ianelliott@google.com,syoussefi@chromium.org Change-Id: I363a351667c4dddef79833061790da90de477e70 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:2951 Reviewed-on: https://chromium-review.googlesource.com/c/1430679 Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Geoff Lang 0c2c923e 2019-01-14T16:01:38 Vulkan: Don't allow creation of ES3 contexts. Refactor RendererVk::getMaxSupportedESVersion to limit max supported versions similar to RendererGL. This allows dEQP-EGL.functional.robustness.reset_context.shaders.infinite_loop.* tests to pass but they are currently skipped due to TDR issues on some platforms. When we start to test on top of ES3 contexts, we will either have to supress some dEQP EGL tests or expose it some other mechanism. BUG=angleproject:3058 Change-Id: I8d28fe75edd8346b46d197e0217afbee1c19b7e3 Reviewed-on: https://chromium-review.googlesource.com/c/1409869 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Tobin Ehlis 05459e06 2019-01-17T12:25:54 Vulkan: Adding custom pool allocator Copied pool allocator used by compiler to common and hooking it up as custom allocator for CommandPools. Modified it to support reallocation. RendererVk now has a private poolAllocator and VkAllocationCallbacks struct. The allocation callbacks are initialized to static functions in RendererVk::initializeDevice() and then passed to CommandPool init() and destroy() functions. Using the pool allocator saves Command Pool/Buffer clean-up time which was showing us as a bottleneck is some cases. Bug: angleproject:2951 Change-Id: I81aa8a7ec60397676fa722d6435029db27947ef4 Reviewed-on: https://chromium-review.googlesource.com/c/1409867 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 85ca1895 2019-01-16T13:27:15 Vulkan: Store reference to context command buffer. This frees us from checking the FB every draw. Slightly reduces time spent in all draw methods. Improvement seen on the draw call overhead tests. Scores went from 28.17 ns/draw to 26.76 ns/draw on my machine. In a future improvement we could make this command buffer a dirty bit. Currently it's a bit slower to call a handler function due to the dispatch table. Likely we could optimize this by reverting back to a dirty bit switch and inlining the handler functions. That is left for future work. Vulkan is happy enough to run multiple RenderPasses and bind different Pipelines in the same command buffer. But ANGLE defers RenderPass init until we submit our work. Thus we can only support one RenderPass per secondary buffer. Test: angle_perftests DrawCall*/vulkan_null Bug: angleproject:3014 Change-Id: I89fd0d9e0822400a5c5a16acb5a9c400a0e71ab5 Reviewed-on: https://chromium-review.googlesource.com/c/1393905 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Yuly Novikov 5fe7c5b9 2019-01-17T12:16:34 Include common/platform.h where used Bug: 922443 Change-Id: I35b9e34266d4a15f8d0769c2770801b1b0511398 Reviewed-on: https://chromium-review.googlesource.com/c/1418091 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill bab0302b 2019-01-16T14:12:28 Make path utils return std::string. This avoids potential issues with returning local variables. It also solves potential threading conflicts by returning the string value instead of a pointer. The code should be optimized with RVO with a modern c++ compiler. Bug: angleproject:2601 Change-Id: I8a01702d2675a17dd060f27920105efab0c49454 Reviewed-on: https://chromium-review.googlesource.com/c/1415910 Reviewed-by: Kai Ninomiya <kainino@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 17a50e17 2019-01-10T22:05:43 Vulkan: Enable robust buffer access. This is not a complete implementation because it does not have the ability to disable the physical device feature. It does pass the current set of robust access tests. But there could be a performance regression on platforms that have a slower impelmentation. We would want the ability to support cases with bufer robustness on or off. Bug: angleproject:3062 Change-Id: I7d6eb889debcbd32f6ed809b526677123f872726 Reviewed-on: https://chromium-review.googlesource.com/c/1403967 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 5bca4fed 2019-01-09T17:07:06 Vulkan: Switch to EXT_debug_utils EXT_debug_utils is a (relatively) new extension that subsumes EXT_debug_report and EXT_debug_marker extensions. This change uses EXT_debut_utils (if available) to receive debug messages, keeping EXT_debug_report as fallback. Bug: angleproject:2798 Change-Id: Ia6767604548704e18f8150a54d2533c0b1197841 Reviewed-on: https://chromium-review.googlesource.com/c/1403955 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 4f3b207d 2019-01-01T14:48:25 Vulkan: Shader path for texture-to-texture copy This change implements glCopy[Sub]TextureCHROMIUM in GPU. As with the previous change implementing glCopyTex[Sub]Image2D, it currently only selects the shader path if the texture is already defined. Bug: angleproject:2958 Change-Id: Ia1b5625f92e6c9f91807c9b601e5c34d2d5e5c30 Reviewed-on: https://chromium-review.googlesource.com/c/1392394 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi e321940c 2018-12-08T16:54:14 Vulkan: Move image clear functionality to UtilsVk DispatchUtilsVk is renamed to UtilsVk and the functionality in framebuffer's clearWithDraw() is moved to that class. Eventually, more fragment-shader-based internal algorithms will be added to this class as well. Bug: angleproject:2958 Change-Id: I4753c9cb3288b59cd1ed60fe7a57b9f189704322 Reviewed-on: https://chromium-review.googlesource.com/c/1369284 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Ian Elliott 52f5da43 2018-12-21T09:02:09 Also enable flipY for Vulkan 1.1 The necessary support for flipY is included in core Vulkan 1.1 so enable the feature if that's what's available. Bug: angleproject:2968 Change-Id: I6808a1a0b1ace74976a7476f77d686e137a1e747 Reviewed-on: https://chromium-review.googlesource.com/c/1387758 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Ian Elliott 899c5d26 2018-12-21T13:12:50 Appropriately set VkApplicationInfo::apiVersion to 1.1 Check if the Vulkan instance version is 1.1+, and if so, set VkApplicationInfo::apiVersion to 1.1 (which signals to the validation layers that ANGLE will use Vulkan 1.1 functionality. Bug: angleproject:2968 Change-Id: I6808a1a0b1ace74976a7476f77d686e137a1e746 Reviewed-on: https://chromium-review.googlesource.com/c/1387757 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Ian Elliott d50521fd 2018-12-20T12:05:14 Only enable VK_KHR_maintenance1 when available. This prevents an error in case ANGLE is run on an older Vulkan driver that does not support the VK_KHR_maintenance1 extension. Bug: angleproject:3035 Change-Id: I7e2b74bcb88bffdfc2a525a1d332eb3ef7d23d7c Reviewed-on: https://chromium-review.googlesource.com/c/1387347 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Ian Elliott bcb78908 2018-12-19T11:46:29 Implement eglSwapBuffersWithDamage on top of VK_KHR_incremental_present Bug: angleproject:2510 Change-Id: I12b0877f787dbcb48e2890f54ba4bc8ebe8294b4 Reviewed-on: https://chromium-review.googlesource.com/c/1383373 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com>
Geoff Lang a7af56be 2018-12-14T14:20:28 Vulkan: Print the device id in the renderer string. Add a end2end test that prints all strings to help debug on the bots. BUG=angleproject:3026 Change-Id: Ia524a0d7dac88e55e0aa67412339e646a5564e64 Reviewed-on: https://chromium-review.googlesource.com/c/1378686 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi b08457df 2018-12-11T15:13:54 Vulkan: Make flushAfterVertexConversion workaround Nexus5X-specific Workaround added in 611bbaabb28cf4231ad0a138cd7bc21fe559ea02 is likely Nexus5X-specific. This commit detects the phone and enables the workaround only on that. Bug: angleproject:2958, angleproject:3009 Change-Id: I9ab230d4aa690fd92e3d2d84ad98c159128c1093 Reviewed-on: https://chromium-review.googlesource.com/c/1372445 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 611bbaab 2018-12-06T01:59:53 Vulkan: Convert vertex attributes in compute In this commit, VertexArrayVk::convertVertexBuffer() is renamed to VertexArrayVk::convertVertexBufferCpu() to explicitly show it does a CPU readback. A new VertexArrayVk::convertVertexBuffer() function is added that has the same functionality in gpu (with some assumptions, where the CPU fallback is used should those assumptions fail). Currently, the only requirement is that buffer offset/stride are divided by the component size. ConvertVertex.comp is the shader responsible for this conversion, and it implements the functionality in renderer/copyvertex.inc, minus a few functions that are not used in the Vulkan backend. Bug: angleproject:2958, angleproject:3009 Change-Id: I8ec9a5f4672509bcf7b9e352cd27663970ad4653 Reviewed-on: https://chromium-review.googlesource.com/c/1364451 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Jamie Madill 7c985f5c 2018-11-29T18:16:17 Make angle::Result an enum. This moves away from a class type to a value type. This should improve performance when using angle::Result as a return value. Previously the generated code would return a pointer instead of a value. Improves performance in the most targeted microbenchmark by 10%. In more realistic scanarios it will have a smaller improvement. Also simplifies the class implementation and usage. Includes some unrelated code generation changes. Bug: angleproject:2491 Change-Id: Ifcf86870bf1c00a2f73c39ea6e4f05ca705050aa Reviewed-on: https://chromium-review.googlesource.com/c/1356139 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 8f1b7a66 2018-11-14T16:02:54 Vulkan: Add DispatchUtilsVK This class provides a set of compute-based internal utilities. Currently, buffer clear and copy are implemented. Other possibilities include more efficient mip map generation, or specialized texture operations. VertexArrayVk::updateIndexTranslation() is updated to convert the GL_UNSIGNED_BYTE index buffer to a GL_UNSIGNED_SHORT one using this class to avoid a CPU readback. The vk::Format class is augmented with a few flags (IsInt, IsUnsigned) to be able to select the appropriate shader based on the format (float, int or uint). Bug: angleproject:2958,angleproject:3003 Change-Id: Ie35519deb3c32a3da5ccf74080c70092c9287f0a Reviewed-on: https://chromium-review.googlesource.com/c/1336307 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 96bd8fdf 2018-11-30T14:30:18 Vulkan: Fix format properties queries When querying format properties (in vk::GetFormatProperties), the mandatory feature support table was consulted to check whether a number of texture features are present. If so, the entry from that table was returned. The goal had been to speed up initialization by not issuing device queries if possible. That is, when vk::GetFormatProperties was called on a format, if it supported that select few texture features, the VkFormatProperties entry from the mandatory table would be returned. However, that function found its way to other uses (such as querying buffer format properties, or other image properties beyond the select few). As a result, when the VkFormatProperties from the mandatory table was returned, actual support for these other features was often not tested and assumed false (unless they happened to be mandatory as well). This commit reworks the format feature query functions such that the specific features to be tested are provided when querying the format properties. The mandatory table is consulted as before, and if the entry doesn't contain those features, the device is queried and the results cached. Bug: angleproject:2958 Change-Id: I28d046eb63c3bd5173468aa4cb3e4c63c83e67b1 Reviewed-on: https://chromium-review.googlesource.com/c/1357152 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi a1442ecd 2018-11-26T12:48:10 Vulkan: Uber-shader support For each internal shader, there is now possibly a companion .json file that defines shader variations. The variations consist of a set of flags and a set of enums. Each enum defines a variation that takes one of a few values. Flags are shorthands for 2-value enums. In the shader code, #if can be used to change the shader based on variations derived from flags and enums. On the C++ side, those variations are combined into an index and the appropriate shader is retrieved from a table. Bug: angleproject:2958 Change-Id: Ic4fc7061adb20c047c26624305285e3005092aab Reviewed-on: https://chromium-review.googlesource.com/c/1351117 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill b980c563 2018-11-27T11:34:27 Reformat all cpp and h files. This applies git cl format --full to all ANGLE sources. Bug: angleproject:2986 Change-Id: Ib504e618c1589332a37e97696cdc3515d739308f Reviewed-on: https://chromium-review.googlesource.com/c/1351367 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tobin Ehlis 573f76b3 2018-05-03T11:10:44 Debug: Add Systrace Markers Update ScopedPerfEventHelper class to add systrace markers by default. This change unifies ANGLE EVENT* macro system so that at the base level in LoggingAnnotator class, systrace markers will be added by default. Modify the base DebugLogger to use char* by default and move any conversions to wchar_t to the Windows specializations where wchar is used. This limits type conversions to only where they're needed. This change also includes some new TRACE_EVENT() calls in the VK backend which will result in systrace markers for those calls on the Android platform. The new build flag "angle_enable_trace" is added to enable the tracing calls. Bug: angleproject:2528 Change-Id: Icefc197d4407e1cd31338710e37865abae6a0b15 Reviewed-on: https://chromium-review.googlesource.com/c/1042785 Commit-Queue: Tobin Ehlis <tobine@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 823d8973 2018-11-13T10:52:40 Vulkan: Internal Compute support While this is not exposed to the front end yet, this commit adds support for creating Compute pipelines for internal usage. Bug: angleproject:2959 Change-Id: I976eae1ce0f736c257b7b4ae0d1c3b2d9f4da5bb Reviewed-on: https://chromium-review.googlesource.com/c/1333972 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill dc65c5bd 2018-11-21T11:07:26 Vulkan: Cache pipelines with Shader Programs. This allows for a few nice things. First and foremost it reduces the size of the PipelineDesc, which is now 232 bytes. It also allows us to completely forego pipeline caches for compute shaders. We also allow sharing vertex and fragment shaders among multiple programs for internal shaders. This is good for memory savings. To allow this we keep the shaders as ref counted objects. Bug: angleproject:2522 Change-Id: I2322be5061979d9669a0b25c152359561eeb80ee Reviewed-on: https://chromium-review.googlesource.com/c/1344449 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill fde74c07 2018-11-18T16:12:02 Vulkan: Apply point size clamping workaround in NV. It seems to be a regression in recent drivers. Olli contributed this workaround for the GL back-end some time ago. This CL enables it for Vulkan as well on the affected drivers. Bug: angleproject:2970 Change-Id: I37f0caf8d9db073cb880aa1500d1ff7a1eee9d34 Reviewed-on: https://chromium-review.googlesource.com/c/1341108 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Yuly Novikov b56ddbb7 2018-11-02T16:53:18 Vulkan: Handle VK_ERROR_DEVICE_LOST By notifying egl::Display that the device is lost, which marks all gl::Context as lost, turning all future GL commands to no-ops. Also clear CommandGraph and destroy in flight resources, making sure no more commands are executed on the lost device. Bug: angleproject:2657 Change-Id: I3a1e3646c8ebb37faff507a3c5cec7582a7e05fc Reviewed-on: https://chromium-review.googlesource.com/c/1323849 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi c30f45d3 2018-11-12T16:37:59 Vulkan: Rename PipelineDesc/Cache to Graphics& PipelineDesc describes a Vertex-Fragment pipeline and PipelineCache (not to be confused with vk::PipelineCache) implements a cache of such pipeline objects. In preparation for Compute support, these data structures are prefixed with Graphics. Bug: angleproject:2959 Change-Id: I9181586fb946b787216ca0b2ad6340f90c3ab55f Reviewed-on: https://chromium-review.googlesource.com/c/1333971 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 092481ad 2018-11-08T00:25:50 Vulkan: prepare for ES3 This makes ES3_VULKAN() pass the instantiability test, allowing it to be specified in end2end tests. Bug: angleproject:2950 Change-Id: Ife70a22fb8193f9eebe64bec491a24b47bc76939 Reviewed-on: https://chromium-review.googlesource.com/c/1325729 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Yuly Novikov 27780295 2018-11-09T11:19:49 Vulkan: refactor WrappedObject descendants Methods receive VkDevice instead of Context and return VkResult instead of angle::Result now. Bug: angleproject:2657 Change-Id: I3eca8692ad0b3b6e96e31fd433ed14e04384990e Reviewed-on: https://chromium-review.googlesource.com/c/1330105 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi d856ca48 2018-10-31T16:55:12 Vulkan: add clear test for emulated stencil or depth formats S8_UINT and D24_UNORM_X8_UINT are the only formats currently that are single-aspect and are possibly emulated with a packed depth-stencil format if it's not supported. A flag to FeaturesVk has been added as a way to force this behavior for the sake of testing. This test is added to ensure the correct clear algorithm is used for this case. Additionally, this case is detected and the other aspect is forcefully cleared to 0 whenever the original aspect is cleared. Bug: angleproject:2815 Change-Id: Ief3039d66bbf46468213b9e3224f7cc7541c3a2e Reviewed-on: https://chromium-review.googlesource.com/c/1312453 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 0ea96210 2018-10-30T15:14:51 Vulkan: Enable more perf tests. Also fixes the check for the correct UINT index extension that wasn't available on Vulkan. Also includes a workaround for the mock ICD not implementing buffer state for index ranges. Bug: angleproject:2923 Change-Id: Iab35809d15f890525a9e658d4148272c46cf1320 Reviewed-on: https://chromium-review.googlesource.com/c/1308733 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 749589f8 2018-10-25T12:48:49 Vulkan: Remaining disjoint timer query functions The following features where missing in c2b576d9e: - glGetIntegerv with GL_GPU_DISJOINT_EXT: this is currently impossible to query in Vulkan, so 0 is always returned. - glGetIntegerv with GL_TIMESTAMP_EXT: this is a way to query GPU timestamp without performing flushes or waiting for the GPU to finish. There is no direct correspondance in Vulkan; it's implemented by making a small submission, with no dependency to other submissions, in which there is only a timestamp query. Bug: angleproject:2885 Change-Id: I2341bd610db9084c26b6421c6f8949950ffa4de8 Reviewed-on: https://chromium-review.googlesource.com/c/1299873 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 25224e78 2018-10-22T11:56:02 Vulkan: add GPU trace events RendererVk now tries, as best as it can, to match the CPU and GPU timers on init as well as every finish(). A clock-sync event is generated for each such synchronization point. RendererVk::traceGpuEvent() is a new function that, given a command buffer, performs timestamp queries corresponding to GPU events. These queries are read back when done, without incurring GPU bubbles, at which point an event is generated with that timestamp. Bug: angleproject:2908 Change-Id: I08d7d11ff9f8ad6c9f9a9899767c9cd746d0623e Reviewed-on: https://chromium-review.googlesource.com/c/1296954 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 6165602f 2018-10-24T15:00:50 Vulkan: Throttle CPU to avoid excessive frame queuing Unthrottled, the CPU can generate and queue an increasingly large number of frames with the GPU lagging behind, especially with vsync enabled. Assuming N swapchain images, this commit adds a wait on fence for the Nth previous frame before submitting new work, that is the CPU is always at most N frames ahead of the GPU. Bug: angleproject:2908 Change-Id: Ieb2bf20168bfe9bc9d8e2219f682b01347c21dec Reviewed-on: https://chromium-review.googlesource.com/c/1296953 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi c2b576d9 2018-10-12T14:45:34 Vulkan: Implement GL_EXT_disjoint_timer_query - QueryVk::queryCounter() and relevant utils are implemented for the sake of Timestamp queries. - TimeElapsed queries are implemented using two Timestamp queries. Bug: angleproject:2885 Change-Id: Id181bd97f5a24e7e96b3ea1b819483227e64daf0 Reviewed-on: https://chromium-review.googlesource.com/c/1276806 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi c4765aa7 2018-10-12T14:40:29 Vulkan: fix glGetQueryObject not flushing glGetQueryObject* requires forward progress in the queue regardless of whether we are waiting on the result or busy-looping over whether the results are available. This commit calls flush() if the query has pending work. Additionally, this fixes a race condition where glGetQueryObject* may be accessing a query whose corresponding batch has been submitted but not yet executed. In such a case, the GPU may not have already reset the query, so we have to wait on the fence of that batch to make sure the query results are reliably available. Bug: angleproject:2855 Change-Id: I977909c6526c0778a13722a8b8b73e54ad0202f6 Reviewed-on: https://chromium-review.googlesource.com/c/1279125 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 3a482179 2018-10-11T10:34:44 Vulkan: Implement glFlush A semaphore pool is implemented to allow dynamic allocation of semaphores as needed when breaking up a frame with flushes. The pool is used both for acquiring the next image and for chaining mid-frame submissions. RendererVk::flush() is changed so that instead of taking the wait/signal semaphores as parameters, it would use the last known signaled semaphore as wait semaphore and allocates a semaphore for signaling. It would additionally wait for any extra semaphore provided externally (i.e. the surface's image acquire semaphore). Bug: angleproject:2504 Change-Id: Iecd2d5535230c48b26a6b7d078710af8730121da Reviewed-on: https://chromium-review.googlesource.com/c/1276805 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 563fbaa0 2018-10-02T11:22:01 Vulkan: Implement occlusion queries Begin and end queries insert an execution barrier in the command graph to ensure the commands around them are not reordered w.r.t to the query. Also, these commands cannot be recorded in separate secondary command buffers. Therefore, special-function nodes are created to perform the begin and end query calls on the final primary command buffer. Bug: angleproject:2855 Change-Id: Ie216dfdd6a2009deaaf744fd15d2db6899dd93e9 Reviewed-on: https://chromium-review.googlesource.com/c/1259762 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 06270c9e 2018-10-03T17:00:25 Vulkan: Safer struct initialization Using x = {}; before filling out each field, we can be sure any missing field is 0 initialized. This in turn helps us not have to specify certain fields that are generally unused (at the moment), such as pNext. Bug: angleproject:2860 Change-Id: Ia1fa2db3ecfb316673a02ac0c5e13e47e055a19f Reviewed-on: https://chromium-review.googlesource.com/c/1259764 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 0da73fed 2018-10-02T09:31:39 Vulkan: Add dumping of the command graph to GraphViz. Dot files are a graph format that can be visualized with GraphViz. Giving a small visualization output can help diagnose problems with the graph. For example extra edges or incorrect dependencies. Bug: angleproject:2379 Change-Id: I544cba11c5e33579b06fef2fb41bad60066a64e4 Reviewed-on: https://chromium-review.googlesource.com/1254383 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
Geoff Lang 2fe5e1d3 2018-08-28T14:00:24 Vulkan: Implement robustness extensions. Device recovery is not possible but device loss can be tracked. BUG=angleproject:2787 Change-Id: Ib94dd557b6b005a560b7a64275b176f7b1777211 Reviewed-on: https://chromium-review.googlesource.com/1194458 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 996628a4 2018-09-24T16:39:26 Vulkan: Add support for VkPipelineCache The cache is initialized from the application's blob cache and is occasionally written back to it for disk storage. Bug: angleproject:2516 Change-Id: I4cba4b00a7b9641c2983ef07159bc62cd10a5519 Reviewed-on: https://chromium-review.googlesource.com/1241373 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill b36a4816 2018-09-25T10:15:11 Vulkan: Add OpenGL line segment rasterization. Line rasterization rules are implemented using a shader patch. The patch does a small test and discards pixels that are outside of the OpenGL line region. The feature is disabled on Android until we can determine the root cause of the test failures. Bug: angleproject:2598 Change-Id: Ic76c5e40fa3ceff7643e735e66f5a9050240c80b Reviewed-on: https://chromium-review.googlesource.com/1120153 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Frank Henigman beb669da 2018-09-21T16:25:52 Vulkan: work around vkCmdCopyBuffer bug. It seems that vkCmdCopyBuffer on Windows with Intel GPU neglects the last region when given more than one. Work around that in LineLoopHelper::getIndexBufferForElementArrayBuffer() by adding an unused region. Enable corresponding test. BUG=angleproject:2838 Change-Id: I8847c7b2cfdb94526d4d28ba5bf1f162da3a1ed4 Reviewed-on: https://chromium-review.googlesource.com/1238887 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Frank Henigman <fjhenigman@chromium.org>
Jamie Madill 3d61ac27 2018-08-28T16:58:55 Vulkan: More micro-optimizations. Inlining more methods into headers. In total the patch series improves performance by about 60-70% in the Vulkan draw call overhead test. Bug: angleproject:2786 Change-Id: I70913ac6b3d5836c17c13e249950987df362f203 Reviewed-on: https://chromium-review.googlesource.com/1194883 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Jamie Madill 30b5d84c 2018-08-31T17:19:12 Vulkan: Fix line width caps. We would need to enable the wide lines feature to support non-unit line widths. For now just disable the caps. Bug: angleproject:2598 Bug: angleproject:2706 Change-Id: I0dd228fc2c357bdd9442c3d841be769987a53f72 Reviewed-on: https://chromium-review.googlesource.com/1127303 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 3a181e3e 2018-08-29T15:17:05 Roll VK deps forward as of 8/31/2018 Roll Vulkan ANGLE dependencies forward as of 8/31/2018. This grabs some new validation checks including point-related checks that may be interesting for bug 2727. One of these checks, related to PointSize, is firing so I've added some code in the VK debug callback to suppress those error messages for now and filed a separate bug (2796) to fix that issue in the renderer. Had to overhaul the json gen script as validation changed how these are generated. They now use a base template with some strings replaced to account for platform and Vulkan header version. Offloaded all of that work to our existing json generate script which was previously more of an intelligent copy but now had some further intelligence for transforming from input template into final json files. Had to also roll glslang forward to meet shader validation dependency. Bug: angleproject:2727 Change-Id: I929619cd258cddd6bc9c6743600e072c46736f5c Reviewed-on: https://chromium-review.googlesource.com/1194617 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
Jamie Madill 46848420 2018-08-09T10:46:06 Vulkan: Fix perftests null driver. We needed to set the CWD for the mock ICD as well. Bug: angleproject:2604 Change-Id: I1d285c478030056360fd2dceca78e231ac321219 Reviewed-on: https://chromium-review.googlesource.com/1169426 Reviewed-by: Omar El Sheikh <theoking@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Omar El Sheikh eb4b8697 2018-07-17T10:55:40 Introduced eglMakeCurrent Perf Test Currently disabled test on android Also made the default EGL device type be EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE Updated destroy function of RendererVk to properly reset the mMemoryProperties member variable Bug: angleproject:2735 Change-Id: Ie1f8ab1ac93b18eda4c10c3b10ecd4756f1d8543 Reviewed-on: https://chromium-review.googlesource.com/1140508 Commit-Queue: Omar El Sheikh <theoking@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Omar El Sheikh 0359b697 2018-07-23T17:22:00 Vulkan: Check mInFlightCommands doesn't grow too fast The mInFlightCommand vector could grow faster than the GPU can complete tasks. Check for this edge case and give the GPU a chance to catch up with work. Also allows us to enable performance tests for Draw Calls on vulkan since it was affected by this limit check before. Bug: angleproject:2742 Change-Id: I66a86ea6b5300fa3d74b07dc341aa597824b5f09 Reviewed-on: https://chromium-review.googlesource.com/1147607 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Omar El Sheikh 80d4ef10 2018-07-13T17:08:19 Vulkan: Fixed improperly set env variable After the first test using the Mock ICD runs, an environment variable VK_ICD_FILENAMES is set when previously it did not exists. The cleanup of that test, rather than deleting the environment variable, set it to an empty string, which the Vulkan loader would use for subsequent Vulkan tests, causing issues with Vulkan not finding the correct extensions. Had to disable two more tests since they started failing once those backends were enabled. Bug: angleproject:2604 Change-Id: Ie103756eed60d255d1dd92d7ef3b726183feeb1e Reviewed-on: https://chromium-review.googlesource.com/1137342 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Omar El Sheikh <theoking@google.com>
Jamie Madill 06ca634e 2018-07-12T15:56:53 Vulkan: Refactor for draw call shader patching. This refactors a few methods to enable draw call shader patching. The shader serials in the Pipeline description are inserted right before we query the pipeline cache. This is done during a draw call. Also renames the 'QueueSerial' member of the ObjectAndSerial class to just 'Serial' to more accurately reflect it usage in ShaderAndSerial. Also changes the GlslangWrapper class to have all static methods. If we need to store state we can revert these changes at some point. Also splits the GlslangWrapper link call into two static calls. One call is called to get the linked source code. The second call compiles the linked sources into shader code. Only the second call will be necessary for draw call shader patching to implement OpenGL line rasterization in Vulkan. Bug: angleproject:2598 Change-Id: I7bad3c3eeab1fb062c15a840836db4a28f841a26 Reviewed-on: https://chromium-review.googlesource.com/1127158 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Luc Ferron f786b706 2018-07-10T11:01:43 Vulkan: Enable viewport Y flipping Bug: angleproject:2728 Bug: angleproject:2726 Bug: angleproject:2673 Bug: angleproject:2729 Change-Id: Iad657a116bf9fcd06c3d4cf1918aaacba4f1fd38 Reviewed-on: https://chromium-review.googlesource.com/1131515 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Luc Ferron <lucferron@chromium.org>