- 04 Mar, 2019 2 commits
-
-
Chris Forbes authored
Previously we had generated this via deqp-vk --deqp-runmode=stdout-caselist + a sed one-liner to strip off the prefix. Unfortunately, that's not quite good enough -- that output contains a `GROUP: ` line for every non-leaf in the the test tree. deqp would then produce log spam when failing to find those nonexistent tests. New test list generated by also filtering those `GROUP: ` lines. Change-Id: If3c97724988f94e2e127e9e091960e1f51e3599a Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/26068Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Chris Forbes authored
Correct the sign of the area calculation. The front facing determination can then be written to exactly match the spec -- CCW means positive area is front facing. Change-Id: Ibed3e26b0cf77030325044c7dc9e818264a8750d Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/26009Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
- 02 Mar, 2019 1 commit
-
-
Chris Forbes authored
Our command buffer playback mechanism is safe for multiple inflight submissions of the same command buffer, so there is nothing special to do here. The problematic case of needing to carry some state from a primary command buffer into a secondary is already caught by the slightly later check for pInheritanceInfo. Bug: b/118619338 Change-Id: I782285fbc9127d59eeac7cbf79fea3f1952e3cde Reviewed-on: https://swiftshader-review.googlesource.com/c/25950Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Hernan Liatis <hliatis@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
- 01 Mar, 2019 4 commits
-
-
Alexis Hetu authored
Bug swiftshader:124 Change-Id: Ied13e859cc8984e59af393de6ca1a93428a0e30e Reviewed-on: https://swiftshader-review.googlesource.com/c/25949Tested-by:
Alexis Hétu <sugoi@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com>
-
Alexis Hetu authored
This cl adds proper storage and update of descriptor sets. The added functionality includes: - The descriptor pool now allocates the proper larger required storage needed to actually store descriptor set data. - Descriptor sets, when allocated, also get initialized with some basic header data (set layout) and also some Descriptor data when available (a.k.a: immutable samplers) - Descriptors are currently bindless, since it is simpler as a first implementation, but can easily be modified, which is intended to be done in the near future. For now, each descriptor set is either a VkDescriptorImageInfo, a VkDescriptorBufferInfo or a VkBufferView - Descriptors can be updated from either a VkWriteDescriptorSet or a VkCopyDescriptorSet structure. The update supports writing to multiple descriptor sets in a single operation and supports array sizes mismatch properly according to the spec Bug b/123244275 Change-Id: I1e0430e0014e26a304632a4b2b10ad0f69b06180 Reviewed-on: https://swiftshader-review.googlesource.com/c/24910Tested-by:
Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Corentin Wallez <cwallez@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Nicolas Capens authored
This change requires include directives to include the Vulkan/ path so it's clearer when we have dependencies across layers/folders. This was already the case for the other build files, so it avoids build breakage as well. Bug b/126557661 Change-Id: I4d8773e8c28e6677fd1e93ca9c9d2d843431343c Reviewed-on: https://swiftshader-review.googlesource.com/c/25948Reviewed-by:
Alexis Hétu <sugoi@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
Far from a complete set, but both Chris and I are looking at tests that require these opcodes. Bug: b/126870789 Bug: b/126873455 Change-Id: Idb2109cfc3352da83aa38d42eed5d15537dfb6b7 Reviewed-on: https://swiftshader-review.googlesource.com/c/25868Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
- 28 Feb, 2019 13 commits
-
-
Ben Clayton authored
I incorrectly (9a16248d) added an UNIMPLEMENTED to variables that have a storage type that is neither Input or Output. However, other storage types do actually work. Revert that change. Change-Id: I5ec36e9d6d536dcdd085c93e9f00782310e118d4 Reviewed-on: https://swiftshader-review.googlesource.com/c/25848Reviewed-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by:
Ben Clayton <bclayton@google.com>
-
Hernan Liatis authored
Bug: b/124265819 Change-Id: I19bbaeefe19ade1afeb6764d4f5576a29334d8bd Reviewed-on: https://swiftshader-review.googlesource.com/c/25490Tested-by:
Hernan Liatis <hliatis@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Hernan Liatis authored
Should pass the following deqp tests: dEQP-VK.wsi.xlib.surface.create dEQP-VK.wsi.xlib.surface.query_supportS dEQP-VK.wsi.xlib.surface.query_capabilities dEQP-VK.wsi.xlib.surface.query_formatsW dEQP-VK.wsi.xlib.surface.query_present_modes dEQP-VK.wsi.xlib.surface.destroy_null_handle dEQP-VK.wsi.xlib.surface.initial_size dEQP-VK.wsi.xlib.surface.resizeSW Bug: b/124265819 Change-Id: I92da1cc8d60923ea97aa26d3d6a098274c6e06b7 Reviewed-on: https://swiftshader-review.googlesource.com/c/25308Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Corentin Wallez <cwallez@google.com> Tested-by:
Hernan Liatis <hliatis@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
Pastel 1.0 does not need to implement logic ops. From discussion with capn@, the existing support was only ever partial, and covered the exact needs of a special project. Change-Id: I3003227c4d29ab5d39e0ae6385207c87d22931e2 Reviewed-on: https://swiftshader-review.googlesource.com/c/25828Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
Color attachment 0 (or any color attachments!) may not exist; rasterizer behavior is supposed to be completely independent of this. Bug: b/126417154 Change-Id: If16307a7964c267af254e2a62822ac38cf58c48c Reviewed-on: https://swiftshader-review.googlesource.com/c/25809Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Alexis Hétu <sugoi@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
Even in the GLES backend, we support RENDERTARGETS=8. This check only ever considered the first 4. Bug: b/126719156 Change-Id: I0084aa005f342f06373c53c007bee33268466b92 Reviewed-on: https://swiftshader-review.googlesource.com/c/25808Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
All texture access in Vulkan is through descriptors. We don't need any of the context-side state for this. Bug: b/125909515 Change-Id: I7d0846d2fdcc03504e2dd3f44580fb5c09188c1a Reviewed-on: https://swiftshader-review.googlesource.com/c/25331Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
Regres will pick up these lists instead of using its builtin fallback lists. These lists include additional wsi tests Change-Id: Iec77d56bb2fc79153c090226e668e613b7969bff Reviewed-on: https://swiftshader-review.googlesource.com/c/25788 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Hernan Liatis <hliatis@google.com>
-
Ben Clayton authored
These are only going to grow. Bug: b/126126820 Change-Id: I03a2b214e9968c31dabc4814b505c1f8c22349ae Reviewed-on: https://swiftshader-review.googlesource.com/c/25552 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Tested-by:
Ben Clayton <bclayton@google.com>
-
Ben Clayton authored
My memory isn't good enough to remember all opcodes by number. Enum string list stripped in release builds. Change-Id: Ifa9b9585ee6294a26db5676a34f8ad9c90f527b8 Reviewed-on: https://swiftshader-review.googlesource.com/c/25551 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Tested-by:
Ben Clayton <bclayton@google.com>
-
Ben Clayton authored
Reduces function size, increases readability. Bug: b/126126820 Change-Id: I073dd40114d3c5e6e7c6088db9fc8f2a0b9d8bac Reviewed-on: https://swiftshader-review.googlesource.com/c/25550Tested-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
Bug: b/126330097 Change-Id: Id705dc19bb3a114bf703ddc37b529d6ac89b4d52 Reviewed-on: https://swiftshader-review.googlesource.com/c/25549Reviewed-by:
Chris Forbes <chrisforbes@google.com> Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
This namespace declares typedefs that represent per-lane-scalars. Once we start mixing per-lane storage with linear external memory, this will help readability. Bug: b/126126820 Change-Id: Ia128c3cc97dd77b3d5c4b7bd9537c19427a9ac3f Reviewed-on: https://swiftshader-review.googlesource.com/c/25548 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Tested-by:
Ben Clayton <bclayton@google.com>
-
- 27 Feb, 2019 16 commits
-
-
Chris Forbes authored
Bug: b/126472836 Change-Id: I0e7afc53e863540fb5bd76ec8737f4b2aa3a015b Reviewed-on: https://swiftshader-review.googlesource.com/c/25649Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
Bug: b/126475423 Change-Id: Ia74e5c6b253a5d3ac5de51c3667062405989d641 Reviewed-on: https://swiftshader-review.googlesource.com/c/25191Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
Most of the subtlety here comes from needing to deal with either the old parts or the new being possibly a constant object. Uses WalkLiteralAccessChain combined with the size of the "new part" to determine the range within the object which should be replaced. Bug: b/126475423 Change-Id: I81f58d0de5dcacc74ffbd155708996c23dbe388e Reviewed-on: https://swiftshader-review.googlesource.com/c/25214Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
This will be used by OpCompositeInsert and OpCompositeExtract. All indices are known at compile time, and are specified as literals rather than ids of constants, (as in Op*AccessChain) Bug: b/126475423 Change-Id: Ic29e2f988fb6b9bdab4b722b368e51db929c8bd3 Reviewed-on: https://swiftshader-review.googlesource.com/c/25213Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
Bug: b/126475423 Change-Id: I69d05db8eaf0825893210424496dc6c9ad793d0d Reviewed-on: https://swiftshader-review.googlesource.com/c/25190Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
This does automatic widening to per-lane so callers don't have to scatter "is constant?" checks everywhere. This is mostly the right thing to do -- loads and stores will want to continue specializing on whether values and offsets are uniform across lanes, but most other things don't care. Bug: b/126475489 Change-Id: I1b8693a75e93b00a7972ec06777fbaaa599d2a52 Reviewed-on: https://swiftshader-review.googlesource.com/c/25668Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Stephen White authored
Microsoft's x86-64 calling convention ABI requires registers XMM6-15 to be preserved by the callee: https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2017#calling-convention-defaults Implement a _pop_reg() analog to _push_reg(), so we can specialize the XMM treatment. Pass the RegNum all the way down to the specialized class, because we don't know which registers should be 128-bit at the call site. Bug chromium:931926 Bug swiftshader:22 Change-Id: I57637c852f0f3bb9a374d61a16a7aaa434ac908d Reviewed-on: https://swiftshader-review.googlesource.com/c/25468Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by:
Stephen White <senorblanco@chromium.org>
-
Ben Clayton authored
For debug builds this should be a nop, as the assert should call abort(), however for NDEBUG + DCHECK_ALWAYS_ON builds, assert is a nop and we still want to terminate. Bug: b/126329018 Change-Id: I45291be05dfa2cce8ea5623c8af8900049d5e855 Reviewed-on: https://swiftshader-review.googlesource.com/c/25558Tested-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
Enables macros like ASSERT, UNIMPLEMENTED even in release builds. Bug: b/126329018 Change-Id: I7d810862b16d85b0a4ffc6b39a655cc73d4c669a Reviewed-on: https://swiftshader-review.googlesource.com/c/25557 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Ben Clayton <bclayton@google.com>
-
Ben Clayton authored
Bug: b/123933266 Change-Id: If4dc4858c8a81dd5e7b3510a08e7dbae74051483 Reviewed-on: https://swiftshader-review.googlesource.com/c/25556Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by:
Ben Clayton <bclayton@google.com>
-
Ben Clayton authored
Made these suppressions only apply to LLVM as they're scary to be ignored generally. Bug: b/123933266 Change-Id: I23c01f4cad0bac706f515642ce482703a1161d67 Reviewed-on: https://swiftshader-review.googlesource.com/c/25555Tested-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
All the callers needed to fetch this immediately afterward; save some effort. Bug: b/126475489 Change-Id: I622d30aa955c27df8e12fdf87762c0db96133666 Reviewed-on: https://swiftshader-review.googlesource.com/c/25648Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Chris Forbes authored
Adds support for vkBindIndexBuffer and vkDrawIndexed. There is significant duplication currently between Draw::play and DrawIndexed::play, but most of it is going to evaporate when we solve the context stomping problems. Bug: b/118619338 Change-Id: If8e9f7b1f11a3c763e73663733697fddd3e1fcac Reviewed-on: https://swiftshader-review.googlesource.com/c/25508Reviewed-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Alexis Hétu <sugoi@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Alexis Hetu authored
This cl partially implements vkCmdBindDescriptorSets. It allows binding descriptor sets to the proper pipeline bind point and descriptor set binding location. Dynamic offsets are not yet supported. Bug b/123244275 b/118619338 Change-Id: I91b14b79cb6cf00a4fabb6962938e7f55d5b6c22 Reviewed-on: https://swiftshader-review.googlesource.com/c/24909Tested-by:
Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Alexis Hetu authored
The simplest PipelineBarrier implementation is to call Renderer::synchronize(). This removes the synchronization mechanism from the draw commands, while still allowing the tests to pass successfully. Bug b/118619338 Change-Id: If7d9c14170db6f9a74a54c45a978d3ce78a1cdca Reviewed-on: https://swiftshader-review.googlesource.com/c/25608Tested-by:
Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com>
-
Logan Chien authored
This commit fixes REACTOR_USE_SUBZERO flag. The commit fde88d96 sets REACTOR_USE_SUBZERO to `false` to disable the SubZero backend. However, other Android.mk uses `ifdef` to check whether the SubZero backend is enabled. As a result, the SubZero backend is always selected because both `REACTOR_USE_SUBZERO := true` and `REACTOR_USE_SUBZERO := false` are considered as defined. This commit replaces `ifdef REACTOR_USE_SUBZERO` with `ifeq ($(REACTOR_USE_SUBZERO),true)` to fix the problem. Bug: b/115344057 Test: Build libEGL_swiftshader and libGLES_swiftshader for Android Change-Id: I83f2dc5018857c630a71a1b7eae636983283783a Reviewed-on: https://swiftshader-review.googlesource.com/c/25528Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Cody Schuffelen <schuffelen@google.com> Tested-by:
Logan Chien <loganchien@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
- 26 Feb, 2019 4 commits
-
-
Ben Clayton authored
New tools for debugging JITed code. rr::Print() is a new function that emits a call to printf() using the provided message and optional values. There is also an overload that accepts additional file, line, and function parameters to help identify the call site. Format values passed to rr::Print() are implicity cast to a new rr::PrintValues type which does the work of dispatching the value type to the correct printf() format specifier(s) and argument value(s). A single rr::Print() format value can automatically be expanded into multiple printf values - for example an rr::Float4 will expand to "%f %f %f %f" and four scalar float values. rr::Print() format values can be any of the following types: * Reactor LValues, RValues, Pointers. * Standard Plain-Old-Value types (int, float, bool, etc) * Custom types that specialize the PrintValue::Ty template struct. * Static arrays in the form T[N] where T can be any of the above. The sw::Vector4f and sw::Vector4s types have already had custom formatters written. These new functions and types described above are typically not called directly. Instead there are two helper macros which simplifies usage: RR_LOG() is a new macro that wraps rr::Print(), automatically populating the function, file and line parameters and appending a newline to the string. RR_WATCH() is a new helper macro that prints the name and value of all the supplied arguments. For example, if you had the Int and bool variables 'foo' and 'bar' that you want to print, you can simply write: RR_WATCH(foo, bar) When this JIT compiled code is executed, it will print: "foo: 1, bar: true" All of this code is disabled in non-debug builds, or if the reactor backend is not LLVM 7+. Change-Id: Ia39b1e507b6afaa3bb1d33e40b1333017f4b4f21 Reviewed-on: https://swiftshader-review.googlesource.com/c/24768Tested-by:Chris Forbes <chrisforbes@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Alexis Hetu authored
Change-Id: I7e6589870b539e775371e8941a07a48ca9e0cad7 Reviewed-on: https://swiftshader-review.googlesource.com/c/25628Tested-by:
Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com>
-
Chris Forbes authored
- Point size limits were left at [0,0], forcing all points to zero coverage. Introduce a config value for the maximum, and plumb this through to drive physical device limits query. - Fix all interpolants being replaced with pointcoord Bug: b/124177079 Change-Id: I281dd3214537f15858afbd3890cf70f8850fa4aa Reviewed-on: https://swiftshader-review.googlesource.com/c/25489Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
This cannot occur. The initial stripping of <base>'s pointer type is already handled outside the loop. Bug: b/124388146 Change-Id: I55ea64e868308bfbab72aaefca0fd367916f6e69 Reviewed-on: https://swiftshader-review.googlesource.com/c/25488Reviewed-by:
Alexis Hétu <sugoi@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-