src/libANGLE/renderer/vulkan/RendererVk.cpp


Log

Author Commit Date CI Message
Tobin Ehlis a25b165a 2020-08-28T12:01:44 Vulkan: Add transient flag to command pool Add the VK_COMMAND_POOL_CREATE_TRANSIENT_BIT flag when creating the PersistentCommandPool since the command buffers are only used once and then reset. Update the tracking bugs. Bug: b/166641492 Bug: b/166793850 Change-Id: I5827b5df7dd150756325421fc6ff0283bbd8b8e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2381943 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: back sept 10 - Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
David Reveman 9a19a996 2020-08-26T09:00:50 Vulkan: Use 4 MB as preferredLargeHeapBlockSize for allocator. This reduces preferredLargeHeapBlockSize from the default value of 256 MB to 4 MB, which reduces the initial block size from 32 MB to 512 KB. 4 MB is the same size as used by Chromium and Skia. It seems to be a good compromise of not wasting unused allocated space and not making too many small allocations. This change is limited to non-Qualcomm GPUs as a number of tests are failing on Qualcomm after this change and the initial investigation indicates a potential driver bug. See http://anglebug.com/4995 for more details. Bug: chromium:1122718 Bug: fuchsia:58959 Change-Id: Ifdaf863ef38e72098a04ee57dec46ee71cab6ac3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2376891 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: David Reveman <reveman@chromium.org>
Shahbaz Youssefi fde4d2f7 2020-08-28T04:19:25 Revert "Vulkan:Clean up best practices exceptions" This reverts commit 15438d3f906f4dffbd445ef01a934ffe1b8ccfbe. Reason for revert: Running end2end tests on Linux, this validation error pops a lot. Original change's description: > Vulkan:Clean up best practices exceptions > > Assign new bug ID for clean-up work. It appears that the > UNASSIGNED-BestPractices-vkCreateCommandPool-command-buffer-reset > error was already fixed. > > Bug: b/166641492 > Change-Id: I536017e0386cf5f57bb53bcba32d5df048050343 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2380510 > Reviewed-by: Tim Van Patten <timvp@google.com> > Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> > Commit-Queue: Tobin Ehlis <tobine@google.com> TBR=tobine@google.com,courtneygo@google.com,timvp@google.com,syoussefi@chromium.org,jmadill@chromium.org Change-Id: I90ee856b8bcac3e3f2b8104fb8642185a26f3e63 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: b/166641492 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2381077 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tobin Ehlis 15438d3f 2020-08-27T12:36:10 Vulkan:Clean up best practices exceptions Assign new bug ID for clean-up work. It appears that the UNASSIGNED-BestPractices-vkCreateCommandPool-command-buffer-reset error was already fixed. Bug: b/166641492 Change-Id: I536017e0386cf5f57bb53bcba32d5df048050343 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2380510 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Amy Liu 7bb75ff6 2020-08-26T15:10:59 Disable forceOldRewriteStructSamplers on Mali. The nested_array.*sampler2D_* tests can pass on Mali with disabled forceOldRewriteStructSamplers. Test: dEQP-GLES31.functional.uniform_location.nested_array.*sampler2D_* Bug: angleproject:2703 Change-Id: I34368d6ce14b81e873e2a3d60a73da4a8a866884 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2377627 Commit-Queue: Amy Liu <Amy.Liu@arm.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi c7645886 2020-08-24T16:47:21 Vulkan: Remove the flipViewportY feature This was featurized as a workaround for Intel/Windows drivers that did not render flipped in comparison to GL per Vulkan spec. This issue has long since been fixed, and due to missing parentheses the feature was accidentally unconditionally true for a long time already. Bug: angleproject:4896 Change-Id: I1db55d298bd47df649ff1f03d287d0cfa7453ea7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2372632 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 682f9141 2020-08-18T10:57:40 Remove feedback loop support from back-end. Front-end detection still in place and will be removed in a follow-up. Removes the Vulkan feature and the special clear handling. Bug: angleproject:4959 Change-Id: I5d44c3f7dbdb49d8aa0375f54b7148df09732ba2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2363208 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill e689d316 2020-08-14T22:51:03 Vulkan: Don't end RenderPass on DS feedback loops. Instead of always switching the Framebuffer to mask out depth/stencil loops we now switch the RenderPass to a "read-only" depth/stencil mode. Reduces the RenderPass count in Manhattan from 18->15. There are still a couple extra RenderPasses inserted that we can get rid. We can merge a few RenderPasses by retroactively changing a started RenderPass to "read-only" when there are no prior recorded depth writes or clears. Also adds a test to count the number of RenderPasses ANGLE generates in DS feedback loop situaions. Bug: angleproject:4959 Change-Id: I1855a45959655fc27ccd47a3469c1c672fc8fd9e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2357973 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Tim Van Patten <timvp@google.com>
David Reveman 78d10017 2020-08-16T16:13:59 Vulkan: Enable VK_KHR_bind_memory2 extension Don't assume support for VK_KHR_bind_memory2, enable the extension, if supported, during device creation. Also initialize all required extension functions for the memory allocator. Bug: angleproject:4966 Change-Id: I878939fb3324723675a2b7dec18ab453b2a9fc77 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2359529 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 3e57e349 2020-08-12T12:48:34 Vulkan: Query application name from the system While populating VkApplicationInfo::pApplicationName we are hardcoding the value to "ANGLE", instead query the value from the sytem. Bug: angleproject:4955 Change-Id: I222d5d1c0f497bf708389caa048d8b180c1bdecc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2352625 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 1dcb3eb2 2020-08-06T15:02:34 Vulkan: Don't expose MSRTT on Mac/SwiftShader Frequently causes failures as such: [...:ERROR:drawing_buffer.cc(854)] Initialization failed to allocate backbuffer. [...:INFO:CONSOLE(197)] "Unable to initialize webgl context.", source: (197) Bug: chromium:1112986 Bug: angleproject:4937 Change-Id: I5058f78434c0ac49345fe1167043f2dca759b1b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2341350 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang 4973a38f 2020-08-05T14:27:46 Supress VVL error about multi-instance heaps. VVL added a new error that ANGLE hits on AMD Windows due to the way VMA allocates memory. Supressing to allow VVL to roll forward while we investigate. Bug: angleproject:4928 Change-Id: I4afeb3fcc2e9fed96ff8276898a8c96c77206d3b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2339539 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Mohan Maiya 709472c9 2020-08-03T15:43:12 Vulkan: Fix variable scope bug during vkCreateInstance While enabling best practices layer the struct that gets added to the pNext chain is a stack variable and goes out of scope beyond the if-check. Move the struct variables out of local scope to prevent access violation errors during vkCreateInstance. Bug: b/156661359 Change-Id: Ifa470ff1e51d454782695adcf40b4db2aa1608a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2335747 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Tobin Ehlis 07cdf421 2020-07-28T09:08:46 Vulkan: Add new validation skips Skip new error UNASSIGNED-CoreValidation-Shader-InputNotProduced and best practices warning UNASSIGNED-BestPractices-vkCmdClearAttachments-clear-after-load Bug: b/156661359 Bug: angleproject:4883 Change-Id: I05bf5cac46c54bfb32fa47ea6d3398bd534450f5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2323641 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Mohan Maiya 2c3ff0a0 2020-07-25T11:35:19 Vulkan: Enable VK_KHR_get_memory_requirements2 extension Don't assume support for VK_KHR_get_memory_requirements2, enable the extension, if supported, during device creation. Bug: angleproject:4830 Change-Id: I0faf955aac8a2ae4dea636f349225672e6717662 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2319079 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Charlie Lao cf49403e 2020-07-21T11:40:56 Vulkan: Increase default uniform buffer size to 64K Since these are per context, we can increase it (and subject to the driver maxUniformBufferRange limit) to reduce the amount of descriptor set allocated. Bug: b/161391337 Change-Id: I89e5cf16ee377735c412e9a9a22c651e1c677ded Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2310910 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Tobin Ehlis dcdd6b6a 2020-05-14T14:36:31 Vulkan:Enable Validation best practices layer When Vulkan Validation layers are enabled, also enable the validation best practices layer which includes ARM's perfdoc layer. Initially adding skips for all of the best practices errors that are triggered so that these can be enabled by default. Bug: b/156661359 Change-Id: I7eab9710bf9632d07ff6b80375d3ad1789d58f7c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2202634 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 8adc5469 2020-07-02T10:15:17 Vulkan: Generate mipmap in compute An initial implementation based on AMD's FFX SPD (Single Pass Downsampler). Apart from requiring STORAGE_IMAGE support for the image format, the following limitations are in place due to FFX SPD: - Image must be 2D or 2D array (including cube maps) - Image must be single-sampled The following _can_ be supported, but not yet implemented: - sRGB formats - Integer formats - depth/stencil formats Bug: angleproject:4551 Change-Id: Ibc4d5cea701cca31e55e3d651540872bbd3b473f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2278713 Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 234be194 2020-07-15T14:55:18 Vulkan: Move mEmptyBuffer from program to ContextVk And merge that with TheNUllBuffer as well so that you only have one dummy buffer per context. Bug: b/161391337 Change-Id: I75fddb5c48393876e745ff237e11d9c5672ae10e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2300707 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao 67980f13 2020-07-08T08:51:02 Vulkan: add Buffer/Texture/ImageViewSerial class In a few places we need a unique ID to represent that object and use that to compute hash key. Right now we are using Serial for that purpose but it creates confusion with QueueSerial which we are using Serial to track GPU progress. This CL changes these usage of Serial to TextureSerial, SamplerSerial, ImageViewSerial type so that compiler can perform type checking. It also adds BufferSerial in preparation for next CL. Bug: b/159457348 Change-Id: I8e2da69c2029e4ddbcf163981ae46f85e19f751b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2287426 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 4ad0f250 2020-07-14T21:22:35 Revert "Vulkan: Enable VK_KHR_get_memory_requirements2 extension" This reverts commit d98afb787a24285eccd554daa6b8de197187a636. Reason for revert: Suspected for angle_perftests failure. See issue. Bug: chromium:1105609 Original change's description: > Vulkan: Enable VK_KHR_get_memory_requirements2 extension > > 1. Don't assume support for VK_KHR_get_memory_requirements2. > Enable the extension, if supported, during device creation. > 2. Also let VMA fill in the function pointers for these commands > based on Vulkan API version - > 1. vkGetBufferMemoryRequirements2KHR > 2. vkGetImageMemoryRequirements2KHR > > Bug: angleproject:4830 > Change-Id: Icd0b3baf56732b5f5f49f320c1feb996204169ed > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2293633 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Mohan Maiya <m.maiya@samsung.com> TBR=syoussefi@chromium.org,jmadill@chromium.org,m.maiya@samsung.com Change-Id: Ida9a333f897d87e7608d4fafe9da9f1fad0221e4 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:4830 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2298146 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Mohan Maiya d98afb78 2020-07-10T17:11:15 Vulkan: Enable VK_KHR_get_memory_requirements2 extension 1. Don't assume support for VK_KHR_get_memory_requirements2. Enable the extension, if supported, during device creation. 2. Also let VMA fill in the function pointers for these commands based on Vulkan API version - 1. vkGetBufferMemoryRequirements2KHR 2. vkGetImageMemoryRequirements2KHR Bug: angleproject:4830 Change-Id: Icd0b3baf56732b5f5f49f320c1feb996204169ed Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2293633 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Shahbaz Youssefi 120e1d66 2020-07-09T17:56:54 Vulkan: Set the wideLines features when available Bug: angleproject:4827 Change-Id: I40fc893fdaf7135e2ad782a489b59c518346db9c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2290582 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Ian Elliott 73b6b3a8 2020-06-03T14:38:34 Vulkan: Fully enable pre-rotation for Android Bug: b/157667116 Change-Id: I3e5d41eed9b27eb2b49db853d85ec5c867dd2409 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2228366 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Courtney Goeltzenleuchter f61272fb 2020-06-17T11:38:37 Add support for VK_KHR_sampler_ycbcr_conversion This adds ability for applications to import Android Hardware Buffers (AHBs) as OpenGL images which in turn can be sampled from and/or written. This was specifically tested with the common use case of importing a buffer created by an media decoder and using that as a texture source to include that video content on the screen. Tested with: - Angry Birds 2 video player (for ads) requires YUV conversion. - Basic Media Decoder example: https://github.com/android/media-samples/tree/master/BasicMediaDecoder Bug: b/155487768 Change-Id: I9255450f81aa4daa2aace7205d4f6c3f225abcca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2175103 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 65f7ab79 2020-07-02T10:04:48 Vulkan: Cleanup extension properties and features Bug: angleproject:4551 Change-Id: Iae6b94027cfaca6c72318203a286865c2e3b19a9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2279133 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 62ff54eb 2020-05-12T13:27:21 Vulkan: Featurize shadow buffers Shadow buffers help reduce the latency of glMap* operations at the cost of CPU overhead. It might not be desirable to incur such an overhead for all usecases. Featurize it but enable it by default. Bug: angleproject:4339 Change-Id: I6374618bf99677eef55fd50a139fb86f5ea70791 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2278102 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Antonio Maiorano b47cc50a 2020-06-22T10:59:09 Enable validation layer custom extensions With this change, Vulkan-ValidationLayers will allow the specified extensions to pass through, instead of being nulled out: * VK_STRUCTURE_TYPE_SAMPLER_FILTERING_PRECISION_GOOGLE * VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT Bug: b/159027603 Bug: b/154620295 Change-Id: I0ace3acdac06a6c115834ef88b0c883fa2dd4744 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2246304 Commit-Queue: Antonio Maiorano <amaiorano@google.com> Reviewed-by: Antonio Maiorano <amaiorano@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
angle-autoroll 7db2dcec 2020-06-19T07:01:08 Roll Vulkan-ValidationLayers from 04f0b691eb4c to 74ed6cfd05c1 (20 revisions) https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers.git/+log/04f0b691eb4c..74ed6cfd05c1 2020-06-18 tony@lunarg.com layers: Remove leading comma in lists 2020-06-18 mark@lunarg.com corechecks: Fix DrawIndexedIndirect VUID name 2020-06-18 jeremyk@lunarg.com tests: Add combined image sampler test 2020-06-18 jeremyk@lunarg.com layers: Add combined image sampler check 2020-06-18 jeremyk@lunarg.com layers: Add CMD_TYPE parameter to pipeline binding 2020-06-18 tony@lunarg.com layers: Add is_khr to acceleration_structure_state 2020-06-17 mark@lunarg.com tests: Don't run ManySmallIndexedDrawCall test on shieldTV 2020-06-17 s.fricke@samsung.com tests: Add export handleType VUIDs 2020-06-17 s.fricke@samsung.com layers: Add export handleType VUIDs 2020-06-17 s.fricke@samsung.com layers: Wrap non external AHB logic together 2020-06-17 s.fricke@samsung.com tests: Validate maxSamplerAllocationCount 2020-06-17 s.fricke@samsung.com layers: Validate maxSamplerAllocationCount 2020-06-17 s.fricke@samsung.com layers: Add function calls to error log messages 2020-06-17 mark@lunarg.com tests: Add filters for BP Android test failures 2020-06-17 mark@lunarg.com tests: Compile best practices tests for Android 2020-06-17 mark@lunarg.com tests: Replace setenv with private settings extension 2020-06-17 mark@lunarg.com layers: Add private settings extension and write support 2020-06-17 s.fricke@samsung.com layers: Remove invalid check for AHB format 2020-06-17 szilard.papp@arm.com tests: Adding test for triple buffering 2020-06-17 szilard.papp@arm.com practices: Adding checks for triple buffering If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/vulkan-validation-layers-angle-autoroll Please CC courtneygo@google.com on the revert to ensure that a human is aware of the problem. To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/master/autoroll/README.md Bug: None Tbr: courtneygo@google.com Change-Id: I8c35e56e998560c53e8b54bfd26749d334172b30 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2254490 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Courtney Goeltzenleuchter 2919dc6e 2020-06-15T18:39:39 Add immutable samplers to descriptor set layout To support YUV conversion we need to track the use of immutable samplers in the descriptor set layout. Bug: b/155487768 Change-Id: Ic7dc6a08551f5125c4a519b5cfada312f95ab914 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2225423 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Jamie Madill 959037e0 2020-05-25T15:40:38 Vulkan: Preserve RPs on XFB changes when possible. Instead of unconditonally ending the RenderPass we keep a set of active XFB buffers in the ContextVk. This lets us re-use RPs when we don't write to the same buffer repeatedly. Reduces the RenderPass count in our Manhattan capture from 29->23. Bug: angleproject:4622 Change-Id: I28c2d4d3db1490e5d07be3c48d21fd2cc6ff85d6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2196957 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tim Van Patten b55f0f78 2020-06-02T18:01:24 Compress Program binaries saved in blob cache The Android blob cache has a limit of 2MB, so ANGLE should compress the Program binaries that are saved into it to maximize its effectiveness. ANGLE will gzip the program binaries before being stored in the blob cache and then uncompress them when retrieved. Using gzip, the binaries are compressed to ~25% of their size when running the T-Rex benchmark. Some examples (in bytes): Uncompressed: 20193, Compressed: 4455 Uncompressed: 8767, Compressed: 2369 Uncompressed: 11144, Compressed: 2927 This doesn't appear to affect the T-Rex benchmark since all of the programs are loaded/decompressed as part of the benchmark initialization, and the programs are small enough to all fit in the blob cache without compression. Bug: b/155184635 Test: T-Rex, CQ Change-Id: Ie6a101c32ab5fd49baae1cb7aecdd26a934e15af Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2227529 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi d80adf4e 2020-06-03T11:50:04 Vulkan: Remove non-triggering validation error suppression Bug: angleproject:4510 Change-Id: I04f989943ec2abe17cfe90f32a276e20c5a42cea Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2227811 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 17b4a877 2020-05-26T17:02:48 Vulkan: Pass API version to VMA. This apparently can save on memory usage in the allocator. Reported by penghuang@chromium.org. Bug: angleproject:4685 Change-Id: I6f29280e3fe16f3388c4f8412e0acb09d7f16e58 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2216714 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 0df92012 2020-06-03T17:08:43 Rename Platform.h to PlatformMethods.h. "platform.h" is too common a name and causes headers to be included incorrectly. Disambiguate the header using a more specific name. Solves a problem that came up with the GLES 1 tests and the standalone test harness. Bug: angleproject:3162 Change-Id: I88229a2c9407e0db57f5beee44daa11a4075f700 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2229065 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi b131d25f 2020-06-03T10:53:39 Vulkan: Remove validation error suppressions for VVL bug These warnings were generated due to a validation layer bug, which is presumably fixed now. Bug: angleproject:4572 Bug: angleproject:4577 Bug: angleproject:4578 Bug: angleproject:4579 Bug: angleproject:4580 Bug: angleproject:4583 Change-Id: I8799c4e33bc38f83e0fdd364cf6e7eb607c39890 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2227810 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 8f3aa154 2020-06-03T10:29:21 Vulkan: Remove validation error suppression for fixed issue Bug: angleproject:3450 Change-Id: Ie88aedae6e4573b2c31e389f7d0ff5c8d1059647 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2227856 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 93577b20 2020-05-28T15:16:46 Vulkan: Move "null" buffer to RendererVk. This will allow the TransformFeedback and other classes to share the same buffer. Also should save a bit of memory. Bug: chromium:1086532 Change-Id: I198170b4e09165a4770b68af6df9aa7b690e8d66 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2219138 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Jamie Madill b947498b 2020-05-28T13:06:13 Vulkan: Clean up VMA wrapper classes. Make these more consistent with the rest of the wrapper classes. Also handle some VkResult errors that were being ignored. Will pave the way for better handling of buffer allocation error conditions. Bug: chromium:1086532 Change-Id: Idc5b3f0e2945b1f44f152d33e8cc572f83a6b658 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2219136 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Mohan Maiya <m.maiya@samsung.com>
Ethan Lee 209cf8fa 2020-05-27T16:23:57 GGP: Check and enable VK_GGP_frame_token Bug: angleproject:4668 Change-Id: I9ecbdf37e206cb6eb93699091bbff70ad898040f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2219032 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 02fa7313 2020-05-05T17:01:18 Vulkan:Initial worker thread disabled by default Created new CommandProcessor class that can be run as a worker thread. Running CommandProcessor within RendererVk as a worker thread that takes a CommmandBufferHelper (CBH) ptr as the interface and processes that CBH into a primary command buffer. Main thread has a queue of CBH to draw from. After submitting a CBH to the worker, it pulls next CBH from the queue. Worker thread releases CBH back to the main thread queue when done. Synchronization goes two ways: 1. Work submitted to worker thread is managaed with a mutex and condition variable based around the work queue. 2. Available CBH ptrs for the main thread have a mutex and condition variable that manages the CBH queue. The worker thread is disabled by default, and, when enabled, it will currently behave and perform as the non-threaded code. This is because the kNumCommandBuffers const in ContextVk.h is set to 2. With only 2 command buffers, they will be assigned to the inside and outside RenderPass command buffers respectively. Then, as soon as one is submitted, the main thread will stall waiting for it to be completed and put back into the queue mentioned in #2 above. The next step is to move command submission to the worker thread and update the number of command buffers so that processing/submission will occur in parallel with the main thread. Right now there is a race condition issue when attempting to run in parallel because the main thread updates and submits the same primary command buffers that are used in the worker thread, which is in violation of the Vulkan spec. The follow-on CL will fix this issue as the main thread will only touch SecondaryCommandBuffers and the worker thread will be the only thread touching the primary command buffers. Bug: b/154030730 Change-Id: Ib0c518bbd7ca9a3a7e789f4e1f2f7131ddc0509e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2174719 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tim Van Patten f5dace0f 2020-05-22T19:02:49 Vulkan: Increase GLES support to 3.1 Update getMaxConformantESVersion() to support GLES 3.1. This requires skipping some tests on Nvidia due to XFB failures. dEQP-GLES3.functional.transform_feedback.array_element.interleaved.* dEQP-GLES3.functional.transform_feedback.array_element.separate.* dEQP-GLES3.functional.transform_feedback.array.interleaved.* dEQP-GLES3.functional.transform_feedback.array.separate.* dEQP-GLES3.functional.transform_feedback.random.* Bug: angleproject:3520 Test: CQ Change-Id: I3de0e8f7a9e9c6e800be9eb2c04e713e1f88fc08 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2213810 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Tobin Ehlis d3d7b95b 2020-05-19T17:27:50 Vulkan:Migrate timer sync functions to one-off cmd buffer ContextVk's getTimestamp() and synchronizeCpuGpuTime() were the two places that mCommandQueue was used outside of processing SecondaryCommandBuffers. Migrating those functions to use the one- off command buffer instead. This will allow for the removal of mCommandQueue from ContextVk as we migrate it to RendererVk instead for threading phase2 development. Bug: b/154030730 Change-Id: Ic00ce56739dadcdc4b5a1b1839e0e18603bfe0eb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2209312 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
Charlie Lao 33cf03cd 2020-05-20T20:45:34 Vulkan: change preferAggregateBarrierCalls to accomodate ARM on linux Bug: angleproject:4633 Change-Id: Ic198cef1afbad7dc96cead690daa46f07a653e96 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2211321 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Sunny Sun <sunny.sun@arm.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Charlie Lao 258d94f6 2020-05-18T16:21:50 Vulkan: Add workaround for nvidia to always merge barriers into one vkCmdPipelineBarrier call Nvidia preferes one barrier call than multiple calls with fine grained stage dependency information. They do not care much about stage dependency. This adds a feature flag that sets to true on nvidia and will merge all barriers into one call. Bug: angleproject:4633 Change-Id: I204484aa4c5989655f74d70a0eaa235c3c83f548 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2207635 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Antonio Maiorano 4f343f3e 2020-05-13T14:11:51 Reland "Add support for GL_CHROMIUM_texture_filtering" This is a reland of 38780ae3921d2570316119a881adfb9520e7e296 modulo the changes to disable VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT, as this was causing problems. With this landed, the extension will not work on SwiftShader until we find a way to allow this extension through the validation layers. Bug: b/146423360 Bug: b/154620295 Change-Id: Ie09fc507c01a47be3bb227bc78771660170ba5d3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2199639 Commit-Queue: Antonio Maiorano <amaiorano@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tim Van Patten 3b82fdcf 2020-05-12T23:44:07 Revert "Add support for GL_CHROMIUM_texture_filtering" This reverts commit 38780ae3921d2570316119a881adfb9520e7e296. Reason for revert: Breaks SWANGLE-VK: 05-12 23:42:28.612 22836 22861 D libEGL : dlopen_ext from APK (libEGL_angle.so) success at 0x79f4485a10 05-12 23:42:28.617 22836 22861 D libEGL : dlopen_ext from APK (libGLESv1_CM_angle.so) success at 0x79f4485eb0 05-12 23:42:28.619 22836 22861 D libEGL : dlopen_ext from APK (libGLESv2_angle.so) success at 0x79f4485c60 05-12 23:42:28.624 14223 14223 D StatusBar: disable<e i a s b h r c s > disable2<q i n > 05-12 23:42:28.633 14014 14057 V DisplayPowerController: Brightness [0.19986142] reason changing to: 'automatic', previous reason: 'automatic [ dim ]'. 05-12 23:42:28.635 22836 22861 D vulkan : searching for layers in '/data/app/~~0AfWfBsFEO78tqKlnanevg==/org.khronos.gl_cts-NOs3SGclHqlbcqe-08gHrw==/lib/arm64' 05-12 23:42:28.635 22836 22861 D vulkan : searching for layers in '/data/app/~~0AfWfBsFEO78tqKlnanevg==/org.khronos.gl_cts-NOs3SGclHqlbcqe-08gHrw==/base.apk!/lib/arm64-v8a' 05-12 23:42:28.632 22836 22836 W .khronos.gl_cts: type=1400 audit(0.0:218): avc: denied { ptrace } for scontext=u:r:zygote:s0 tcontext=u:r:untrusted_app_25:s0:c512,c768 tclass=process permissive=0 b/77925912 app=org.khronos.gl_cts 05-12 23:42:28.636 14014 14034 I EventSequenceValidator: Transition from ACTIVITY_LAUNCHED to ACTIVITY_FINISHED 05-12 23:42:28.637 22836 22861 F SwiftShader: external/swiftshader/src/Vulkan/libVulkan.cpp:425 vkCreateInstance TRACE_ASSERT: pCreateInfo->pNext sType = 1000247000 --------- beginning of crash 05-12 23:42:28.637 22836 22861 F libc : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 22861 (.khronos.gl_cts), pid 22836 (.khronos.gl_cts) Original change's description: > Add support for GL_CHROMIUM_texture_filtering > > Chromium enables a custom extension, GL_CHROMIUM_texture_filtering, when > using SwiftShaderGL, to enable high precision filtering. This change > makes it so ANGLE also handles this same extension when using the > SwiftShaderVK backend, by enabling the new > VK_GOOGLE_sampler_filtering_precision custom extension. > > Bug: b/146423360 > Bug: b/154620295 > Change-Id: I69cafc1ccf5970a3d220ac7e13ec3c8fdd4a9643 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2185822 > Commit-Queue: Antonio Maiorano <amaiorano@google.com> > Commit-Queue: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=geofflang@chromium.org,jmadill@chromium.org,amaiorano@google.com # Not skipping CQ checks because original CL landed > 1 day ago. Bug: b/146423360, b/154620295 Change-Id: I803d7a7baac81cf178b59c4bf2789346ec1d3f87 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2197168 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Antonio Maiorano 38780ae3 2020-05-06T16:05:02 Add support for GL_CHROMIUM_texture_filtering Chromium enables a custom extension, GL_CHROMIUM_texture_filtering, when using SwiftShaderGL, to enable high precision filtering. This change makes it so ANGLE also handles this same extension when using the SwiftShaderVK backend, by enabling the new VK_GOOGLE_sampler_filtering_precision custom extension. Bug: b/146423360 Bug: b/154620295 Change-Id: I69cafc1ccf5970a3d220ac7e13ec3c8fdd4a9643 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2185822 Commit-Queue: Antonio Maiorano <amaiorano@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Michael Spang 605af42e 2020-03-04T21:52:53 Vulkan: Move ICD overrides to a common place We also need the bundled ICDs and selection logic for certain tests that create a vulkan instance. If we don't, the tests will use default vulkan even if ANGLE is using swiftshader-vulkan. Tests of driver specific handle types (e..g opaque fd) will fail in this case. Bug: angleproject:4092 Change-Id: Iff089c9341b8b533ee8634923d0177c5dbcd5cc8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2088659 Commit-Queue: Michael Spang <spang@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Jonah Ryan-Davis 3cb9c4be 2020-03-13T13:56:47 Statically link vulkan-loader on Mac Disable angle_shared_libvulkan on Mac since we are the only client. Re-add codepaths to support this. Bug: angleproject:4477 Change-Id: Ie128c83adaae741636541bbfd6105d160d874a8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2102954 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Tobin Ehlis <tobine@google.com>
Tobin Ehlis 23621826 2020-04-23T10:09:03 Vulkan: Manual Validation Layer Roll Latest Vulkan validation layer roll is hitting new error so added exception and rolling manually. Bug: angleproject:4583 Change-Id: Id9f8be7d2e20156ad8397ee0ba7ea5fcc12f6d28 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2163133 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
Jeff Vigil e20f36f4 2020-04-21T15:45:44 EGL: Implement EGL_ANDROID_native_fence_sync on vulkan Check the following - 1. Vulkan ICD supports VK_KHR_external_fence_fd 2. ExternalFenceProperties and ExternalSemaphoreProperties support Android FD. eglCreateSync - if FD was provided import to VkFence, else create VkFence with new FD and then flush and submit VkFence on next vkQueueSubmit. eglGetSyncAttrib - for status call vkGetFenceStatus. eglDupNativeFenceFdANDROID - return FD from vkGetFenceFD call. eglClientWaitSync - call vkWaitForFences. eglWaitSync - dup FD, create VkSemaphore and import FD, then flush() and add VkSemaphore to next vkQueueSubmit as a waiting semaphore. Extended end2end test suite with nativefence test cases. Bug: angleproject:2517 Test: angle_end2end_tests --gtest_filter=EGLSyncTest.AndroidNativeFence_* Change-Id: I8f6a6f4c3d71d83007f662b78377aa015a740035 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2026177 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 492ec932 2020-04-21T13:38:41 Vulkan: Track allocated sampler counts. Helps to diagnose perf bugs where resources are over-allocated. Also can be useful to evaluate caching strategies. Bug: angleproject:4517 Change-Id: I48df5a09fbc394fa0b1712fa8cf28a179665e6e7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2159293 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
Jamie Madill 6fc0066a 2020-04-21T17:40:54 Vulkan: Add a sampler cache. This uses a packed sampler description to re-use samplers for multliple VkImages. The samplers will persist for the lifetime of RendererVk. In the future we could look at doing cache eviction for large object counts. Reduces the active VkSampler cache in Manhattan from over 1200 to 9. Also should reduce the number of VkSamplers used with Chrome. Bug: angleproject:4491 Change-Id: Idca00e4ed8cb660a0865281544aaa57cf884bbdb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2160771 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen dadd1986 2020-04-21T01:50:00 Implement GL_APPLE_clip_distance - Built-in variable gl_ClipDistance has been added to compiler. - Desktop GL: gl_ClipDistance is supported since GL 3.0. Enable/Disable each gl_ClipDistances[i] works out of the box via glEnable(). - Vulkan/Metal: Use uniform variable to control writing to each gl_ClipDistance. One bit flag controls one element in the gl_ClipDistance array. The writing to the disabled element in vertex shader will be ignored, and turned into zero assignment instead. - Direct3D/Mobile GL: Not implemented yet. - Added ClipDistanceTest to gl_tests and compiler unittests. - GL_APPLE_clip_distance is a subset of GL_EXT_clip_cull_distance, so GL_EXT_clip_cull_distance could be implemented in future if needed. Bug: angleproject:4452 Change-Id: I571ac8b56826989808a680226a04bec4cf59988e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2084324 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya b7d6949b 2020-04-17T13:36:14 Vulkan: Enable persistently mapped buffer objects The VMA allocator has a handy feature where during memory allocation we can request persistently mapped memory. This saves IOCTL overhead for apps that update buffers frequently. Bug: angleproject:2162 Change-Id: I870d880033beec343efae6de06f1c5935de4c2c1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2155131 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tobin Ehlis <tobine@google.com>
Tobin Ehlis 293c36c0 2020-04-20T17:35:19 Vulkan: Manual validation roll Manually roll validation layers to latest and ignore two more VUIDs that are being flagged with latest layers. Bug: angleproject:4578 Bug: angleproject:4579 Bug: angleproject:4580 Change-Id: I4fc46d9df3fa3be4be1f8b773eb2d63e6f4bbd92 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2158265 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Tobin Ehlis 139f8149 2020-04-20T14:04:25 Vulkan: Suppress VUID-vkCmdClearColorImage-image-01993 The latest VVL roll is generating many new errors for VUID-vkCmdClearColorImage-image-01993. This CL will suppress the error messages to prevent the test failures until they can be fixed. Bug: angleproject:4577 Change-Id: I3ea4986c1f43c7d7921761e537d6d51cac3327e5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2157853 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Tim Van Patten ebc4846d 2020-04-17T10:42:02 Vulkan: Suppress VUID-vkCmdCopyImageToBuffer-srcImage-01998 The latest VVL roll is generating many new errors for VUID-vkCmdCopyImageToBuffer-srcImage-01998. This CL will suppress the error messages to prevent the test failures until they can be fixed. Bug: angleproject:4572 Test: BindUniformLocationES31Test.ArrayOfArrays/ES3_1_Vulkan_SwiftShader Change-Id: I6b36ab64cea8490e577f9077bb44fc7e5023fbda Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2154833 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>
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>
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>
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 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>
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>
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 b1b6a171 2020-03-10T14:20:36 Vulkan: Disable robustness support Swiftshader does not currently have the ability to behave in a way for ANGLE to support KHR_robustness. Disable for now until that functionality is available. Bug: angleproject:3058 Bug: swiftshader:145 Change-Id: I1c1b8147f6b9cf6f8d0da633dfe0f61ebfab5175 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2097053 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com>
Tobin Ehlis 1a5c7a16 2020-02-25T12:02:31 Reland "Vulkan:Include precision qualifier in GLSL" Currently still ignoring precision qualifiers for Vulkan shaders by default, but have added feature "enablePrecisionQualifiers" that can be enabled in order to include precision qualifiers. With this initial implementation, it's possible to get precision qualifier mis-matches in the generated GLSL 4.50. According to the spec this is allowed. From GLSLangSpec 4.50 section 4.7 "Precision and Precision Qualifiers": For the purposes of determining if an output from one shader stage matches an input of the next stage, the precision qualifier need not match. However, when converted to SPIR-V and run through the shader validation any mismatches will cause shader validation errors. Initially just ignoring those errors with this commit. Bug: angleproject:3078 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057749 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com> Change-Id: Ieecca604bb2c834c9b1c2bcab85279d1f8755dfa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2086280
Ian Elliott f143ab1f 2020-03-03T17:15:38 Vulkan: Disable forceOldRewriteStructSamplers for SwS-Android Disable the forceOldRewriteStructSamplers feature for SwiftShader on Android. Another change fixed the issue that prevented SwiftShader on Android from supporting sampler arrays as parameters. The Qualcomm driver still cannot support sampler arrays as parameters, and so it still needs forceOldRewriteStructSamplers. Bug: angleproject:4071 Bug: angleproject:2703 Change-Id: I77fbfacdad6cd9cc918c79fa0918f15de0558ce0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2086282 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Xiaoxuan Liu f8b28678 2020-02-26T19:12:39 Vulkan: Add support for VK_EXT_index_type_uint8 Enable VK_EXT_index_type_uint8 Vulkan extension if supported by VkDevice. Bug: angleproject:4405 Change-Id: I84d030497898c5944a36d9a88a31e7377ccd5e9e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2082391 Commit-Queue: Xiaoxuan Liu <xiaoxuan.liu@arm.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis ff60abaf 2020-02-28T14:06:07 Vulkan:Disable FramebufferVk cache on Apple Currently hitting a crash on Apple so disabling FramebufferVk cache. Bug: angleproject:4442 Change-Id: I3824252210aeeaf9919c8d17730395b394a50862 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2080661 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Tobin Ehlis a60e4973 2020-02-27T20:11:20 Revert "Vulkan:Include precision qualifier in GLSL" This reverts commit 93e72f5f0eb80b89334ea8fe577b32901a00b5fb. Reason for revert: This is having a negative impact on gfxbench Manhattan 3.1 tests (20-30%) with only a minor improvement (~4%) in TRex offscreen. Pulling out for now and need to re-evaluate best solution here. Original change's description: > Vulkan:Include precision qualifier in GLSL > > With this initial implementation, it's possible to get precision > qualifier mis-matches in the generated GLSL 4.50. According to the > spec this is allowed. From GLSLangSpec 4.50 section 4.7 "Precision and > Precision Qualifiers": > > For the purposes of determining if an output from one shader stage > matches an input of the next stage, the precision qualifier need not > match. > > However, when converted to SPIR-V and run through the shader validation > any mismatches will cause shader validation errors. Initially just > ignoring those errors with this commit. > > Bug: angleproject:3078 > Change-Id: Ia2b04f90f0a7b6b1302c1b1b3e32bcfd8db9ed49 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057749 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Tobin Ehlis <tobine@google.com> > Reviewed-by: Tim Van Patten <timvp@google.com> > Commit-Queue: Tobin Ehlis <tobine@google.com> TBR=tobine@google.com,timvp@google.com,jmadill@chromium.org # Not skipping CQ checks because original CL landed > 1 day ago. Bug: angleproject:3078 Change-Id: I84984e2a963bde573f0f1de585001ceb83623c89 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2079334 Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Ian Elliott e488d8b8 2020-02-26T16:11:29 Vulkan: Implement Android pre-rotation As an Android GLES driver on top of Vulkan, ANGLE must pre-rotate rendering on behalf of the application. This involves modifying the vertex shader to multiply gl_Position with a mat2 "rotation matrix". Not doing so means that SurfaceFlinger (SF) will perform a costly rotation blit before presenting every image. Setting WindowSurfaceVk::mPreTransform to mCurrentTransform tells SF to not do the blit. When the surface is rotated 90 or 270 degrees, the width and height must be swapped for: - The swapchain images, and for any depth, stencil, and/or multisample attachments used with the swapchain image. - The viewport, scissor, and render area. Because the Metal back-end shares the TranslatorVulkan, it will define the same preRotation (mat2) DriverUniform that is used for Vulkan. Bug: angleproject:3502 Change-Id: I968dbe8869ba0f50de18dd41f1195e847c06b545 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2038272 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis 93e72f5f 2020-02-25T12:02:31 Vulkan:Include precision qualifier in GLSL With this initial implementation, it's possible to get precision qualifier mis-matches in the generated GLSL 4.50. According to the spec this is allowed. From GLSLangSpec 4.50 section 4.7 "Precision and Precision Qualifiers": For the purposes of determining if an output from one shader stage matches an input of the next stage, the precision qualifier need not match. However, when converted to SPIR-V and run through the shader validation any mismatches will cause shader validation errors. Initially just ignoring those errors with this commit. Bug: angleproject:3078 Change-Id: Ia2b04f90f0a7b6b1302c1b1b3e32bcfd8db9ed49 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057749 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Brandon Schade 8aea6d5a 2020-02-25T11:22:00 glslang: enforce initialize and release as once per process Bug: angleproject:4354 Change-Id: Ice0912a90d4e9a4fe3fdaf67d67292afc0eba8a2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2073201 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 660c0dd6 2020-02-25T13:30:33 Vulkan: Fix padding out Buffer allocations on AMD. We would often pad incorrectly given the constraints of the max stride. We shouldn't really be rounding up the buffer size, but we should instead be adding the max alignment size to the end of the buffer. Bug: angleproject:4428 Change-Id: Id2afc572c85985548a18f60b42cdc388d83d5c4c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2071235 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Brandon Schade 46cb0f62 2020-02-21T11:38:17 Vulkan: prevent volk reloading on null instance and devices Bug: angleproject:4419 Change-Id: I82f9bb157e88754efd074358dccef1bb82cab0f7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2068902 Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill a741abb9 2020-02-21T16:37:37 Vulkan: Rename CommandGraphResource to Resource. Also renames the h and cpp files to ResourceVk (to keep distinct from other resource.h/cpp files) and renames 'onResourceAccess' to 'retain'. Cleans up a few remaining mentions of the command graph in comments. Bug: angleproject:4029 Change-Id: Ifc8e880c8cea3fc48a4aec4730191c88aa35a076 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2065920 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Michael Spang c4197713 2019-06-03T19:23:02 Implement glImportMemoryZirconHandle & glImportSemaphoreZirconHandle Implement import of fuchsia external objects passed by zircon handle. This works exactly the same as with file descriptors. Bug: angleproject:3492 Change-Id: I4d46917dfc5902f00c94550158a9f8073097f0a4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1642334 Commit-Queue: Michael Spang <spang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill c58458e6 2020-02-19T14:51:41 Vulkan: Remove CommandGraph code. Also updates relevant comments to no longer refer to a graph. Bug: angleproject:4029 Change-Id: Ic29716e9ae4926870f902947d49d8fee7af98662 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2057804 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Jamie Madill ce4918f1 2020-02-19T09:39:44 Vulkan: Sanitize Images & Buffers with non-zero values. Only enabled for specific tests at the moment. This CL allows our tests to sanitizes memory for the robust resource access extension. It is quite slow so should not be enabled by default. Only works for 1 level 2D color textures and buffers. Makes several flaky robust resource initialization tests consistently fail. Controlled via an angle::Feature in FeaturesVk. It works by initializing memory to an abitrary non-zero value: - if newly allocated memory is mappable, we map it in init and set it - if a buffer or texture can be a transfer destination, we use a staging resource - otherwise we don't attempt to initialize the resource. Bug: angleproject:4384 Change-Id: I9b4f347bfcddf3096f491ed0243bef86837feaa0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2043271 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 12a36dd9 2020-02-14T12:48:20 Vulkan: Add debug utils functions to wrapper. Also adds a more consistent way of checking if the debug utils extension is enabled. Enables adding support for the debug utils markers with the command graph disabled. Bug: angleproject:4029 Change-Id: I5f8762921b06f54e400c25764012ab70e10bfb8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2055554 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 74ab0bff 2020-02-12T17:29:27 Vulkan: Disable command graph by default. Also removes the angle_end2end_tests feature override. Bug: angleproject:4029 Change-Id: I0d0bd087fc2143360185592d9fa1238a9bafc55d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2046054 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Jonah Ryan-Davis 806ba566 2019-12-12T13:02:01 Extend ANGLE_iosurface_client_buffer to Vulkan backend for Swangle Implement an IOSurface-backed pBuffer surface for the Vulkan backend on Mac, through SwANGLE. ANGLE will pass a raw pointer to Swiftshader and handle locking/unlocking the IOSurface. Bug: chromium:1015454 Change-Id: Ia3ead55334736003d405b54ba8dcc7701706fbb2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1965434 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill eb63016d 2020-02-04T16:15:41 Add environment overrides for ANGLE features. Allows the application to override ANGLE behaviour without having to modify the code or use the ANGLE extension. Useful for testing with the command graph refactor. Adds a new string utility for parsing lists of strings from environment variables. Bug: angleproject:4029 Change-Id: Ibae93b743c0c385392cd259d9604ce2f2ed988dc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2037784 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 49a53d68 2020-01-30T16:30:30 Vulkan: Request used features Some features were used but not enabled. There is no validation error for this. This change enables the following features: - shaderStorageBufferArrayDynamicIndexing: used by atomic counter emulation. - shaderSampledImageArrayDynamicIndexing: used by sampler array of array emulation, as well EXT_gpu_shader5. - shaderUniformBufferArrayDynamicIndexing: used by EXT_gpu_shader5. Bug: angleproject:4071 Change-Id: I582750d1552055deeec50485e6511788b98490c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2032144 Reviewed-by: Tobin Ehlis <tobine@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Tobin Ehlis 1736c47b 2020-01-31T11:16:41 Vulkan: Remove transient cmd buffer workaround We no longer need this workaround. Also mCommandPoolFreeList dead code. Bug: angleproject:3508 Change-Id: Ib73ddd431eb1bf9a55c3421111af4df5976cc1fb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2033485 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Charlie Lao 71153201 2020-01-29T14:42:30 Vulkan: Disable restartRenderPassAfterLoadOpClear workaround This workaround was added due to qualcomm driver bug b/129281932. But this has been fixed with recent drivers. Removing the WR here so that it will not negatively affect performance. Bug: angleproject:4344 Change-Id: Iea2ec86082a0ced64bfe843bf916c6bdb2aea60b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2029210 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Tobin Ehlis <tobine@google.com>
Michael Spang 053929ac 2020-01-24T18:15:38 Fuchsia: Enable perFrameWindowSizeQuery by default Fuchsia won't return VK_ERROR_OUT_OF_DATE_KHR after a size change, so we need to check every frame. In fact we don't even tell Scenic what the new size is during resize, because it does not care - the surface size determines the "window size", not the other way around. Bug: angleproject:4348 Change-Id: I8f9af0d1379f4993865c7ccedc9aba3cab90cf54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2023914 Commit-Queue: Michael Spang <spang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 71e6afb1 2020-01-14T14:12:31 Vulkan: Set set/binding in SPIR-V This change introduces a SPIR-V transformer that modifies shader interface variable decorations directly in SPIR-V instead of manipulating the input GLSL. Currently, descriptor set and binding indices are set by the transformer. The shader translator outputs arbitrary set and binding indices. Once compiled by glslang, the SPIR-V transformer modifies these decorations. The ultimate goal is to be able to modify the SPIR-V again when program pipeline objects decide a different set/binding is necessary. Bug: angleproject:3394 Change-Id: If358265a72bf1fe9f5676562b39a632cb2e05dc4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2001477 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Courtney Goeltzenleuchter d0b4eaf6 2020-01-16T09:38:28 Vulkan: Allow user to specify preferred device On a platform with multiple graphics devices (e.g. laptop with integrated and descrete devices) it's handy to be able to specify the specific device we want ANGLE to use. Setting the environment variable ANGLE_PREFERRED_DEVICE to the device name as returned by VkPhysicalDeviceProperties.deviceName will select that device. Bug: angleproject:4305 Change-Id: Ib16895add2c36a59135942b52401ceb7b6bc0895 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2002737 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jeff Vigil 564eb6f2 2019-11-22T16:46:02 Implement EGL_IMG_context_priority Change RendererVk to have 3 VkQueues instead of one. Each queue has a priority. To match extension: Low, Med, High. gl::Context contains priority. ContextVk contains a reference to one of the queues. Every call to vulkan that uses queue, uses the associated context queue. Bug: angleproject:3962 Change-Id: Ibd913a07a81c77bd975921d6dbae6a222842e88b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1978154 Commit-Queue: Jeff Vigil <j.vigil@samsung.com> Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 13205b93 2020-01-16T14:48:12 Vulkan: Cleanup device feature query and enabling All device extension features and properties queries are now performed in a single call for each (i.e. one for features, one for properties), with all the extension structs chained. Then based on which feature is present (not just whether the extension is supported), the extensions and features are enabled. In the process, it fixes the following issues: - If VK_EXT_vertex_attribute_divisor is present, but the necessary vertexAttributeInstanceRateDivisor feature is not supported, that feature is not enabled and the emulation path is taken. Incidentally, this also fixes an issue with renderdoc that refuses to replay captures on such devices. - If VK_EXT_transform_feedback is present, but the necessary transformFeedback feature is not supported, similarly that feature is not enabled and the emulation path is taken. Bug: angleproject:4306 Bug: angleproject:4027 Change-Id: I0969064cba811d215c37dfe551b0ceedb334051c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2005111 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tobin Ehlis <tobine@google.com>
Jamie Madill 62475e95 2020-01-20T11:16:24 Allow tests to pick ANGLE features. This uses the EGL_ANGLE_feature_control extension through the test harness to control feature selection via a test config. This obviates the need for the hacky platform methods table override. Also adds a command graph feature that will be used to prototype the command graph linearization for Vulkan. Bug: angleproject:4029 Change-Id: Id37fadd5d2c317c9d9dd90dfab1fdc8e4ac3701f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2007612 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 6b275406 2020-01-09T11:14:47 Vulkan: Workaround vertex attributes vs stride issue on AMD Under robustBufferAccess, Vulkan states that: Vertex input attributes are considered out of bounds if the offset of the attribute in the bound vertex buffer range plus the size of the attribute is greater than either: - vertexBufferRangeSize, if bindingStride == 0; or - (vertexBufferRangeSize - (vertexBufferRangeSize % bindingStride)) The latter implies that if the buffer size is not a multiple of the vertex attribute stride, what lies beyond the last multiple of stride is considered out of bounds. It also says: Out-of-bounds buffer loads will return any of the following values: - Values from anywhere within the memory range(s) bound to the buffer (possibly including bytes of memory past the end of the buffer, up to the end of the bound range). - Zero values, or (0,0,0,x) vectors for vector reads where x is a valid value represented in the type of the vector components and may be any of ... The first bullet point indicates that the driver is allowed to load the attribute values from the buffer if its range still lies within the buffer size. Take the following example: - Buffer size = 12 - Attribute stride = 8 - Attribute offset = 0 - Attribute size = 4 Basically the buffer is thus laid out as follows: attr stride _________/\_________ / \ +----------+----------+----------+ | vertex 0 | padding | vertex 1 | +----------+----------+----------+ \___ ____/ V attr size In the above example, the attribute for vertex 1 is considered out of bounds, but the driver is allowed to either read it correctly, or return (0, 0, 0, 1) for it. Most drivers implement the former, while AMD implements the latter. This change introduces a workaround for AMD where GL_MAX_VERTEX_ATTRIB_STRIDE is limited to 2048 (the common value for it according to gpuinfo.org) and conservatively rounds up every buffer allocation to that size. While technically, this workaround should be applied on any device with the robustBufferAccess feature enabled, it is currently limited to AMD to avoid the inefficiency. A possible future revision of Vulkan may relax the above restrictions. Bug: angleproject:2848 Change-Id: Ida5ae5d777da10f22ce8be5a09a7644b5bbd778e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1991709 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Eric Binet 5aed7c74 2020-01-08T17:42:21 Narrow point size range clamping to affected versions Bug: angleproject:2970 Change-Id: Ie14725b0cf30738d394320c24a72bc947135f5cf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1993204 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Eric Binet 23b8857b 2020-01-08T14:07:53 Fix RendererVk::getMaxSupportedESVersion() to truly downgrade max version Added a small helper function (LimitVersionTo) to prevent future mistakes. Bug: angleproject:4168 Change-Id: Ia19312459540adbc2788ad0a5cb3d19ef1ff784f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1992185 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tobin Ehlis 2c63b83c 2020-01-03T15:44:30 Vulkan:Enable DebugUtils extension for Android Enable DebugUtils Vulkan extension for Android. This rolls VK Validation Layer dep forward to include a fix that allows this extension to work correctly with Android loader. Here's the Validation layer fix: https://github.com/KhronosGroup/Vulkan-ValidationLayers/pull/1464 Bug: angleproject:3852 Change-Id: I74c55c0a66a7ee4db3b623221c8fb6c4433a39af Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1985175 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 942d9152 2019-12-23T15:31:52 EGL: Add support for EGL_KHR_gl_colorspace extension If the Vulkan backend supports VK_EXT_swapchain_colorspace extension, enable the option for applications to create surfaces with non-linear formats. Not all formats have non-linear versions and is platform specific. Tests: dEQP-EGL.functional.wide_color.* angle_deqp_egl_tests --use-angle=vulkan --deqp-gl-context-type=egl --deqp-case=dEQP-EGL.functional.wide_color.* Bug: angleproject:2514 Change-Id: I441ee797cceef92c84473bfa18605c4fd8180de1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1951963 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi e2fc92ca 2019-12-23T14:21:28 Vulkan: Fix swiftshader device selection A recent SwS roll changed the deviceName of swiftshader to include the backend (LLVM for example). That made ANGLE no longer recognize SwiftShader. This change looks for the known SwS device name as a prefix of the deviceName retrieved from the device, rather than a complete match. Bug: angleproject:3876 Change-Id: If6dacb1e5685493d5334cad2015439f0f6b71124 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1980275 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>