src


Log

Author Commit Date CI Message
Christopher Cameron 66665af2 2020-07-28T15:26:42 macOS/ARM: Allow populating GPU based on AGXAccelerator The existing scheme for populating GPU vendor and device IDs fails on macOS/ARM. If we find no PCI registry entries, look for a AGXAccelerator entry, and (partially) populate that. This is sufficient for Chrome to initialize hardware acceleration. It is unknown how this will interact with multiple GPUs, and this will likely need to be revisited. Bug: chromium:1110421 Change-Id: I08069d7aecf45c83a1d2827cfccc4733c1835994 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2324939 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Lingfeng Yang <lfy@google.com> Commit-Queue: ccameron <ccameron@chromium.org>
Shahbaz Youssefi f776eb9c 2020-08-01T23:45:24 Vulkan: EXT_multisampled_render_to_texture2 support The previous change that implemented EXT_multisampled_render_to_texture already provisioned this extension in the Vulkan backend. This change implements the front-end for this extension and enables it in the Vulkan backend. Bug: angleproject:4836 Change-Id: I7080260972e61727c5716051c236f635668cb67b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2330510 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Shahbaz Youssefi 47207e42 2020-08-01T23:43:43 Vulkan: Fix blit/resolve of mixed-samples framebuffers A framebuffer could contain a mixture of multisampled and multisampled-render-to-texture attachments. When used as the source of a glBlitFramebuffer operation, the former requires a resolve while the latter is a blit. This change fixes this use-case. Bug: angleproject:4836 Change-Id: I1d39bf25f54df9f8b68304058596a2d1c975f9ba Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2333987 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jonah Ryan-Davis d41280a7 2020-08-04T09:08:05 Suppress SurfacelessContext test on Android/NVIDIA EGLSurfacelessContextTest.Switcheroo/ES2_OpenGLES_NoFixture is failing on NVIDIA Shield TV. Bug: angleproject:4924 Change-Id: I4bd0744fd19cb3473cc654ede5870374506ddc46 TBR=jmadill@chromium.org Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2336189 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cody Northrop 7d741c85 2020-07-31T15:40:17 Tests: Remove more optimizations from traces With the addition of NBA2K20, which has stressed multiple parts of our solution, we need to scale back the optimization done on the trace itself. Otherwise the link never completes. Test: angle_perftests --gtest_filter="TracePerfTest.Run/*nba*" Bug: b/160014453 Bug: angleproject:4048 Change-Id: I064813326d401cdcc5649c45255eb214cbf0a2db Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2335607 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
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>
Jamie Madill 11207393 2020-08-01T19:47:21 Vulkan: Add an overlay counter for descriptor writes. Note: currently the trace test shows about 1000 descriptor set writes per frame in NBA2k20. Bug: angleproject:4911 Change-Id: Id50d05fe405249c80a38dbbe3c96e7bd8c66cbc4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2333398 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Jamie Madill 22e6fc03 2020-07-31T15:58:28 Vulkan: Move Resource Serial gen into Renderer. Putting Serial allocation in the Renderer allows the Helper classes to manage allocating its own Serial. The init functions for ImageViewHelper only have access to a vk::Context/RendererVk, not a ContextVk. This will be updated in a future CL. Re-uses the Serial Type X-Macro to do more code generation. Serial allocation now uses an atomic because of its now Renderer shared location. Bug: angleproject:4911 Change-Id: I2d5d3d0bbf613d5468de795a700f66164291bc79 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2332884 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Jamie Madill 1780609d 2020-08-03T17:01:21 Trace Tests: Disable timestamp queries. This framebuffer changing timing code adds overhead so it should stay disabled unless turned on explicitly. This was causing a performance regression in the native benchmark for some trace tests like egypt. Bug: angleproject:4845 Change-Id: I51c77d544cae063ba185aa4f20d028d9ffa7a2ab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2335021 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jonah Ryan-Davis 515b0775 2020-07-31T12:14:59 Metal: Enable EGL_KHR_surfaceless_context. Surfaceless contexts are emulated in the frontend so this extension can be enabled for the metal backend. It's needed to run Chrome with ANGLE's metal backend. Bug: angleproject:4847 Change-Id: I3a2f74fd5f2ac75a056c528c8b30ffbd41d73e46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2332880 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
Manh Nguyen 846cd169 2020-07-30T22:11:12 Add vertex array serialization capability Serializes vertex arrays' states stored on CPU. Adds vertex array serialization to serializeContext method so that capture replay regresssion testing now compares the states of vertex array objects too. Bug: angleproject:4817 Change-Id: Ia2897c056adff9bd433765186240ab07f78db232 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2331737 Commit-Queue: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Mohan Maiya 4c7e3ee3 2020-08-03T12:26:05 Capture/Replay: Account for EGL_KHR_no_config_context EGL_KHR_no_config_context allows creating a context with EGL_NO_CONFIG. Add a null check when collecting config attributes. This fixes trace capture of Angry Birds 2 by allowing CaptureReplayTest to pass EGL_DONT_CARE for the config parameters. Bug: angleproject:4817 Change-Id: I982136ae2a7db4bd8d3f16f4accfe093e5610091 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2333356 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Manh Nguyen be6a1d87 2020-07-29T10:15:28 Add texture serialization capability Serializes textures' states stored on CPU. Gets textures' contents at every mipmap level from GPU then serialize them. Adds texture serialization to serializeContext method so that capture replay regresssion testing now compares the states of texture too. Bug: angleproject:4817 Change-Id: I87670fdc744f96d4ff244462dee1a065de44f9b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2325029 Commit-Queue: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 69ca1025 2020-07-31T02:08:09 Metal: Implement EGL_ANGLE_iosurface_client_buffer. GL_R16UI format is not supported yet. It will be implemented once integer textures are implemented in metal back-end. Bug: angleproject:4847 Bug: angleproject:2634 Change-Id: I60a52c0ce327a524c74e80b18bb15978ac52065b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329091 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen a5a08b5e 2020-07-31T01:57:33 Metal: Enable end2end tests on Intel. Bug: angleproject:4133 Bug: angleproject:2634 Change-Id: I3eff5ff81e908eec2990eb036728aa9878c8f802 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329090 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jonah Ryan-Davis 4f7f4387 2020-07-24T11:44:02 Add entry points for OES/EXT_texture_buffer This extension is core in 3.2 Bug: angleproject:3573 Change-Id: If08736759da2fdc680cfa396d354dbfa97d1a60f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2317040 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Charlie Lao 4e1abc75 2020-07-24T10:38:40 Vulkan: Set depthStencil loadOp to DontCare when not used and stored If depth stencil buffer is disabled during entire renderpass, and at the end of renderpass we are not storing the data back to memory, then force the loadOP to DontCare to avoid unnecessary depth stencil load or clear. Bug: b/162080462 Change-Id: I30905a6d45bec038de68e7f363ec699eb2be09ab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2317726 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 91f54d83 2020-08-02T11:28:49 Capture/Replay: Use vector for resource maps. unordered_map was showing up as a hotspot in replay profiling. Bug: angleproject:4916 Change-Id: I840371313ab51faa088664b9840c7ef3f998fcad Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2334094 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Manh Nguyen <nguyenmh@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen 663075ac 2020-07-31T01:54:45 Metal: Fix Intel's LOD clamp and blit shader's filtering. 1. Setting max LOD clamp = FLT_MAX via setSamplerState caused mipmap tests failure on Intel. It always picked wrong mipmap level during texture sampling. Fix: Use value from SamplerState::getMaxLod() instead. 2. Also set default linear filtering for blit shader's sampler. Previously there was no sampler set for this shader. It caused black fragments on Intel. This CL is a prerequisite for enabling end2end tests on Intel & Metal. Bug: angleproject:4133 Bug: angleproject:4915 Bug: angleproject:2634 Change-Id: I9e6b669712a294e09ab692a3c65f3956a799ef8b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329089 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 6c5ad2e9 2020-08-01T15:43:43 Vulkan: Remove ImageHelper::mSerial. This serial is no longer used by any code. Bug: angleproject:4911 Change-Id: Id82ef697b81b5738333f3280c58fd613615b6e09 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2333397 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 2d0265fa 2020-08-02T12:01:46 Trace Tests: Scale results based on frames in capture. This now reports averaged time per frame instead of per "step". Scores in general will be divided by 11. Results still reported in nanoseconds. Bug: angleproject:4920 Change-Id: I6f9dca75885cce358c3c7d1e871441969d8aa3d3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2334095 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 89ade79a 2020-07-31T16:04:09 Vulkan: Clean up ScopedDescriptorSetUpdates. Matches style guide requirement for types before members. Also moves the implementation of the class entirely into the cpp file. Moves the method implementation in ContextVk so we can more easily alter member variables. Unrelated cleanup done while working on consolidating RenderPasses. Bug: angleproject:4911 Change-Id: Ibe4273fc609b494840f1e86584bcee5bc31397d5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2331950 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Manh Nguyen fba96e90 2020-07-30T10:04:59 Add shaders and programs serialization capability Serializes shaders and programs' states stored on CPU. Adds shaders and programs serialization to serializeContext method so that capture replay regresssion testing now compares the states of shaders and programs too. Bug: angleproject:4817 Change-Id: I026762ffcd85c9cf209f17d02025730aa286bd2f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329830 Commit-Queue: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill 322cc825 2020-08-02T17:27:23 Rename RenderPass test to performance counter test. This is a better naming for new tests that will check other counters such as the number of command buffers, barriers, and descriptor set writes. Bug: angleproject:4911 Change-Id: I8b2c12f6e043c2833e64fa9627f781e61f8f0f3d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2334089 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 41442cce 2020-07-31T11:44:38 Autogenerated changes for GL_EXT_multisampled_render_to_texture2 Bug: angleproject:4836 Change-Id: I86143c6b21ecdbc666ce316b6e4a4b402257f01c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2332957 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Jamie Madill d04a5593 2020-07-31T10:55:38 Vulkan: Add RenderPass count test. Bug: angleproject:4911 Change-Id: I4c4e187b6b048118ce1231ae8924340ad382c43f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2331741 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Charlie Lao dae77893 2020-07-30T11:57:40 Vulkan: Avoid clearWithClearAttachment if RP command buffer is empty If renderpass has started but no command has been issued, we should chose to use loadOp to do clear instead of clearWithClearAttachment. Bug: b/162521656 Change-Id: Ia681fc96442c7916b4b92c48e970d9ed239a28c8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2330225 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com>
Shahbaz Youssefi 9b1cab0d 2020-07-31T11:40:05 Fix validation of glFramebufferTexture2DMultisampleEXT In preparation for GL_EXT_multisampled_render_to_texture2. This makes the validation reuse what's there for glFramebufferTexture2D in addition to what GL_EXT_multisampled_render_to_texture requires. Additionally, it uses packed enums for texture target and id. Bug: angleproject:4836 Change-Id: Ie778c84e1ff5a0cb6615257f2aff9e04395dd5aa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2332956 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 38e7f7a6 2020-07-30T14:35:50 Vulkan: Make CommandBufferHelper::empty() logic less obtuse CommandBufferHelper::empty() logic is simplified and commented to make it easier to read. Basically empty() means there is no work in the CommandBufferHelper object. For RenderpassCommands, that is equivalent to !started(). Bug: b/162521656 Change-Id: Ic9683b392835a677501cb81e5e8a025e031ebf93 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2330379 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Manh Nguyen aca14d47 2020-07-29T13:52:28 Add renderbuffer serialization capability Serializes renderbuffers' states stored on CPU. Gets renderbuffers content from GPU then serialize them. Adds renderbuffers serialization to serializeContext method so that capture replay regresssion testing now compares the states of renderbuffers too. Bug: angleproject:4817 Change-Id: I537b11ee85decb14eea461ebbd62ce6ab0402f85 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2327173 Commit-Queue: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Jamie Madill bd7cef28 2020-07-31T11:18:27 Trace Tests: Fix Win/x86 crash. A missing KHRONOS_APIENTRY annotation was causing a crash due to stack corruption in Win/x86 only. Bug: angleproject:4845 Bug: chromium:1111764 Change-Id: I60b30ce8bc409c71d223eaedd74dc0c1ae034f7a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2331739 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Le Hoang Quyen cbd5bee8 2020-07-13T20:31:29 Disable shader's pre-rotation code on Metal & non-Android. Pre-rotation code were added to transform gl_Position, gl_FragCoords, gl_PointCoords, dFdX, dFdY in shader. However, it is only useful for android's surface pre-rotation and completely un-needed in Metal back-end. This CL disables these pre-rotation code if the platform is not android. Bug: angleproject:4678 Change-Id: I89c42fcf24b49896f4ed9c2f9465da521beaf25f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2295000 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Kenneth Russell 19a1943b 2020-07-28T14:02:47 Allow GetSystemInfo to return false in CGL and EAGL backends. This API is documented as returning false if information is incomplete, but this should not cause a failure to initialize ANGLE's Display. This change is a refinement of one made in WebKit's downstream copy of ANGLE, likely in support of forthcoming Macs with Apple Silicon, in https://bugs.webkit.org/show_bug.cgi?id=213479 . Bug: angleproject:4902 Change-Id: I40a664a5db67b2aa37f15617b1cbcc3119793ee0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2324462 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Kenneth Russell <kbr@chromium.org>
Jamie Madill f3a38d97 2020-07-23T19:00:34 Add a custom trace tests loader. This custom loader will disambiguate the trace tests gl layer from the util GL/EGL loader. Bug: angleproject:4845 Change-Id: I5e8340eb50f736d931302f71f15f556fd9e52081 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2315627 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Manh Nguyen <nguyenmh@google.com>
Manh Nguyen 2c41931c 2020-07-21T14:21:27 Batch-compile and batch-run-replay multiple tests Multiple tests are batch-compiled into 1 replay application instead of multiple replay applications. Replay application now runs generated code of multiple tests instead of 1 test. This reduces overhead cost and brings down runtime. Main process now receives messages sent by workers via a message queue and prints them to the main stdout so that user can know if workers are hanging. Add handle for user interrupt (Ctrl-C) so that processes are properly destroyed and cleaned up. Trace files now have the option not to be deleted. Bug: angleproject:4817 Change-Id: Ic90ae0f430e1d3c261ffea5f963be5a4e94b0ad2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2310909 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Manh Nguyen <nguyenmh@google.com>
Jamie Madill d7d79de3 2020-07-30T11:08:02 Update inaccurate error string. Noticed when working on the traces. Bug: angleproject:4845 Change-Id: I954851bc739e41ce84047eaf5e0dc4c8bcf57199 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329832 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cody Northrop aed3d65b 2020-07-29T22:23:00 Tests: Add NBA2K20 trace Test: angle_perftests --gtest_filter="TracePerfTest.Run/*nba*" Bug: b/160014453 Bug: angleproject:4048 Change-Id: I4899af05d48ad2900e6d5e44adc5f5e0bdba157e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2326911 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Cody Northrop 248d754a 2020-07-29T16:50:03 Capture/Replay: Limit string lengths in capture MSVC can't handle string lengths longer than 16380 according to: https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2026 Example build failure without this CL: https://logs.chromium.org/logs/angle/buildbucket/cr-buildbucket.appspot.com/8873410048312858000/+/steps/compile_with_ninja/0/stdout Test: Compile NBA2K20 MEC with MSVC Bug: b/160014453 Bug: angleproject:4048 Change-Id: Ie14d40e8c3eea35d08d4be32455b327a311f1bcc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2327702 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tobin Ehlis a9504808 2020-07-29T16:33:45 Vulkan: ATrace marker fix-ups Fix a couple of mislabled atrace markers and add explicit markers for inside/outside renderpass flushes. Bug: b/156403378 Change-Id: I4045846e54ff54bc8fc3dd6ef47339f6f5eb8e87 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2327828 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Tobin Ehlis <tobine@google.com> Commit-Queue: Tobin Ehlis <tobine@google.com>
Shahbaz Youssefi dcc56215 2020-07-19T01:12:09 Vulkan: Implement GL_EXT_multisampled_render_to_texture This change allows the use of resolve attachments in the Vulkan backend. GL_EXT_multisampled_render_to_texture is implemented using this feature. The infrastructure for specifying resolve attachments is designed with eventual support for GL_EXT_multisampled_render_to_texture2 in mind as well as optimizations to glBlitFramebuffer() and multisampled backbuffers. Proper support for glRenderbufferStorageMultisampledEXT is still missing from this change. All tests use this for the depth/stencil attachment and don't read back the data. Currently, the depth/stencil attachment is created as a normal multisampled image. Bug: angleproject:4836 Change-Id: I110a7f63312ae61a657b6094adf7d97c92bd5843 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2304170 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Peng Huang d56ed7cf 2020-07-30T08:13:07 Support EGL_ANGLE_display_semaphore_share_group for DisplayNULL Bug: angleproject:4877 Change-Id: I811ff57625a6bac749a50a1a53da48e62f5b8222 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329285 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Shahbaz Youssefi 19aac801 2020-07-28T11:18:53 Vulkan: Remove unnecessary endRenderPass calls. In both onImageRead and onImageWrite, there's a call to endRenderPassAndGetCommandBuffer when necessary to record a command. There was an extraneous call to endRenderPass in both functions for no good reason. Bug: angleproject:4882 Change-Id: I8f3b18dbb3cb9a8b92dedcc603eaf44b1e485986 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2323642 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Ian Elliott 1c1c6b4e 2020-07-29T13:17:16 Vulkan: Cache/re-use vkImageView's per max level For applications that frequently switch a texture's max level, cache and re-use "read view" vkImageViews per max-level. Test: NBA 2K20 Test: angle_deqp_gles3_tests --gtest_filter=dEQP.GLES3/functional_texture_mipmap_*_max_level_* --use-angle=vulkan Bug: b/161993151 Change-Id: I9a6a81d5234196040bc6c264ec627a073ba73293 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2321370 Commit-Queue: Ian Elliott <ianelliott@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Peng Huang 4cf2501c 2020-07-27T13:19:27 Add extension EGL_ANGLE_display_semaphore_share_group For sharing semaphores globally. Bug: angleproject:4877 Change-Id: I472e0902fd04ca8350d74e6c0ae6925ee930ccf9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2319370 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Cody Northrop 5f6f47f6 2020-07-29T14:26:37 Tests: Update gfxbench traces Use new capture calls to support offscreen mode. Test: run_angle_perftests --gtest_filter="*Trace*" Bug: angleproject:4845 Change-Id: I6d9ea79bd8339b7d5398e34b0407425e80ce1d32 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2327699 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cody Northrop cc846039 2020-07-27T21:05:11 Capture/Replay: Fix GetTexImage on Luminance GetTexImageANGLE and GetRenderbufferImageANGLE use ReadPixels to pull texture data. Luminance is not a renderable format, so it is not supported by ReadPixels. To support this, override Luminance formats to their underlying internal format. Test: angle_end2end_test --gtest_filter="*GetTexImage*" Bug: b/160014453 Bug: angleproject:4058 Change-Id: Id19344c2e2c06386a871338833e35b7747cb966b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2321740 Reviewed-by: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill d019af80 2020-07-29T11:30:34 Capture/Replay: Fix missing header. This was missing from a prior commit. Bug: angleproject:4845 Change-Id: Iff2b0f300270df4c2e26265c5af81af8ae7e5e54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2325032 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cody Northrop e4ceee97 2020-07-17T15:57:37 Capture/Replay: Break up SetupContext While getting NBA2K20 MEC to work, discovered that SetupContext was so large, it was causing a stack overflow. To fix, simply break up the function into a series of helpers if the number of calls exceeds a set limit. Test: NBA2K20 MEC Bug: b/160014453 Bug: angleproject:4048 Change-Id: I332d5dea5fc4e14700b68150cbe31a4c88cdae89 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2321739 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Manh Nguyen <nguyenmh@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill bba8daea 2020-07-27T20:07:53 Perf Tests: Use timestamp queries for GPU time. Testing shows that using timestamp queries and deferring the query get calls until after the frame produces little overhead. Also this fixes a missing GPU time reset between iterations. Bug: angleproject:4879 Change-Id: I2a566548add1536aab689cd969594a15f0628da3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2321573 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
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>
Manh Nguyen 2918eade 2020-07-28T13:08:05 Remove context id serialization Serializing context id causes many tests to fail capture replay test. Remove it from the the GL context state's serialization. Bug: angleproject:4817 Change-Id: Ide04f24c54d1f1fced532e49e85c0c2970816f5e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2323645 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Manh Nguyen <nguyenmh@google.com>
Jamie Madill 44bb4d7a 2020-07-22T13:58:50 D3D11: Fix bug with static vertex attributes. In some specific cases after binding a zero size buffer we could end up trying to use a buffer storage that was no longer valid. Fix this by ensuring we don't flush dirty bits when we have an early exit due to a zero size buffer. Also adds a regression test. Bug: chromium:1107433 Change-Id: I9db560e8dd3699abed2bb7fe6d91060148ba1817 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2314216 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Manh Nguyen 50a27257 2020-07-22T22:14:16 Adds sampler serialization capability Adds the ability to serialize sampler objects. Adds serialization of sampler objects to serializeContext method so that capture replay regression testing now compares the states of samplers too. Bug: angleproject:4817 Change-Id: Ic32d442eac9aa3afc5c9eea577522fe7054a755a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2315048 Commit-Queue: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 68791f89 2020-07-20T17:42:23 Vulkan: Fix sub invalidate marking render targets undefined When glInvalidateSubFramebuffer is called, the framebuffer is only partially invalidated. FramebufferVk::invalidateImpl was nevertheless marking the render targets as undefined, which would lead the subsequent render pass have loadOp=DONT_CARE. This is not correct, as the rest of the framebuffer is expected to still be valid. Bug: angleproject:4859 Change-Id: I2e64baa32b1fc84beb8008411b564cd7619af962 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309111 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Charlie Lao de309a42 2020-07-21T17:19:17 Vulkan: Make staging buffer per context Right now staging buffers are per BufferVk. This will make it per ContextVk so that it can be shared among all objects that needs a staging buffer. Bug: b/161846868 Change-Id: I9c436acdacaf429a43cbdfa216927df0796f7a28 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2310962 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Manh Nguyen db88baa8 2020-07-23T11:12:46 Serializes GL context states and reformats frame_capture_utils Adds the ability to serialize GL context states. Adds serialization of GL context states to serializeContext method so that capture replay regression testing now compares the GL context states. Reformats frame_capture_utils to make most serialization methods private, except for the ones called by other classes and template methods. Bug: angleproject:4817 Change-Id: I2d53c88be3d503268bd6e2e5058b5fabe0644f67 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2314829 Commit-Queue: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 52d25633 2020-07-27T17:37:46 Disable GPU time tracking in trace tests. Adds considerable overhead to wall time on Adreno. Not tested on other platforms. Bug: angleproject:4879 Change-Id: Ib219f14162fb5768e484f717ed2a870478bd1c86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2321404 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Charlie Lao afdea864 2020-07-20T17:03:31 Vulkan: Add cache for driver uniform descriptor set As we have done for default uniforms and textures, we should cache descriptorset for driver uniforms to avoid repeatedly create them. Bug: b/161750230 Change-Id: I0afabb226d5a8e8c7838fa2484ec7f9689ed5fa0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309349 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 248119b3 2020-07-20T16:05:45 Vulkan: Fix render target's tracking of content defined Imagine the following scenario: 1. Clear draw framebuffer 2. Invalidate draw framebuffer 3. Update texture attached to draw framebuffer 4. Draw again into draw framebuffer Step 3 could be a number of things, such as glCopyTex[Sub]Image, glBlitFramebuffer, glTex[Sub]Image2D, glGenerateMipmap etc. In the above scenario, at step 2, the framebuffer's render target remembers it being invalidated (mContentDefined = false). This is used to set the loadOp of the next render pass to DONT_CARE. However, mContentDefined was implemented for a very specific optimization regarding the swapchain's depth buffer. The reuse of this variable for glInvalidateFramebuffer was erroneous as this variable didn't track whether the contents are defined for the general case. With this change, mContentDefined is set to true during FramebufferVk::syncState for each render target whose contents are marked dirty. This change additionally makes glBlitFramebuffer signal the contents of the blit targets as dirty, as well as textures that are used as storage images. Bug: angleproject:4859 Change-Id: I68c829f75ff4a3d03bb293ec72c609384983026d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309110 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@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>
Charlie Lao 8765b46a 2020-07-15T17:10:35 Vulkan: Make mDefaultUniformStorage per ContextVk Right now the dynamic buffer for default uniform is per program. Most of time the buffer is unused. That is a huge waste of memory (and these memory are wired memory). This CL moves the mDefaultUniformStorage from per ProgramVk to ContextVk so that we all share with each other. Bug: b/161391337 Change-Id: I1fe8523b2b2dbc39bec3509a3432e38e34bd5713 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2274870 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Manh Nguyen 3b0c9918 2020-07-21T11:52:13 Update CaptureAndReplay.md and Python script with links Links to the Python script in CaptureAndReplay.md Links to CaptureAndReplay.md's testing section in the Python script Bug: angleproject:4817 Change-Id: I584f8508661950e4907dae1adb8f0fe300387198 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309226 Commit-Queue: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 3f851efa 2020-07-24T14:54:37 Vulkan: Fix overflow in maxCombinedUniformComponents The value is capped to INT_MAX to avoid overflow when queried with glGetIntegerv(). Bug: angleproject:4554 Bug: angleproject:4788 Change-Id: I36d52fc608ef5adc2bc0b73e379db66cbfd9bb54 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2318046 Reviewed-by: Mohan Maiya <m.maiya@samsung.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 07ae186b 2020-07-24T10:55:33 Capture/Replay: Update headers. Instead of including "angle_trace_gl.h" in shared capture header we can include it in each cpp file. This prevents a header conflict with the "old" way of using the util GL loader. Bug: angleproject:4845 Change-Id: Ia00a2beffc77446c779ceec8995fce9704e7b8af Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2315625 Reviewed-by: Manh Nguyen <nguyenmh@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
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>
Tim Van Patten bef908ee 2020-07-24T12:53:13 Enable KHR GLES31 tests blocked on Issue 4146 The KHR GLES31 tests disabled and marked with Issue 4146 are passing, likely due to the work for Issue 3570: Vulkan: Implement separate shader objects or program pipeline objects. This CL re-enables the tests. Bug: angleproject:4146 Bug: angleproject:3570 Test: KHR-GLES31.core.shader_storage_buffer_object.basic-syntaxSSO Test: KHR-GLES31.core.vertex_attrib_binding.advanced-bindingUpdate Test: KHR-GLES31.core.vertex_attrib_binding.advanced-largeStrideAndOffsetsNewAndLegacyAPI Change-Id: I4e42129c873604c937cf03412a105170755413e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2318265 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Jiajia Qin f359cb66 2020-07-02T15:15:54 Reland: Refactor DisplayGbm::generateConfigs We should explicitly set EGL_SURFACE_TYPE to EGL_DONT_CARE. Otherwise, it's default value is EGL_WINDOW_BIT. However, on some platforms, only EGL_PBUFFER_BIT is supported. In this case, no matching config is found. So mWindowSurface and mPbufferSurface will be nullptr. That's why we see the bot failed. Bug: chromium:1105208 Change-Id: I8ee2487fd24bab86a5ec22fbe7b8ff68081bc15c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2304429 Commit-Queue: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Jiajia Qin 074bc23f 2020-07-21T18:11:57 Implement DRM_FORMAT to GL format conversion Bug: chromium:1096442 Change-Id: I79722073bd1f2674b40e7eaa8d5311a09bc36416 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309636 Commit-Queue: Jiajia Qin <jiajia.qin@intel.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cody Northrop ca8f856a 2020-07-22T13:56:40 Tests: Update gfxbench traces Migrate from traces recorded on desktop to traces recorded on a Pixel 4 XL. This impacts the resolution and framebuffer config used for the tests. They now more accurately reflect the numbers seen from running the benchmark directly. Test: angle_perftests --gtest_filter=TracePerfTest.Run/* Bug: angleproject:4048 Change-Id: Ib013dfb35c32c6f97bcae76a74cc16d9a5d1a369 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2314896 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Mohan Maiya ffb31229 2020-07-22T12:02:54 Capture/Replay: Enable capturing slingshot scenes Implemented parameter capture functions for: glGetActiveUniformsiv glGetActiveUniformBlockName glGetActiveUniformBlockiv Added a check for bound unused locations when capturing glLinkProgram Changed CaptureGetParameter to always request a gReadBuffer allocation of the maximum reported possible array size needed to query GL_COMPRESSED_TEXTURE_FORMATS. Recording the value on the capturing device would previously have buffer overflow issues when the replaying the capture on a device with more formats available. Changed VertexAttribType::UnsignedInt2101010's string to reflect the correct type Bug: angleproject:4834 Change-Id: Icd1ff404369ae9f18cad7cd4f56fbcccc89e7e98 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2306735 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
Jamie Madill a4535c18 2020-07-22T14:52:26 Fix trace tests auto-generation. This moves the trace header inclusion to the cpp file so that the test itself doesn't need to look at the individual trace headers. This fixes an include directory dependency. Also removes the FBO change callback from the generated traces. Bug: angleproject:4845 Change-Id: I019f0d347a62a81b92bf32110572911111212689 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2314217 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 9faf0cdc 2020-07-20T10:30:55 Capture/Replay: Use custom GL header. This will let us override the util loader for all new traces. It will also be easier to maintain going forward if we have to change the header again. The end goal is to run the trace tests with a custom GL layer that can intercept certain API calls. Bug: angleproject:4845 Change-Id: I028a1afdadf638998805d7b9a2cc6717cf5f0148 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2308029 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Geoff Lang ab95a449 2020-07-20T12:12:18 Textures that have bound surfaces are always renderable. Chrome still tends to use ES2 contexts for most rasterization. This is a problem when trying to use FP16 IOSurfaces for rendering HDR because GL_RGBA16F is not renderable in ES2. Since a surface is always renderable, allow rendering to any textures with a bound surface. Update the tests to verify that ES3 formats can be used with ES2 contexts. Add tests for RGBA16F IOSurfaces. BUG: chromium:1103112 Change-Id: I9e8c082fc97a0e072289b097e71fc944988d4872 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2307454 Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Wander Lairson Costa ee9c4fe4 2020-07-14T15:29:40 D3D: Make possible to build angle without D3D11 A few files inside the D3D11 tree are used by D3D9 and WGL backends. We add these files to the build system even when D3D11 is disabled. Also, we fix the use the of ANGLE_DEFAULT_D3D11 symbol. Bug: angleproject:4839 Change-Id: I981f4bfc60d973c02549caa737c5aed5ccf31282 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2298143 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi f6659b3d 2020-07-20T15:55:52 Vulkan: Fix invalidate + deferred clear Imagine the following scenario: 1. Clear draw framebuffer 2. Invalidate draw framebuffer 3. Copy from read framebuffer into texture that is attached to draw framebuffer 4. Draw again into draw framebuffer At step 2, FramebufferVk::syncState is called which extracts the clear and stores it in mDeferredClears, but since the framebuffer description hasn't changed, a new render pass is not started. At step 3, the texture attached to the draw framebuffer is used as copy destination, but its clear which is stored in the (apparently irrelevant) draw framebuffer is not flushed. At step 4, a new render pass is started which clears the draw framebuffer, trampling the copy in step 3. This change makes sure invalidate results in a flushDeferredClears(). With glInvalidateFramebuffer() (not glInvalidateSubFramebuffer()), the deferred clears for invalidated framebuffers are discarded first. It is unknown whether there are similar situations where syncState gathers deferred clears, but they are not flushed before the attachments are updated outside the framebuffer. To catch similar bugs in the future, assertions are added to FramebufferVk::syncState such that if a dirty bit is set for the contents of an attachment, we can make sure there are no prior deferred clears stored for that attachment. Bug: angleproject:4862 Change-Id: Idb1a08b53e7f011f0fc9a54d478289030b6d77a8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2308034 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi c757e607 2020-07-21T10:18:41 Vulkan: Fix deferred clears and noop clear and blit Imagine the following situation: 1. Clear draw framebuffer 2. Noop operation on the framebuffer (Clear, ClearBuffer, BlitFramebuffer with flags specifying non-existing attachments) 3. Change framebuffer's attachment 4. Draw into framebuffer At step 2, FramebufferVk::syncState was called before noop-ing the operation. During syncState, deferred clears were stored in the framebuffer and weren't flushed because the actual operation was not performed. At step 4, the deferred clear meant for the prior attachment gets applied to the new attachment. Bug: angleproject:4865 Change-Id: I5b096bacf00356b4dccd4cbc9561b87b1bb557d8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309224 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Courtney Goeltzenleuchter 93eb633c 2020-07-07T15:41:38 Inline depth/stencil clear if in middle of renderpass Some apps have a pattern where they clear the depth & stencil buffers in the middle of the frame which causes the Vulkan backend to stop the existing render pass and start a new one. This causes more loads & stores of buffer contents than if we inline that clear with a draw. Bug: b/159808300 Bug: angleproject:4695 Change-Id: I7a15af22f47a81051fa33fa19eaa123d8b66597c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2289945 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 964c4089 2020-07-21T14:08:21 Vulkan: fix RenderPassDesc::mColorAttachmentRange This variable tracks the index range of color attachments. A previous change (d8ce865b5fd113d8e0cec4368a9a192a524566a1) made the range inclusive so it can fit in 3 bits, but that's incorrect as it's no longer possible to specify a range where no color attachments are present. This change partially reverts d8ce865b5fd113d8e0cec4368a9a192a524566a1 to restore the previous semantics of RenderPassDesc::mColorAttachmentRange. Bug: chromium:1107884 Change-Id: I08da2568b5e63a48a672edd499a8b6653060eadb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2310578 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Jamie Madill 6ca2c116 2020-07-17T13:07:24 Make trace tests a shared library. This will facilitate intercepting the GL calls and implementing emulation paths for offscreen redering. Or other EGL/GL features. It does not yet override the GLES loader and uses the shared 'angle_util' loader as it did before. Bug: angleproject:4845 Change-Id: I68806c307f59e1852999299e88dc358781817f12 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2305042 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 4fa75b5c 2020-07-17T12:58:50 Move restricted trace functions to cpp file. This is a refactoring change only. It will facilitate moving these functions to a shared library. A shared library will allow us to more easily override GL functions with an interception layer. The intercept layer will allow us to do emulation for features like offscreen tests. Bug: angleproject:4845 Change-Id: I0e00c0c22a26f1bb8faec30a825c71953033f8a9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2305039 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 23211585 2020-07-21T10:08:03 Roll chromium_revision b0410bba02..fb6cbaf6e5 (763000:790363) Also updates a Vulkan back-end file to not return error. Change log: https://chromium.googlesource.com/chromium/src/+log/b0410bba02..fb6cbaf6e5 Full diff: https://chromium.googlesource.com/chromium/src/+/b0410bba02..fb6cbaf6e5 Changed dependencies * build: https://chromium.googlesource.com/chromium/src/build.git/+log/45ab3c89af..1ee11394cf * buildtools: https://chromium.googlesource.com/chromium/src/buildtools.git/+log/204a35a2a6..9e121212d4 * testing: https://chromium.googlesource.com/chromium/src/testing/+log/3993ef1f52..f126fc6578 * third_party/Python-Markdown: https://chromium.googlesource.com/chromium/src/third_party/Python-Markdown/+log/36657c103c..9c8566e047 * third_party/googletest: https://chromium.googlesource.com/chromium/src/third_party/googletest/+log/217407c478..defbf92951 * third_party/jsoncpp: https://chromium.googlesource.com/chromium/src/third_party/jsoncpp/+log/{chromium_..ec647b85b6 * third_party/nasm: https://chromium.googlesource.com/chromium/deps/nasm.git/+log/4fa54ca5f7..19f3fad68d * third_party/zlib: https://chromium.googlesource.com/chromium/src/third_party/zlib/+log/ae385786ed..89bddfee9c * tools/clang: https://chromium.googlesource.com/chromium/src/tools/clang.git/+log/04b99e7bf9..6412135b39 * tools/md_browser: https://chromium.googlesource.com/chromium/src/tools/md_browser/+log/aae45d8d82..be8cf5a17d DEPS diff: https://chromium.googlesource.com/chromium/src/+/b0410bba02..fb6cbaf6e5/DEPS Clang version changed 4e0d9925d6a3561449bdd8def27fd3f3f1b3fb9f:04b9a46c842f793a2baedcad64de35fcbd3e93b7 Details: https://chromium.googlesource.com/chromium/src/+/b0410bba02..fb6cbaf6e5/tools/clang/scripts/update.py Bug: angleproject:4867 Change-Id: I184945ad4d1fc39f4ad9b37cbf411b2c2b74a3ab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309223 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 1cfc6f0a 2020-07-20T16:03:38 Add test for deferred clear + attachment gaps This test makes sure the list of clear values given to the render pass (for deferred clears) are correctly passed. Bug: angleproject:4862 Change-Id: I4830a72a6f2b01570f6d4427ffb025429b5aa03c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2309109 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Geoff Lang 16856027 2020-07-08T13:47:33 Support EXT_shader_texture_lod on Vulkan. Bug: angleproject:2899,b/161716126 Change-Id: Ia850cbda948c8f6da9ced0bf46fd7f8371125032 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2288333 Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Manh Nguyen 10e9e9a1 2020-07-13T17:02:38 Apply multiprocessing to capture_replay_tests.py Multiple tests are run in paralell to squeeze the most out of CPUs. Tests are stored in a work queue. Whenever a CPU becomes available, the next unrun test is grabbed and run on a spawn process on that CPU. Each cpu gets their own environment and build folders and trace folders so that tests don't overwrite each other. Bug: angleproject:4817 Change-Id: Ifd35c9c75522e480b0257d090d5af70f2a3428ba Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2296040 Commit-Queue: Manh Nguyen <nguyenmh@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi d9818fd6 2020-07-19T00:37:21 Vulkan: Improve RenderTargetVk's getImage interface Prior to this change, RenderTargetVk had getImage() and getImageForWrite(). This change introduces getImageForCopy() and renames getImage() to getImageForRenderPass(). Currently, all three functions do the same thing. However, with upcoming changes the semantics will be different: - getImageForRenderPass(): This is the image used as the non-resolve attachment. When resolve attachments are introduced, there will be a corresponding getResolveImageForRenderPass(). - getImageForCopy(): When GL_EXT_multisampled_render_to_texture is implemented, this will return the image that owns the data. - getImageForWrite(): Similar to getImageForCopy(), but should set mContentDefined. This is currently missing, and is a bug that will be resolved in a follow up. This split change gets the mechanical rename out of the way to make future changes simpler. Bug: angleproject:4836 Bug: angleproject:4859 Change-Id: I5f7657cc049c0e1772a7c510e74289e685ba93c3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2306516 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Tim Van Patten 80d7725d 2020-07-15T15:14:17 Use Subject/Observer pattern for Programs/Executables in PPOs This CL updates the frontend to use the subject/observer pattern for Programs and ProgramExecutables in PPOs. This allows us to remove the hack that iterated through all PPOs and marking them all dirty when a Program is re-linked. Instead, just the PPOs the Program is bound to are signalled, and only when the Program is in a PPO. Additionally the necessary PPOs are signalled when an Executable's textures are updated, rather than iterating through all PPOs and signalling them. Bug: angleproject:4559 Test: CQ Change-Id: Iaefb88c64c13259e921c8dfe95cf640247d17f85 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2300705 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Shahbaz Youssefi d8ce865b 2020-07-19T00:20:17 Vulkan: Make room in RenderPassDesc for resolve attachments Data in RenderPassDesc is packed better to make room for resolve attachments (9 bits made available; 8 for color and 1 for depth/stencil). mColorAttachmentRange contains values in [0, 8). The right side of the range is made inclusive (i.e. [0, 7]) so it will fit in 3 bits. The number of samples is always a power of 2, and below 128 (for the foreseeable future), so its log is stored instead in 3 bits. This change doesn't add support for resolve attachments yet, but is split off the one that does to simplify it. Bug: angleproject:4836 Change-Id: I2856286d5239499d0ab0c78b8154881c003309bc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2306515 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
Ian Elliott 7e2a9820 2020-07-20T12:38:05 Vulkan: Make explicitly-[non-]rotated get methods Split FramebufferVk::getCompleteRenderArea() into 2, [non-]rotated, explicitly-named methods. Simplify the uses of these methods, and fix some rotation cases. Also explicitly-name FramebufferVk::getScissoredRenderArea(). Bug: b/151111296 Change-Id: I1754ec2796fd8625b916a2dba2e723e70ecba419 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2305389 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>
Charlie Lao bdc79361 2020-07-15T17:01:05 Vulkan: No need to add current buffer into mResourceUseList This is follow up to https://chromium-review.googlesource.com/c/angle/angle/+/2288325. There is no need to add current buffer to mResourceUseList for the per context dynamic buffers. These dynamic buffers always shut down after we call finishImpl. Bug: b/160777679 Change-Id: I013cb3c30b4d31804cee13ce9e42da381fd1ae1b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2300208 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com>
Shahbaz Youssefi cd5489ad 2020-07-19T00:05:21 Vulkan: Faster FramebufferDesc compare Objects of this class are used as keys to a hash map and contain 10 serials. Prior to this change, operator== would compare all 10 serials. This change tracks the maximum index set and only compares up to that many serials. To make sure this maximum index stays low in the presence of depth/stencil attachment, this class stores the depth/stencil attachment's serial before the color attachments. The update API of the class is improved so this implementation detail is not leaked. This is in preparation for supporting resolve attachments, which would add another 8 serials to the class. With this change, the performance of cases that don't use resolve attachments won't be affected. Bug: angleproject:4836 Change-Id: Ia4874ab79163901fb86f5bee4120e9f19babdc09 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2306514 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
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>
Ian Elliott 0df0b79c 2020-07-17T16:26:21 Vulkan: Optimize changing texture max level For applications that frequently change the texture max level, to a value that is a subset of the texture's maximum levels, just recreate the VkImageView's. Test: NBA 2K20 game play Bug: b/160976091 Change-Id: I62a05a90cdb90147056ba8cec960c2114479ec37 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2300532 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com>
Geoff Lang 49108a12 2020-06-30T11:53:23 Support BGRA_1010102 IOSurfaces in CGL and Vulkan. Bug: chromium:1100599 Change-Id: I7bc2c2e35490e28e9f6fe8f2e0c26cdea50650b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2275731 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Cody Northrop 5671c2bd 2020-07-17T13:32:22 Capture/Replay: Fix vertex array objects for MEC While debugging NBA2K20 MEC, fixed the following issues: * Don't bind built-in attributes locations. * Don't emit glGenBuffers for the default VAO. * Include element array buffer in MEC. Test: NBA2K20 MEC Bug: b/160014453 Change-Id: I1b809946d67b6748b0670814be8dd090278dc38f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2307276 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Manh Nguyen <nguyenmh@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill 55e85549 2020-07-17T14:02:36 Lift warning from trace tests. Noticed when working on a related feature. Bug: angleproject:3630 Change-Id: I82638d37ee6d27dc824d5782c96387f0d000d585 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2305040 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Kenneth Russell 08c4d094 2020-07-16T18:48:59 Improve WebGL 2.0 readPixels support. Emulate GL_PACK_SKIP_PIXELS and GL_PACK_SKIP_ROWS on macOS, where it appears the OpenGL driver ignores these parameters. Add WebGL 2.0-specific validation constraints for pixel pack and unpack parameters. Bug: angleproject:4849 Change-Id: Iab566299223e05484a009817acb1ed2816023823 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2303905 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Courtney Goeltzenleuchter 9a9ef0ae 2020-07-15T16:50:32 Vulkan: Fix RTs attached to textures with non-0 mip Cleared confusion between GL level indices and VK level indices by adding the corresponding suffix to variables and function arguments. A handful of places that sent one index and expected the other are fixed. A couple more places needed this adjustment that were missed in the first CL. Also included a test to provoke those situations. The conversion between the two is given by: levelIndexGL = levelIndexVk + baseLevel; Bug: angleproject:4695 Change-Id: I3b8e5699abee1b011e52b666e6e245f44cb8ad6f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2302549 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com>
Ian Elliott bcec11c2 2020-07-16T18:28:17 Vulkan: FramebufferVk::clearImpl() break-RP fix FramebufferVk::clearImpl() needs to potentially rotate the results of getCompleteRenderArea(), so that it can be compared with the results of getScissoredRenderArea(). Bug: b/151111296 Change-Id: Iad1fbdcb1943bae00835d31863d32ee85dbc7c2d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2303606 Reviewed-by: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Ian Elliott <ianelliott@google.com>