src/libANGLE


Log

Author Commit Date CI Message
Cody Northrop f44a6fd2 2021-11-18T20:15:31 GLES1: Hard code integer values in the ubershader This CL continues the process of removing uniform values from the GLES1 ubershader to increase speed on mobile platforms. The first phase removed bools 2091451e. We've identified integers (enums) as providing the biggest bang for buck to optimize speed while having acceptable program generation. Allowing floats as well proved too much specialization. Many GLES1 conformance tests would grind to a halt while providing little to no benefit to app traces. This CL does the following: * Create a GLES1ShaderState class that contains hashable data * Populate it with all states influencing ubershader generation * Hash the class to perform the lookup of existing programs Frame times on Android ARM with locked GPU clocks: Trace Before After dr_driving: 4.2986 -> 0.8155 sonic_the_hedgehog: 2.8223 -> 0.6254 summoners_war: 15.9810 -> 2.3937 wordscapes: 7.6167 -> 1.1496 zillow: 2.9368 -> 1.9318 Test: end2end, perftests, gles1_conformance Bug: angleproject:6644 Change-Id: I060280e282d7b514d3e410c4f8c5e09659e85d3b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3280355 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Lingfeng Yang <lfy@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Ian Elliott 1f5eb6b8 2021-11-17T16:42:20 Avoid Android vkEnumerateDeviceExtensionProperties() bug This works around a race-condition during Android start-up, when ANGLE is used as the default GLES driver and when render engine (RE) is using SkiaGL (which uses ANGLE, which uses Vulkan). The race condition occassionally results in different numbers of extensions between ANGLE's first and second calls to vkEnumerateDeviceExtensionProperties(). In that case, the second call would return VK_INCOMPLETE instead of VK_SUCCESS. That caused ANGLE to fail to initialize, causing RE to fail to initialize. This change works around this problem by increasing the number of extensions asked for in the second call to vkEnumerateDeviceExtensionProperties(). Background: Surface Flinger uses Hardware Composer (HWC) for hardware-based composition (e.g. using overlays), and RE for GPU composition (e.g. rendering to combine multiple app and system windows together). SF, RE, and HWC all start about the same time. HWC sets a property if it can support display timing. This gets passed through SF to RE's Vulkan loader. The Vulkan loader uses that property to determine whether to enable the VK_GOOGLE_display_timing extension. The Vulkan loader used to make a synchronous call to SF in vkEnumerateDeviceExtensionProperties() in order to get this property. That took some number of milliseconds to complete and affected the start-up time of every Vulkan/ANGLE app. To eliminate that performance problem, the property now propogates in an asynchronous manner. At that time, it was thought that RE would always get the property in time. However, a partner's experience is that VK_INCOMPLETE is happening 0.5% of the time. ANGLE doesn't need to use the VK_GOOGLE_display_timing extension. This is because the Android EGL loader provides the related EGL_ANDROID_get_frame_timestamps extension. The issue that ANGLE is working around is that it shouldn't fail to initialize in this situation. Bug: angleproject:6715 Bug: b/206733351 Change-Id: I4eb2197cdcc9692518b1bf5984d06fc8a1a7d145 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3290506 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Jamie Madill 5f755c29 2021-11-17T16:29:37 Vulkan: Lock around handle counter. TSAN showed we could have a data race when multiple threads were releasing objects because of the singleton handle counter. Bug: angleproject:6714 Change-Id: I23b5d343bec421a663198e7efc30c78dab2bde8f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3288328 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 8700d9cc 2021-11-17T16:17:59 Vulkan: Lock around debug annotator. TSAN showed thread contention could happen during make current calls and when inserting debug markers. Bug: angleproject:6714 Change-Id: I343b0bd6efbd46621f9e69bd8a329c135aed0d90 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3288327 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 06d34598 2021-11-17T16:16:27 Vulkan: Add mutex around cache stats. TSAN showed thread contention could happen in multithreading tests because of the singleton cache stats object. Bug: angleproject:6714 Change-Id: I701aa0079b5eb9d60ef557b13ce57efba17df2fa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3288326 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gert Wollny 71bffb8a 2021-11-09T11:16:07 Capture/Replay: Handle newly generated FBOs in tracker Bug: angleproject:6425 Change-Id: I39d22a6770290a0c407ac358b1c059c6a2ddeefa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3269886 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Gert Wollny 30c03b56 2021-10-28T12:54:39 Capture/Replay: Capture GetTexLevelParameter return param Bug: angleproject:6180 Change-Id: Ia063d297bab85d6cb559642b9be213cc6f10a9bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3250884 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Gert Wollny fc5fe46d 2021-10-28T12:47:15 Capture/Replay: Capture GetProgramResourceLocation name param Bug: angleproject:6180 Change-Id: I5f27c695c31a32989c579b54e31cccc5b337bd58 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3250882 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Gert Wollny 95e1d244 2021-10-28T12:24:59 Capture/Replay: Capture GetProgramResource params correctly If a non-nullpointer is passed for length then the the number of param entries that is written is returned in *length. Otherwise, just capture the full buffer size as specified by bufSize. Bug: angleproject:6180 Change-Id: If7c3084e56c990477ddb6e93b8682e27004ba1e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3250881 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill c664c9fc 2021-11-16T12:22:47 Vulkan: Generalize barrier VVL suppression. Seems to pop up in other tests as well. Seems to only affect SwiftShader configs. Run capture_replay_tests.py with the below test. Test: BuiltinVariableVertexIdTest.LineLoop/ES3_Vulkan_SwiftShader Bug: angleproject:6701 Change-Id: I857d4785d6e04edf96fb137a492548ed4d9fbcc4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3285445 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Ian Elliott b9c0194c 2021-11-16T11:36:52 Add EVENT0 markers for why we call vkAcquireNextImage This will help when looking at AGI system traces. Bug: angleproject:6696 Change-Id: Ic4b06f1a1ec155076cfcb47299afe451cd325327 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3283428 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Lingfeng Yang 27bc56c6 2021-11-15T18:18:53 Vulkan: MAP_UNSYNCHRONIZED_BIT: Skip ghosting/idling Respect the following spec language: No GL error is generated if pending operations which source or modify the buffer overlap the mapped region, but the result of such previous and any subsequent operations is undefined Test: cpu time improves in unsync case in perf-tests/MapBufferRange.cpp Bug: angleproject:6680 Change-Id: I6133952546735aced6e6ee8468ef2ac695316fb6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3272018 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Lingfeng Yang 647a703e 2021-11-12T13:48:06 Vulkan: Reorder logic in BufferVk::mapRange This CL flattens the logic, ordering read case first, then write, and simpler cases before more complex ones. This is to prepare for an optimization where we ignore certain paths if MAP_UNSYNCHRONIZED_BIT is set. No change in functionality or performance is expected. Bug: angleproject:6680 Change-Id: I0a2e9ee969216c90353eac7af6dabf648dea2173 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3279615 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 316dcb56 2021-10-06T09:31:49 Add SwANGLE Skia Gold testing. Required updating our system info helper to be able to retrieve SwiftShader device information. Bug: angleproject:6496 Change-Id: Ib38ea4da65d199433e17b87df2630c3fd77cb619 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3208646 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Geoff Lang 5c6998e4 2021-03-30T09:33:55 Mark objects as initialized when robust init is disabled. If a context with robust resource init disabled allocates a texture, make sure it's marked as initialized or else the texture may be reinitialized later by a context with robust resource init enabled. Bug: chromium:1192632 Change-Id: I643f616c89420312f341b53cedbd1a4e4dc58675 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2794621 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Justin Novosad <junov@chromium.org>
Jamie Madill d27552f2 2021-11-11T11:43:30 Re-land: "Vulkan: Allow SystemInfo to pick ICD." Re-land fixes build on iOS and Android with ANGLE/Vulkan. This will be used in conjunction with SwiftShader. Bug: angleproject:6496 Change-Id: Id38403da1e377bba293dc8368d1c1aac29bf56a9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3282426 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi ae3f67ab 2021-11-11T20:32:32 Implement GL_EXT_multi_draw_indirect * Auto-generated the code to lay the foundation for the following functions: * multiDrawArraysIndirect() * multiDrawElementsIndirect() Bug: angleproject:6439 Change-Id: I7ab5111692376229515e0d6d9e6148909ce9a8a1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3276042 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Peng Huang 3a84ef5e 2021-11-12T17:40:40 Add EGL_VULKAN_GET_INSTANCE_PROC_ADDR Add EGL_VULKAN_GET_INSTANCE_PROC_ADDR for query Vulkan vkGetInstanceProcAddr function pointer associate with the Vulkan EGLDevice. Bug: chromium:1264439 Change-Id: I4ff14e2aef7b8ca651e13b4d2867a540aed1b321 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3279100 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Shahbaz Youssefi 3128c055 2021-11-12T14:59:46 Vulkan: Add wait semaphores to queueSubmitOneOff For use in follow up change. Bug: angleproject:3966 Change-Id: I5bfac51ef9d47a6df5d52268d3ce4863b848b1d1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3279226 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Lingfeng Yang <lfy@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya b2cf52e6 2021-11-10T14:49:09 Bug fix in unpack buffer validation For an implementation that supports GL_EXT_buffer_storage extension it is valid to read or write from a buffer that is partially or fully mapped if it was allocated by a call to glBufferStorageEXT with the GL_MAP_PERSISTENT_BIT_EXT included in <flags> Bug: angleproject:5056 Bug: angleproject:6689 Test: BufferStorageTestES3.TexImage2DPixelUnpackBufferMappedPersistently Change-Id: Ia4b6967aab02bbfb101d5253b9c83d314bc92f5f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3278482 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 573f9415 2021-11-12T12:22:39 Vulkan: Prefer aggregate barriers on SwiftShader SwiftShader is not currently sensitivel to stage masks, so aggregating barriers leads to more efficient rendering. Bug: angleproject:4633 Change-Id: I262d1e98d4b08a1ca134a1c5c64ae964ceb6cd16 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3279020 Reviewed-by: Alexis Hétu <sugoi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 6fe13477 2021-11-11T00:47:14 Vulkan: Add external's pNext to ANGLE_external_objects_flags ANGLE was chaining VkImageFormatListCreateInfoKHR to VkImageCreateInfo::pNext to support sRGB extensions. For external images, it was unknown whether that was valid because there was no way to know if external used an identical chain of pNexts. This was causing a discrepancy between images created by Chrome and those created by ANGLE as part of an import. This change updates ANGLE_external_objects_flags to take in the pNext chain external has used to create the image so ANGLE could create the image identically. Bug: chromium:1266094 Change-Id: I479b9e7ff39d437425dc91c79834880749766f99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3274177 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Peng Huang <penghuang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi eb3ef08e 2021-11-11T17:41:48 Vulkan: Differentiate perf warnings and RP closure events ... and application events, by using different debug source enums, translating to different colors in API debuggers. Bug: angleproject:2472 Change-Id: Ice422c7ae59fb508a10500b9fbed79d4c9664c11 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3275840 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi dbc0c646 2021-11-06T01:09:26 Vulkan: Output the reason for RP closure in command buffer To make it easier when viewing the command buffer in a graphics debugger, this change inserts a marker just before closing the render pass that specifies why the render pass was closed. Bug: angleproject:2472 Change-Id: I862e500cd58332d6e199c853315c560fe6a73dc2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3265609 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill a9f2e87e 2021-11-12T15:02:50 Revert "Vulkan: Allow SystemInfo to pick ICD." This reverts commit b5adbe272e4829d77105e49607bf8ddafd385f17. Reason for revert: Fails GN check on Android/iOS in Chrome: https://chromium-review.googlesource.com/c/chromium/src/+/3276779/ Original change's description: > Vulkan: Allow SystemInfo to pick ICD. > > This will be used in conjunction with SwiftShader. > > Bug: angleproject:6496 > Change-Id: I894aa4cf3b9473738b549de9941eb82e09234121 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3276515 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Jamie Madill <jmadill@chromium.org> TBR=syoussefi@chromium.org,jmadill@chromium.org,angle-scoped@luci-project-accounts.iam.gserviceaccount.com Change-Id: I198802d6bc93993d3544ed4627e131cb7b93f381 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:6496 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3276045 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi d2d3a546 2021-11-11T12:22:04 Vulkan: Write perf warnings in command buffer It's much easier to understand what command the perf warning refers to when it's visible in the command buffer using a graphics API debugger. This change creates ANGLE_VK_PERF_WARNING which gives the warning both to the application (through ANGLE_PERF_WARNING) and inserts it in the command buffer. Bug: angleproject:2472 Change-Id: Ie84feed53eca5cda93e1f2bc653fcbf9bcd57b56 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3275839 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Brandon Schade 2aa62964 2021-11-11T13:24:27 Vulkan: Reset mFramebuffer when mFramebufferCache is cleared The mFramebuffer pointer becomes stale when mFramebufferCache is cleared. Set mFramebuffer to nullptr when this happens. Test: --deqp-surface-type=fbo --deqp-case=KHR-GLES31.* Bug: angleproject:6682 Change-Id: I5fd21a64f0f935de04e2934e794c915ccf880c16 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3276701 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Commit-Queue: Brandon Schade <b.schade@samsung.com>
Shahbaz Youssefi 558981c1 2021-11-10T23:13:03 Vulkan: Make write-after-invalidate checks more precise Previously, the size of the command buffer was used as indication for whether the render pass attachments might have been modified after glInvalidateFramebuffer. In that case, the invalidate was undone. This is made more precise by making sure only vkCmdClearAttachments and vkCmdDraw* calls are counted for this purpose. For example, inserting event markers after glInvalidateFramebuffer now retains the invalidation. Note that this can be even further optimized by tracking real writes to attachments. For example, currently a draw call with depth test disabled still undoes the invalidation of the depth buffer, but it shouldn't. Bug: angleproject:5079 Change-Id: I6257b4116a73213884b919bc7f3c86ff39b6aeed Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3274176 Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill b5adbe27 2021-11-11T11:43:30 Vulkan: Allow SystemInfo to pick ICD. This will be used in conjunction with SwiftShader. Bug: angleproject:6496 Change-Id: I894aa4cf3b9473738b549de9941eb82e09234121 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3276515 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 96b587b0 2021-11-10T15:10:09 Vulkan: Fix rendering to RGB external images Based on the provided usage flags, the texture's image access mode is updated to be renderable. Bug: chromium:1266094 Change-Id: I5d092a2786fc12537ef0ad1f224137cc1fd8f864 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270980 Reviewed-by: Craig Stout <cstout@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill a4a52f78 2021-11-10T12:43:37 EGL: Validate CreatePbufferSurface attributes. This fixes an ASAN issue with a dEQP negative test: dEQP.EGL/functional_negative_api_create_pbuffer_surface Bug: angleproject:6660 Change-Id: I2d052f9f948b7a2a6fe3fbb1f1621dd280bb0d36 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270978 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 4e26eac5 2021-11-10T21:19:35 Vulkan: Fix VVL warnings on extensions that are not enabled Bug: chromium:1266094 Change-Id: Idbae6cbe2c5593665438d118f17d184f8a81f0d9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3274932 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 393785b7 2021-11-10T12:14:03 Add attribute validation for context creation. This fixes another ASAN bug that popped up with the dEQP EGL tests: dEQP.EGL/functional_negative_api_create_context Bug: angleproject:6660 Change-Id: I8f5ca1cc9ca77f2be28ecf120a90c9efcf9d4b24 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270977 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington ec5d3795 2021-11-09T13:23:43 Metal: Fix InvalidateCopyThenBlend Render pass descriptor was not being changed due to blend state not being checked when looking for equality. Bug: angleproject:6669 Change-Id: Ic85dbec29ddb53a8c7e2e708f1ac0c99512e7248 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270596 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 2d4bee83 2021-11-04T10:16:16 EGL: Add early exit when hitting invalid attribute. According to the EGL spec, we stop checking attributes when we encounter an invalid enum. That means it's valid for an application to pass in a list of attributes without EGL_NONE as long as one of them is invalid. To handle this, we add lazy attribute validation to the AttributeMap class, that gets triggered in the validation calls. We only implement the early exit validation for the config attributes to fix an EGL test that would access out of bounds memory. Bug: angleproject:6660 Change-Id: I264d0f98b4ddd9e74187846e9e668270a6fbaee1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3262478 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Shahbaz Youssefi 5a5996aa 2021-11-09T21:42:43 Vulkan: Handle missing decorations in SPIR-V precision fixer Bug: angleproject:6674 Change-Id: Ibfc72f14b9eeb17d7c70cf6d2384d970b2e66650 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3271551 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang f045fe07 2021-11-04T10:44:20 Fix MSRTT unsized texture formats querying supported samples. The texture format information in gl::Context is sized formats only. When MSRTT textures are used, they would query the potentially unsized format for maximum supported samples. This would return 0 and cause an incomplete framebuffer when the sample count missmatched with other attachments. Bug: chromium:1238327 Change-Id: I06514b1b9badefa81bba3b7ad9ba5db932b4c12b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3260555 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jamie Madill 0fcad626 2021-11-09T14:02:08 Vulkan: Fix edge case with changing base level. Bug: chromium:1267624 Change-Id: I36b983fdbbb258454215abe827837517df5a5aff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270971 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jonah Ryan-Davis f422f21a 2021-11-09T18:42:15 Reland "Metal: Reintroduce GPU power preference selection code." This reverts commit 67a8cf07a740c5ce3aafd2ad7fddd370451b3525. Reason for revert: Landed Chromium-side dependency: https://chromium-review.googlesource.com/c/chromium/src/+/3271170 Original change's description: > Revert "Metal: Reintroduce GPU power preference selection code." > > This reverts commit 017161701b7dbf70a13f3c180a39e1fa45c27d9f. > > Reason for revert: Blocking roller, please re-land with the fix. > > Original change's description: > > Metal: Reintroduce GPU power preference selection code. > > > > This CL re-introduces the GPU power preference code to > > the metal backend. It also reworks EGLDisplay caching > > in the frontend to cache based on the native display > > as well as the power preference attribute. > > A new extension, EGL_ANGLE_display_power_preference is > > added based on EGL_ANGLE_power_preference. This extension > > is a client extension that allows selection of GPU on > > display creation, similar to how GPUs are selected on > > context creation in EGL_ANGLE_power_preference. > > This CL adds EGLDisplayPowerPreferenceTest and enables it on > > the metal backend. > > > > Bug: angleproject:6143 > > Change-Id: I0a081dcd2e3f18ab365fdd3498ddcb6e2ba35212 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3231986 > > Reviewed-by: Kenneth Russell <kbr@chromium.org> > > Reviewed-by: Jamie Madill <jmadill@chromium.org> > > Reviewed-by: Gregg Tavares <gman@chromium.org> > > Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> > > TBR=kbr@chromium.org,gman@chromium.org,jonahr@google.com,jmadill@chromium.org,angle-scoped@luci-project-accounts.iam.gserviceaccount.com > > Change-Id: I4f775bf7139253a87b033a30e0da2100b3c1bb02 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: angleproject:6143 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270749 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Jamie Madill <jmadill@chromium.org> # Not skipping CQ checks because this is a reland. Bug: angleproject:6143 Change-Id: Id9b0a5cbb76e4dea9e2f2da2b1c47a0587dfdaf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270970 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Lingfeng Yang cd822868 2021-10-28T13:00:09 Vulkan: MAP_INVALIDATE_RANGE_BIT: shadow or exclude One method of dealing with glMapBufferRange + range invalidation; treat it like bufferSubData and stage the update. Another method is to ghost the buffer but copy only memory outside the invalidated range. This CL pursues a policy where if less than half of the buffer is invalidated, we stage. Otherwise, we ghost and copy only memory outside the invalidated range. DynamicBuffer is chosen over DynamicShadowBuffer because it turns out to end up implicitly tracking all active invalidate ranges (through its freelist), and performs buffer copy on GPU. if we use a DynamicShadowBuffer and then BufferVk::stagedUpdate, it's the same thing but more work (an extra memcpy into the staging buffer). To make this clear, we split the logic of stagedUpdate into two parts, the allocation/map, and the flush, and reuse one half in glMapBufferRange, and the other half in glUnmapBuffer. Test: Faster performance in MapBufferRange perf test, no non-noisy regress in trace tests Bug: angleproject:6634 Change-Id: Ie2e6a9586824b8cb59a97419bb8052acd1de2033 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251686 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lingfeng Yang <lfy@google.com>
Jeff Vigil 5eb86d4a 2021-09-21T15:17:04 EGL: EGL_KHR_lock_surface3 frontend Add queries to get locked buffer attributes Add validation for LockSurface, QuerySurface Bug: angleproject:6062 Change-Id: I4919bef2a17d3505cccad08f7c4f8a3ca5d7e4e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3174322 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jeff Vigil d3e67716 2021-09-21T15:03:15 EGL: EGL_KHR_lock_surface3 Add new extension KHR__lock_surface3 Add new interfaces for locking and unlocking a surface. Test: angle_end2end_test --gtest_filter=EGLLockSurface3Test Bug: angleproject:6062 Change-Id: Ic40708db4db552107025635540a0c62f956d741e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3161447 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 91d36473 2021-11-08T16:27:20 Fix invalidation of GL_FRAMEBUFFER invalidating READ FBO Per spec, GL_FRAMEBUFFER means GL_DRAW_FRAMEBUFFER for glInvalidateFramebuffer. Bug: chromium:1267424 Change-Id: I8c9ab61ecdbd4ccee4262dc8559b2feb02b4837c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3266176 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi ef93b32c 2021-11-09T00:26:13 Vulkan: Fix deferred clears vs invalidate In this scenario: - Clear color - Invalidate depth - Clear color The invalidate step flushed the deferred color clear, but the following clear did not expect an open render pass without any draw calls in it. This change fixes this issue, while simultaneously optimizing invalidate by making sure the clears accumulated during syncState() are redeferred instead of flushed. This issue was discovered in https://chromium-review.googlesource.com/c/angle/angle/+/3266176 where, as part of an unrelated fix, an accidental render pass closure is removed. Bug: chromium:1267424 Change-Id: Icfc0a53dbf84e6339ee23960ed847444830054e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3266178 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 67a8cf07 2021-11-09T15:10:50 Revert "Metal: Reintroduce GPU power preference selection code." This reverts commit 017161701b7dbf70a13f3c180a39e1fa45c27d9f. Reason for revert: Blocking roller, please re-land with the fix. Original change's description: > Metal: Reintroduce GPU power preference selection code. > > This CL re-introduces the GPU power preference code to > the metal backend. It also reworks EGLDisplay caching > in the frontend to cache based on the native display > as well as the power preference attribute. > A new extension, EGL_ANGLE_display_power_preference is > added based on EGL_ANGLE_power_preference. This extension > is a client extension that allows selection of GPU on > display creation, similar to how GPUs are selected on > context creation in EGL_ANGLE_power_preference. > This CL adds EGLDisplayPowerPreferenceTest and enables it on > the metal backend. > > Bug: angleproject:6143 > Change-Id: I0a081dcd2e3f18ab365fdd3498ddcb6e2ba35212 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3231986 > Reviewed-by: Kenneth Russell <kbr@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Gregg Tavares <gman@chromium.org> > Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> TBR=kbr@chromium.org,gman@chromium.org,jonahr@google.com,jmadill@chromium.org,angle-scoped@luci-project-accounts.iam.gserviceaccount.com Change-Id: I4f775bf7139253a87b033a30e0da2100b3c1bb02 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: angleproject:6143 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3270749 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 5c16f77b 2021-10-01T20:07:09 Vulkan: Add flushCommandsAndEndRenderPassWithoutQueueSubmit() Add flushCommandsAndEndRenderPassWithoutQueueSubmit() to allow ContextVk::flushAndGetSerial() to only issue a single vkQueueSubmit(). Bug: angleproject:6546 Change-Id: Ia3fc2bb93e88583ebd80ee153749dc8ca42245dc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3200673 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Tim Van Patten 53371cc0 2021-11-01T20:25:17 Vulkan: Use optimalBufferCopyOffsetAlignment optimalBufferCopyOffsetAlignment is the optimal buffer offset alignment in bytes for vkCmdCopyBufferToImage2KHR, vkCmdCopyBufferToImage, vkCmdCopyImageToBuffer2KHR, and vkCmdCopyImageToBuffer. The per texel alignment requirements are enforced, but applications should use the optimal alignment for optimal performance and power use. To improve efficiency, this CL updates ContextVk::mStagingBuffer's alignment to the max of: - minMemoryMapAlignment - nonCoherentAtomSize - optimalBufferCopyOffsetAlignment On ARM, this is not expected to have any affect, since all three values are 0x40, but other platforms may see a benefit. Bug: angleproject:4297 Change-Id: I9185da111e09c5d782eb1dedb10369727cb9bf51 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3256007 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 0e20c680 2021-11-08T15:24:09 Sync framebuffer bindings in glInvalidateFramebuffer If a framebuffer binding change is followed by glInvalidateFramebuffer, ANGLE was not syncing the framebuffer binding. - This means that invalidation was being done on the previous framebuffer. - Paired with deferred clears, this was causing ContextVk to start a render pass on the previous, potentially deleted, framebuffer. Bug: chromium:1267027 Change-Id: I092a0c8dd764db9e49258b694c970babb19cf24b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3266175 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jonah Ryan-Davis 01716170 2021-10-14T13:24:41 Metal: Reintroduce GPU power preference selection code. This CL re-introduces the GPU power preference code to the metal backend. It also reworks EGLDisplay caching in the frontend to cache based on the native display as well as the power preference attribute. A new extension, EGL_ANGLE_display_power_preference is added based on EGL_ANGLE_power_preference. This extension is a client extension that allows selection of GPU on display creation, similar to how GPUs are selected on context creation in EGL_ANGLE_power_preference. This CL adds EGLDisplayPowerPreferenceTest and enables it on the metal backend. Bug: angleproject:6143 Change-Id: I0a081dcd2e3f18ab365fdd3498ddcb6e2ba35212 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3231986 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Gregg Tavares <gman@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Shahbaz Youssefi 79a5dc0a 2021-11-05T23:26:43 Vulkan: Fix spammy best practices message A GPU WRITE->HOST barrier frequently issued when the GPU outputs to a host-visible buffer used the ALL_COMMANDS stage mask causing a best practices message. This message is suppressed in ANGLE, but shows up in RenderDoc and clutters the output. Bug: angleproject:5070 Change-Id: I59aa7f8c7b3bf2788a3f7ae0ab6abdb4d3cd175e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3265606 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Maksim Sisov 1f42f6bd 2021-11-03T13:28:01 Add GL_RGB10_EXT format into list of supported formats. When running with Wayland, EGL returns rgb10 buffer format in egl config, which makes assertion to explode in formatutils as this format is not in list of supported formats. GL_RGB10_EXT is under the ES1 extension GL_OES_required_internalformat. Thus, add it to the format table. Bug: chromium:1231934 Change-Id: Ib47af538b16d6c7a652a44e0674757d292ac1394 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3253376 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Maksim Sisov <msisov@igalia.com>
Tim Van Patten 5d8a89e4 2021-11-02T19:57:04 Vulkan: Always override surface format GL_RGB8 to GL_RGBA8 If an app requests to create a surface with GL_RGB8, override it to be GL_RGBA8 for Android. This is to workaround an issue with the Android Vulkan loader which limits which formats can be used with swapchains. This CL also adds GL_RGB8 back to DisplayVkAndroid::generateConfigs(), effectively reverting the following CL: https://chromium-review.googlesource.com/c/angle/angle/+/3235466 This is being done with this CL (rather than reverting) since these changes are required to handle surfaces created with GL_RGB8. Bug: angleproject:6277 Bug: angleproject:6651 Change-Id: Iad78ea0d7bdf12e1e309ed6a7181f08fac38b9de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3258143 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Jamie Madill 4fd4eb50 2021-11-05T11:14:47 Vulkan: Minor cleanups. Makes some VkFlags into VkAccessFlags to aid with code search. Also corrects a few typos. Bug: angleproject:6566 Change-Id: Ia4d14d38bb6d4e8c4c71fed6038c12edae112be9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3264224 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Peng Huang d7090f5d 2021-10-29T10:45:19 Add more attributes for EGL_ANGLE_device_vulkan Bug: chromium:1264439 Change-Id: Ibc9676cef16411b17c833abe9559721811016eef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3264164 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Jamie Madill f7bcd910 2021-11-05T11:24:34 Vulkan: Skip VVL barrier warning on SwiftShader. This gets tripped up from our barrier handling code. Bug: angleproject:6656 Change-Id: Iefb1c898ca6506e81a19a0928beaf221dcdf8f4e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3264225 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 019ddad5 2021-11-04T13:22:47 Reset cache in ProgramExecutable::updateActiveSamplers. This missing reset was causing incorrect state validation to persist in a few instances. Bug: chromium:1266437 Change-Id: I7ab47c81bf9f855e3ad75048f9d1aaefbc2291df Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3262477 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Tim Van Patten 8c9b8f03 2021-11-03T14:50:54 Capture/Replay: Don't finish() destroyed Contexts If an app destroys a context, but keeps it current on a thread, ANGLE will reset the context, but can't delete it. This can lead to a segfault if ANGLE attempts to call Context::finish() on a destroyed context. To solve this, check if the context has been destroyed in ShareGroup::finishAllContexts(). Bug: angleproject:6653 Change-Id: Ib30e352ad6395e01f8fab0095cd6231dfb10d8ae Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3260726 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Shahbaz Youssefi 30b01d8f 2021-11-03T15:56:47 Fix multiview framebuffer completeness check In the process of dropping ANGLE_multiview in favor of OVR_multiview, the framebuffer completeness checks have become stale. In particular: - There is no requirement that the base layer of the attachments match - There _is_ a requirement that base+count layers are within the texture boundaries. Bug: chromium:1264988 Change-Id: I86837b587ad5befaa6a545c5a24507e8dff0b568 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3259272 Reviewed-by: Alexis Hetu <sugoi@google.com> Reviewed-by: Alexis Hétu <sugoi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 2091451e 2021-10-27T22:57:34 GLES1: Create multiple shaders based on state This CL introduces the concept of having optimized shaders for given state combinations. In this first pass, all uniform bools have been moved to hard coded values in the GLES1 ubershader. Frame times on Android ARM with locked GPU clocks: Trace Before After dr_driving: 27.8145 -> 4.2986 sonic_the_hedgehog: 17.9779 -> 2.8223 summoners_war: 93.2040 -> 15.9810 wordscapes: 53.9227 -> 7.6167 zillow: 15.0323 -> 2.9368 Bug: angleproject:6644 Bug: angleproject:6652 Change-Id: I548bc5c6aa24bad5fbd740b9552c4a703ae41354 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251688 Reviewed-by: Lingfeng Yang <lfy@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Kyle Piddington 77eb8a49 2021-10-29T10:36:06 Metal: Reduce memory usage of attribute re-writing Rework vertex buffer caching to allow us to reuse parts of converted buffers. Reusing conversions dramatically drops the memory usage when drawing index ranges by offset with unaligned attributes. Bug: angleproject:6638 Change-Id: I79797da202629b1632e1397ce1227ee3d7a1c9d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251467 Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Le Hoang Quyen <le.hoang.q@gmail.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Amirali Abdolrashidi 0777af70 2021-11-02T11:14:06 Env var for EXT_framebuffer_fetch_non_coherent * Added an environment variable/Android property to remove the restriction on exposing GL_EXT_shader_framebuffer_fetch_non_coherent on ARM and Qualcomm. * Environment variable: ANGLE_ENABLE_EXT_SHADER_FRAMEBUFFER _FETCH_NON_COHERENT_OVERRIDE * Android property: debug.angle.enable.ext_shader_framebuffer _fetch_non_coherent_override Bug: angleproject:6519 Change-Id: I62e80f348c2ffda7d1d63496e3a2aedad9d69229 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3258363 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Tim Van Patten afaa1287 2021-10-26T19:29:44 Vulkan: Don't submit XFB queries when XFB is inactive Consider the following GL commands: glBeginQuery(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN) glBeginTransformFeedback() glDrawArrays() glPauseTransformFeedback() glDrawArrays() glResumeTransformFeedback() glDrawArrays() glEndTransformFeedback() glEndQuery(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN) The renderpass is broken for each of the draw calls, leading to pauseRenderPassQueriesIfActive() and resumeRenderPassQueriesIfActive() being called when the RP is stopped/started. This leads ANGLE to generate 3 TransformFeedbackPrimitivesWritten queries when looping through the "active" queries, since no consideration is made for XFB actually being active/unpaused. ARM doesn't support the TransformFeedbackPrimitivesWritten query when XFB is disabled. Instead, the query is never completed and the results are never available. It could probably be argued that this is an ARM bug, and they should just output '0' if XFB isn't active during the query. Regardless, ANGLE shouldn't be issuing the queries when XFB is no active, since it's wasteful. Bug: angleproject:6622 Test: dEQP.GLES3/functional_transform_feedback* Test: TransformFeedbackTest.TransformFeedbackQueryPausedDrawThenResume Change-Id: I380fb60405d7f538b802bb0df72bf609f0bc58e9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3246532 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Gregg Tavares 604610b4 2021-11-01T12:03:31 Metal: Use Depth32F for DEPTH_COMPONENT16 depth16unorm is broken on Metal. This is a workaround. Bug: angleproject:6597 Change-Id: I1748f9fab587b22980d13e8a141fa880eb6f9db0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3255666 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Gert Wollny c4921cd8 2021-10-28T12:06:42 Capture/Replay: Capture name in GetProgramResourceIndex Bug: angleproject:6180 Change-Id: I1ee7e49dcfa5df23ff5d81d8ca43dd1843c9b2e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3250880 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi 6a749cda 2021-10-29T12:45:53 Complete validation of glGetAttribLocation() -Added more checks to glGetAttribLocation() similar to glBindAttribLocation(). -Added the corresponding unit tests. Using a reserved prefix in glGetAttribLocation() should return -1. Bug: angleproject:2419 Change-Id: I3f691f344c7003f855e53d35cd5f9578069acdae Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3252643 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
YuxinHu a514df08 2021-10-27T01:25:11 Add detachShader capture calls in MEC This change adds a capture call to detach shader object before deleting the shader object in function GenerateLinkedProgram(), if that is also what the app does. GenerateLinkedProgram() is part of the Mid Execution Capture (MEC), and the purpose of the MEC is to setup a program that more closely mirrors the original app. The game World Cricket Championship2 detaches the shader object before deleting the shader object. With this change, we can follow the same behavior in GenerateLinkedProgram(). This ensures that the Shader Object refcount is decremented to 0 before the CaptureDeleteShader call is applied, and the ShaderProgramID handle assigned to the Shader Object will be released and can be reused for subsequent glCreateShader calls. The total number of ShaderProgramID we need will be consistent between SetupReplayContextShared() and the game uses. We are allocating memory slots for gUniformLocations2 array based on the total number of ShaderProgramID the game uses. Keeping the ShaderProgramID counts the same between trace replay and the game ensures we allocate the right amount of memory for the trace replay. Bug: angleproject:6621 Bug: b/194508692 Change-Id: Ib2810b486a6e9108db2a32f084d650a25f14bebd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3246533 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Steven Noonan ab514d4a 2021-10-22T20:51:08 d3d11: fix typo in pixel shader function signatures These two shaders used "TEXCORD0" instead of "TEXCOORD0" which made the Direct3D debug layers unhappy: D3D11 ERROR: ID3D11DeviceContext::Draw: Vertex Shader - Pixel Shader linkage error: Signatures between stages are incompatible. The input stage requires Semantic/Index (TEXCORD,0) as input, but it is not provided by the output stage. [ EXECUTION ERROR #342: DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND] Fixing the typo makes that error go away. Bug: angleproject:6614 Change-Id: Ifa1c8c01fb4502398b3b4e13a411ef50bc3db483 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3239013 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Gregg Tavares ab426735 2021-10-29T13:54:09 Template gl::Rectangle so it can be used for float Bug: angleproject:6598 Change-Id: I8cf5894f0e34c56a6ad856c978be93ea9d5ae113 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3253131 Commit-Queue: Gregg Tavares <gman@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tim Van Patten d2b4d9ae 2021-10-30T00:27:56 Revert "Vulkan: Don't expose MSRTT on SwiftShader" This reverts commit fb77afd3c76301e11f5c7397d9a63d283f86036c. Reason for revert: Breaks ANGLE roll into Chromium: https://chromium-review.googlesource.com/c/chromium/src/+/3253966/ Please follow the directions here to update the reference images: https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/web_test_expectations.md Original change's description: > Vulkan: Don't expose MSRTT on SwiftShader > > Emulating this extension on SwiftShader is neither useful nor efficient > (on the contrary, it hurts performance (which is true for all non-tiling > architectures)). This extension was exposed purely to increase testing > coverage, but is being disabled now as OOMs resulting from allocating > the implict multisampled image is confusing Chrome. Note that > SwiftShader exposes only a limited amount of memory. > > Bug: chromium:1263046 > Change-Id: Ia69b7fc63804169431885352a8f637a95ab08bd0 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251581 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: chromium:1263046 Change-Id: I554df85109282db840ed6d2dbf0b153da5a7a98f No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3254007 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Kyle Piddington 50fc2909 2021-10-27T21:37:02 Merge Webkit up to Oct 27 2021 Merge the following commits from Webkit. This change merges webkit from the following git commits Previous: commit 703b234524e75109ca3e94febbf63098314022f5 Author: Alex Christensen <achristensen@webkit.org> Date: Tue Sep 28 16:22:30 2021 +0000 Mostly fix Mac CMake build https://bugs.webkit.org/show_bug.cgi?id=230868 Current: commit 43d2e637f84b1e6b75c139ac64c26ca108b4f12f Author: Kimmo Kinnunen <kkinnunen@apple.com> Date: Wed Oct 27 17:43:38 2021 +0000 REGRESSION (Safari 15): Poor WebGL performance on https://downloads.scirra.com/labs/particles Commits: commit 8238f462c96e515dabd3db0e26c143b18f47340c Author: Kyle Piddington <kpiddington@apple.com> Date: Wed Oct 6 21:45:18 2021 +0000 Shadertoy "truchet district" fails to compile with error: Internal error compiling shader with Metal backend" commit 2fcb9af290e4b6c804f11ad4359555507c1492f9 Author: Kyle Piddington <kpiddington@apple.com> Date: Thu Oct 14 21:14:26 2021 +0000 https://tankionline.com/play/ html5 engine not working: crashes. (Metal shader not working) https://bugs.webkit.org/show_bug.cgi?id=231490 commit e11955a258380a875115ded16ab8963142c4023b Author: Kyle Piddington <kpiddington@apple.com> Date: Fri Oct 15 23:57:12 2021 +0000 REGRESSION (r283667): webgl/2.0.0/deqp/functional/gles3/lifetime.html fails https://bugs.webkit.org/show_bug.cgi?id=231682 commit 43d2e637f84b1e6b75c139ac64c26ca108b4f12f Author: Kimmo Kinnunen <kkinnunen@apple.com> Date: Wed Oct 27 17:43:38 2021 +0000 REGRESSION (Safari 15): Poor WebGL performance on https://downloads.scirra.com/labs/particles https://bugs.webkit.org/show_bug.cgi?id=230749 Bug: angleproject:6630 Change-Id: Icca411dc429538f839f05834f1851fbc54ef8a1d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3248573 Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Gregg Tavares <gman@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill 4a2446c6 2021-10-19T11:55:17 Vulkan: Implement robust shader outputs. In this CL we change ANGLE to pass the mask of missing shader outputs down to pipeline creation. We then use the color mask bits to block SwiftShader writing to unused outputs. This fixes the undefined behaviour present in Genshin Impact. Note that the other GLES implementations we tested don't seem to modify outputs even if they're unused. It was easier to mask out the color attachments in initialize rather than set up the pipeline desc to mask out the attachments. This was because we manipulate the color mask in a fairly complex way before we initialize the pipeline desc. Bug: angleproject:6566 Change-Id: Ie659fcd511cd286fa573fd25e3e6a0b9e123ebd6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3232435 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Tim Van Patten 800c6885 2021-10-25T13:37:39 Vulkan: Only add samplable formats to outCompressedTextureFormats Only samplable texture formats should be added to outCompressedTextureFormats in FormatTable::initialize(), so move that to after the check of mActualSampleOnlyImageFormatID. Bug: angleproject:6277 Change-Id: Id91908a04d7e94f2d6dd1f0fa499ebea6a1f107e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3243068 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Gregg Tavares 20ddb802 2021-10-28T11:01:12 Fix Blitting in Metal backend. The Metal backend was clipping in integer space. If the src and dst are not the same size, say src is 3 wide and dst is 4 wide, and src starts at -1, then src will be clipped by one making the src 2 wide. It got 1/3 smaller so the dst get 1/3 smaller making it 2.666 pixels wide. The dst then needs to be expanded to pixels so 3 wide. But, that means the src also needs to be expanded 0.3333 * 3(originalSrcWidth) / 4(originalDstWidth) so its new left edge is -0.245 which is not an integer. Bug: angleproject:6598 Change-Id: I2faa966b18b457f474a3e7f6844ef64bfa66dbe8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251683 Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Gregg Tavares <gman@chromium.org>
Lubosz Sarnecki 7bda9d73 2021-10-22T11:53:20 DisplayVkAndroid: Always expose EGL_RECORDABLE_ANDROID. Expose EGL_RECORDABLE_ANDROID in the config for all Vulkan drivers on Android to provide app compatiblity with "My Talking Tom 2" and "My Talking Tom Friends". Don't require config to be unavailable in EGLRecordableTest and request a config with EGL_RECORDABLE_ANDROID enabled, but do not check for results. Bug: angleproject:6612 Change-Id: I25113b7c7f9a4a3b13dc625f01d96ba91cb3c6d7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3237001 Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi fb77afd3 2021-10-28T11:07:53 Vulkan: Don't expose MSRTT on SwiftShader Emulating this extension on SwiftShader is neither useful nor efficient (on the contrary, it hurts performance (which is true for all non-tiling architectures)). This extension was exposed purely to increase testing coverage, but is being disabled now as OOMs resulting from allocating the implict multisampled image is confusing Chrome. Note that SwiftShader exposes only a limited amount of memory. Bug: chromium:1263046 Change-Id: Ia69b7fc63804169431885352a8f637a95ab08bd0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251581 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Peng Huang 81d964a1 2021-10-28T10:50:51 vulkan: implement EGLDevice for vulkan backend It allows ANGLE clients to get and use VkDevice and VkQueue used by vulkan backend. Bug: chromium:1264439 Change-Id: I338ac08152cfec50bb34c5025730e5e6368efba9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3250964 Reviewed-by: Peng Huang <penghuang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Shahbaz Youssefi 32b3c963 2021-10-28T11:00:03 Vulkan: Remove MSRTT assertion in the presence of OOM When the MSRTT transient multisampled image is created, the emulated clear staged update is removed (as it's also staged for the single sampled image). This was done after allocating memory for the image, which can fail, leaving the update staged and leading to an ASSERT failure when the texture is used. Technically, the texture should not be used, and that's a Chrome bug where the OOM result from ANGLE is being ignored. This change makes sure the staged update is removed before allocating memory so the multisampled image is in a more consistent state. Bug: chromium:1263046 Change-Id: Ida8923ccbc517f740d76b4c2880086a039fa8a1f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3251580 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Lubosz Sarnecki 694c5012 2021-10-14T11:16:29 capture_gles_3_2: Skip capturing debug calls This is analogous to capture_gles_ext. Bug: angleproject:6613 Change-Id: I8917a4cfa060f71ad616ece56038d02bfa12a952 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3237002 Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao bae19e06 2021-10-26T13:35:57 Vulkan: Avoid unnecessary wait if mapBufferRange indicates read only When we call BufferVk::mapRangeImpl(), both from internal code paths for data reads or due to glMapBufferRange call, we are not passing the access bit to the call. This CL passes the proper access bits to the call and only wait for GPU writes to finish if access is for read only. This CL also adds access bitfield to the BufferVk::mapImpl() API and have various callers pass in the proper access bits as well. Bug: b/203582620 Change-Id: Ica8493c902dbd7b15996266c81ce0fd4dbfc2520 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3245487 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Jamie Madill 191c236a 2021-10-14T17:01:45 Vulkan: Remove "current queue serial". Queries, semaphores, and pipelines instead use the normal vk::Resource design to track their lifetimes. Removes the current serial APIs from all classes. Current serials are still tracked internally in the command queue classes. Bug: b/169788986 Change-Id: Idcd2c2a93bc8225c6f3f7c247eb8fcfb76be1030 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3223644 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 3a9f18f1 2021-10-18T10:44:38 Refactor program pipeline handling. In preparation for moving more code from gl::Program to gl::ProgramExecutable so it can be shared with ProgramPipeline. Bug: angleproject:6566 Change-Id: Icb7ecccb37ae8e0d7d5fef8968f0dd7ef6fe6150 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3226305 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Hans Wennborg 6ce67886 2021-10-28T13:45:18 Drop -Wweak-template-vtables Clang is dropping suport for this flag, see bug. Bug: chromium:1264351 Change-Id: I09b3d42889eecb8e786c52c205f28507fc797c5a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3250885 Reviewed-by: Nico Weber <thakis@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kyle Piddington c1b42740 2021-10-25T17:45:19 Metal: Use ES3 validation for GL_R/RG8_EXT formats Fix 6 fboCompleteness tests by setting the Metal conformance version to ES3, rather than ES2. This causes ANGLE to select the backwards compatible ES3 validation rather than the ES2 validation. The FBO completeness test may have a bug related to extensions in it, as limiting the Vulkan backend to ES2 conformance causes it to fail in the same manner of Metal. Bug: angleproject:6618 Change-Id: I64d87ea7b9e1957baab05b6380fe09e8271393a9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3244023 Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jamie Madill ca5e6f68 2021-10-27T11:28:08 Vulkan: Fix accessing stale FB cached variable. This would happen when we start a query after deleting a Framebuffer. Bug: chromium:1262091 Change-Id: I595360bf55fe1757779669f168c95be802b70da5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3248142 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 421dbf20 2021-10-26T19:06:19 Revert "Vulkan: Use different strategy for buffer memory allocation" This reverts commit 0dbe308d91a3526e28fecd9014d873c649f4ef71. Reason for revert: crbug.com/1253325 Original change's description: > Vulkan: Use different strategy for buffer memory allocation > > This CL uses different memory allocation strategy based on the requested > size. If the requested size exceeds 1M, we use dedicated memory > allocation to avoid memory waste associated with the sub-allocator. > Otherwise we uses VMA's sub-allocator pool. This CL creates two sets of > customized pool so that we uses different allocation strategy for each > set of pool: the small pool uses buddy algorithm which favors speed over > memory and large pool uses default algorithm that favors memory saving > over speed. This CL also replaces vmaFindMemoryTypeIndexForBufferInfo > with vmaFindMemoryTypeIndex to avoid create and destroy VkBuffer object > just try to find memoryTypeIndex. > > Bug: b/195588159 > Change-Id: I2bddbfffd77ba2ce6b9389d83a31051c4b748c4d > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2939490 > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Tim Van Patten <timvp@google.com> Bug: b/195588159 Change-Id: I2c8fe8cb2930d16f5212570d32be68e7c6a6e5f3 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3244258 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Charlie Lao 6b315a78 2021-10-26T19:04:06 Revert "Vulkan: Let BufferVk call into VMA for allocation when possible" This reverts commit 894ce75fb2f75e718ce76e466b8938524f65ac07. Reason for revert: crbug.com/1253325 Original change's description: > Vulkan: Let BufferVk call into VMA for allocation when possible > > Previously BufferVk class maintains a DynamicBuffer pool per BufferVk > object. This CL makes BufferVk skip DynamicBuffer pool in most cases and > do its own BufferHelper allocation directly. DynamicBuffer pool is only > used when desired, which is controled by a flag. With this CL, only > UBO/SSBO/AtomicBuffer will still use DynamicBuffer pool if the buffer > has to be allocated more than once. > > Bug: b/195588159 > Change-Id: I3aa08cef10ee9ee9f01f16403c6fbb99b37f4a8a > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2901241 > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Tim Van Patten <timvp@google.com> > Reviewed-by: Jamie Madill <jmadill@chromium.org> Bug: b/195588159 Change-Id: Iecda3baa6bc887fa0caa86ab076994cae7c10f93 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3244257 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Tim Van Patten 9ac2409e 2021-10-26T00:55:06 Reland "Vulkan: Flush descriptor set updates during flush*Commands()" This reverts commit 420e77a64e890ad4c585d72789ca59501be3ac75. Reason for revert: The crash is in ProgramExecutableVk::getOrAllocateShaderResourcesDescriptorSet(), which is unrelated to this change. Creating a CL to reland this (the reland button is failing), to try and investigate further. Original change's description: > Revert "Vulkan: Flush descriptor set updates during flush*Commands()" > > This reverts commit 02b73c2fd738b237f1ab3ecd400feec222903a48. > > Reason for revert: Causes test to crash on Linux/Intel: anglebug.com/6591 > > Original change's description: > > Vulkan: Flush descriptor set updates during flush*Commands() > > > > The intent of this CL is to reduce the number of descriptor set updates > > by delaying the work until all of the GLES commands that could trigger a > > re-update have been performed and the command stream is being flushed. > > To achieve this, flushDescriptorSetUpdates() is being moved from > > setupDraw()/setupDispatch() to > > flushRenderPassCommands()/flushOutsideRPCommands(). > > > > This change also exposed an issue where the BufferView handles were not > > being preserved until flushDescriptorSetUpdates() was called. To resolve > > this, flushDescriptorSetUpdates() is also being called during > > BufferViewHelper::release() before the BufferView memory is released. > > > > Bug: angleproject:5706 > > Change-Id: I61e19af9c0fac891aa2115d72391459b80d22f19 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2939385 > > Reviewed-by: Charlie Lao <cclao@google.com> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Jamie Madill <jmadill@chromium.org> > > Commit-Queue: Tim Van Patten <timvp@google.com> > > Bug: angleproject:5706 > Bug: angleproject:6591 > Change-Id: I9d1ee3fcb3d1aebc86e60896e0065cab847a92b4 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3233901 > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:5706 Bug: angleproject:6591 Change-Id: Ibc7e934b82e6cd90e766f43135583f7c45acfe39 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3244024 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Tim Van Patten <timvp@google.com>
Charlie Lao 894ce75f 2021-05-21T10:59:14 Vulkan: Let BufferVk call into VMA for allocation when possible Previously BufferVk class maintains a DynamicBuffer pool per BufferVk object. This CL makes BufferVk skip DynamicBuffer pool in most cases and do its own BufferHelper allocation directly. DynamicBuffer pool is only used when desired, which is controled by a flag. With this CL, only UBO/SSBO/AtomicBuffer will still use DynamicBuffer pool if the buffer has to be allocated more than once. Bug: b/195588159 Change-Id: I3aa08cef10ee9ee9f01f16403c6fbb99b37f4a8a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2901241 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao 0dbe308d 2021-07-16T14:26:20 Vulkan: Use different strategy for buffer memory allocation This CL uses different memory allocation strategy based on the requested size. If the requested size exceeds 1M, we use dedicated memory allocation to avoid memory waste associated with the sub-allocator. Otherwise we uses VMA's sub-allocator pool. This CL creates two sets of customized pool so that we uses different allocation strategy for each set of pool: the small pool uses buddy algorithm which favors speed over memory and large pool uses default algorithm that favors memory saving over speed. This CL also replaces vmaFindMemoryTypeIndexForBufferInfo with vmaFindMemoryTypeIndex to avoid create and destroy VkBuffer object just try to find memoryTypeIndex. Bug: b/195588159 Change-Id: I2bddbfffd77ba2ce6b9389d83a31051c4b748c4d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2939490 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Kyle Piddington a02eb809 2021-10-19T20:09:43 Metal: Allow zero-sized scissors Fixes the following ES2 tests: dEQP-GLES2.functional.fragment_ops.scissor.outside_render_* A zero sized scissor is a valid scissor rectangle. Instead of ignoring this call, allow it. Bug: angleproject:6592 Change-Id: Ifc5c145b43deae4a031025b63691eb2b54c598fb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3233935 Commit-Queue: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Gregg Tavares <gman@chromium.org>
Geoff Lang a8000240 2021-10-05T13:12:22 Don't release EGLImage refs until backends are respecified orphanImages is called before impl methods to respecify textures and renderbuffers. This can cause the backend objects to reference deleted images. TextureVk::handleImmutableSamplerTransition is one such function that is called using "previousImage". Fix this by having orphanImages return a RAII object that deletes the image when the caller chooses. In this case, after the impl methods have been called to respecify the backend data. Bug: b/194432407 Change-Id: Ifb265b4409ba43478731a1701e2409f089976b1d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3206430 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Geoff Lang d2c01d2c 2021-09-17T12:57:14 GL: Allow selecting virtualization groups at context creation Rewrite EGL_ANGLE_platform_angle_context_virtualization to EGL_ANGLE_context_virtualization, changing the context virtualization parameter to an identifier for what virtualization group the frontend context should be added to. This allows ANGLE's GL backend to be used by multiple threads if the user creates contexts with different virtualization groups. Bug: angleproject:6406 Change-Id: I7414d4705ce10bdf63a9b824043d5dd040dad875 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3169193 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 48b605d8 2021-10-25T09:46:16 Vulkan: Fix UBSAN error in CommandBatch CommandBatch doesn't initialize all fields, causing UBSAN errors in the move constructor. Bug: chromium:1261861 Change-Id: I46b963a415ccc08d3d9db40de98d1968eea311e8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3241544 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 584f1b78 2021-10-14T17:55:47 metal: fix crash when checking for flat attributes We can frontload the check of whether or not a shader program uses flat interpolation for its attributes. This prevents a crash where an application does: glAttachShader glLinkProgram glDetachShader glDeleteShader and the check tries to look at the shader attachments (which are no longer valid). Also add some tests to ensure that detaching shaders after program link doesn't cause crashes on indexed draws, and that the flat attribute detection works across program save/load. Bug: angleproject:6526 Signed-off-by: Steven Noonan <steven@valvesoftware.com> Change-Id: I70990808fdfd17608b4b720461cae1a0bdd064b8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3224663 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Lubosz Sarnecki ee672193 2021-10-06T16:51:42 SurfaceVk: Use vkGetPhysicalDeviceSurfaceFormats2KHR. Use VK_KHR_get_surface_capabilities2 to determine if the requested color space and surface format combination is supported. Create a DoesSurfaceSupportFormatAndColorspace helper function and use vkGetPhysicalDeviceSurfaceFormatsKHR as a fallback in a new DoesSurfaceSupportFormat helper function. Treat the surface format as not supported when a non-sRGB colorspace was requested and VK_KHR_get_surface_capabilities2 is not available. Move MapEglColorSpaceToVkColorSpace to anonymous namespace. Emit angle::Result::Incomplete if a suitable surface format is not found. Bug: angleproject:2514 Bug: b/201993125 Change-Id: I28baf904cf8846ca575eaf83c93b3f593c1b63a2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3208690 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Shahbaz Youssefi 52934a5d 2021-10-04T22:19:30 Vulkan: Use the UNDEFINED layout for ExternalPreInitialized According to the spec, the UNDEFINED layout does not invalidate the memory of external images. Bug: angleproject:6460 Change-Id: I682e8c3501cc52431268ff2c3a063467ba9d2a65 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3203796 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 4c2c6bd2 2021-10-20T16:43:51 vulkan: fix read overrun in commonDebugUtilsLabel The size of the incoming string should be the 3rd argument to storePointerParameter(), not the aligned string size value. If we use the latter, we read past the end of the incoming string. This tripped the AddressSanitizer during the object label tests. Bug: angleproject:6600 Change-Id: Idd72353803661684057753f5b01bb69af1d4a141 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3235900 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 7ef9ecf0 2021-10-15T14:38:03 Add GL_ANGLE_robust_fragment_shader_output. This extension codifies expected behaviour on Android, where some applications don't declare shader outputs that are active with the Framebuffer. Bug: angleproject:6566 Change-Id: I3538a0aca25b6567e4b11e40d4611f1b240579c7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3226724 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Steven Noonan 397a27bb 2021-10-20T20:33:20 VertexArray: on destroy, remove observer on element array buffer Otherwise there will be a null pointer dereference in gl::Buffer::onContentsChange(). Signed-off-by: Steven Noonan <steven@valvesoftware.com> Bug: angleproject:6599 Change-Id: I73388b6d0ccc357ca1944452a18ccf462dd8046c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3236206 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 66e8faf7 2021-10-20T14:06:08 Remove ProgramExecutable's "isCompute" property. This consolidates the lists of uniforms, ssbos, etc into one. Requires a few checks to change from graphics shader stages into all shaders. Bug: angleproject:6596 Change-Id: Ic8f6bfc4fa295c3bea9f5f1ded11e8fbca1c3164 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3233361 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>