- 28 Aug, 2019 8 commits
-
-
Nicolas Capens authored
This also fixes running them from within Visual Studio without requiring setting any environment variables. Change-Id: I5592b2d6a0abfeaeffbe1b788529c77adf5764ed Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35629 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com>
-
Chris Forbes authored
This wasn't ever called by previous versions of deqp. Test: dEQP-VK.wsi.xlib.surface.query_devgroup_present_modes Bug: b/140182247 Change-Id: Id77bdc726681922b99f3fa8d098cad7853293d29 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35648Tested-by:
Chris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
Bug: b/140178640 Test: dEQP-VK.renderpass.suballocation.unused* Change-Id: I3ad3ef55946e4f63e941e6df11a02ca4e2ac6e26 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35554Tested-by:
Chris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Alexis Hétu <sugoi@google.com>
-
SwiftShader Regression Bot authored
Change-Id: I0c457c4a128180b804dddb736951612a094862b6 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35574Reviewed-by:
Chris Forbes <chrisforbes@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com>
-
Nicolas Capens authored
Change-Id: I1230607ebbf0e7dadf8603d2fde5e7a95441c713 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35628 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com>
-
Chris Forbes authored
Change-Id: I6c50a3626297aaec7a249068687643f53da4b475 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35553Reviewed-by:
Ben Clayton <bclayton@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
Caught by Chromium's MSAN tests: https://chromium-review.googlesource.com/c/chromium/src/+/1774264/3#message-8031b1ce1959519ccdbfa83113f0d989560148d5 Bug: b/139010488 Bug: chromium:998457 Change-Id: If14f0777155ab892f29eb9b01c0bc6781510381b Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35575Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Nicolas Capens authored
Addresses TSAN error in Chromium viz_unittests and cc_unittests. Bug: b/139010488 Change-Id: I1a53487c4787170c38898cca47bf76145ebdf6bd Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35608 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com>
-
- 27 Aug, 2019 9 commits
-
-
Ben Clayton authored
Drop the complex task scheduling logic for yarn. Performance gains seen up to around ~30% FPS. Bug: b/139142453 Change-Id: I264fee36323425a791088565d99dc586670a948a Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35572Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Ben Clayton authored
Pass the cluster count to the QuadRasterizer instead of using a rather nasty back dependency to the renderer. This allows the cluster count to be adjusted per-draw without requiring synchronization around the count. The primary goal of this change is that we can scale the number of clusters based on the complexity of the draw. Bug: b/139142453 Change-Id: I0379e16568de402f186ee2dd1e8b2346bed30efd Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35571Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Ben Clayton authored
These were part of a larger stack of changes for Yarn, but aren't specific to anything in particular. Change-Id: I863d8bbb316b5c255be9557b83511bb9cdef70b0 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35570Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Ben Clayton authored
Bug: b/139142453 Change-Id: I466b7c935db03104cb4df90735fafe10905bef9e Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35568Tested-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
Nothing is actually scheduled, but is a first step towards using yarn. As yarn is now actually used by SwiftShader, drop the BUILD_YARN build flags, as failing to build yarn would result in linker errors. Bug: b/139142453 Change-Id: Ibd9a69f72a248f58a62bb41eeb196c4647876e82 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35153Tested-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
They're big and take a while to initialize. Only construct them if we need them. This also pushes the construction onto the queue, speeding up the main thread. Bug: b/139010488 Change-Id: I2d1d25f24162339de62cea4d946532b1a2e346ca Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/34330Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com>
-
Ben Clayton authored
TIL: For POD type T, `new T` and `new T()` are not the same. new T() will zero initialize, which for large arrays can be very costly. Bug: b/139142453 Change-Id: I9a1a3ef1bb0a167d9955310d1cf331e917019397 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35569 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Ben Clayton <bclayton@google.com>
-
Chris Forbes authored
There is no reason to plumb this through Context. Bug: b/132280877 Change-Id: I92819af587505b75b279a6aed70aa8067455df8d Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35549Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com>
-
Chris Forbes authored
We only support these as far as is required for Vulkan 1.1 core functionality. If we expose the extension bits, we have to support more. Change-Id: I2a8b1648e88fb55b4c87075efc696792540144fc Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35548Tested-by:
Chris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Alexis Hétu <sugoi@google.com>
-
- 26 Aug, 2019 4 commits
-
-
Chris Forbes authored
Bug: b/119621736 Change-Id: I8a25e6a5dba7e05649c35dc65160f69300bf5791 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35508Tested-by:
Chris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Chris Forbes authored
Bug: b/119621736 Change-Id: I9be8dc680f68622e795fccf4ff8213dccd5debb2 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35488Tested-by:
Chris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Chris Forbes authored
This function works with VkFormat, not spv::ImageFormat (due to input attachments) Change-Id: I36a36a94127533a009df8f806b55ff2845162a76 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35528Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Alexis Hétu <sugoi@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
SwiftShader Regression Bot authored
Change-Id: Iba8f2c6f469c7c34dfaa25811c6bcc8f784b600d Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35448Reviewed-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
- 23 Aug, 2019 1 commit
-
-
Chris Forbes authored
A single RenderPass object may be used to record multiple command buffers simultaneously. Storing the subpass index there produces crosstalk between the command buffer recordings, and incorrect rendering. Bug: b/139824232 Change-Id: Ib8689a47733a991c61785d2d6332584f7a96f05d Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35468 Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
- 22 Aug, 2019 5 commits
-
-
SwiftShader Regression Bot authored
Change-Id: I8189bb729fb5843979bc719638d25474c2d69308 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35428 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com>
-
Nicolas Capens authored
Section 15.2.1. RGB to Shared Exponent Conversion of the Vulkan 1.1 spec states "NaN, if supported, is handled as in IEEE 754-2008 minNum() and maxNum(). That is the result is a NaN is mapped to zero." This currently does not affect anything because E5B9G9R9 is not a renderable format. The blitter merely has to support writing this format for computing the corner texel of cube map borders, which are averaged from other E5B9G9R9 format texels and thus no NaN can be encountered. Bug: b/138944025 Change-Id: Ib69aca3af5afee240d9b697c47b2f1a0204fe697 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35008 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Sean Risser <srisser@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Nicolas Capens authored
The Vulkan 1.1 spec states that: "For VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, only the imageView and imageLayout members of each element of VkWriteDescriptorSet::pImageInfo are accessed." Also remove the zeroing of sampler descriptor data in SampledImageDescriptor when no sampler handle is provided. This was intended to detect bugs but we didn't do it consistently for all descriptor types (VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER also uses SampledImageDescriptor and has no sampler data). We now pass a null pointer to the sampling routine when no sampler descriptor is available (specifically for OpImageFetch) so it is less likely to still access it unintentionally. Bug: b/139401791 Change-Id: Id1394493e88b7465fe3628c4c7d410cd3eaa3ccf Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35388 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Nicolas Capens authored
OpImageFetch takes an Image operand, not a SampledImage, and thus we don't explicitly have a sampler descriptor. However, our vk::SampledImageDescriptor structure includes both image view descriptor data and sampler data, and we were relying on the sampler descriptor data to be present for setting the addressing mode. Other state would also inadvertently be affected. This change ensures that the sampler descriptor for fetch operations is null and we set the addressing mode to repeat but leave other unused state at their defaults. Bug: b/139401791 Change-Id: I9f1af35940c2fa9c7d30e771ebdb244f72f5bdbe Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35348 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com>
-
Chris Forbes authored
This is a mandatory feature for 1.1, but Vulkan CTS 1.1.3 doesn't enforce that -- it only tests the feature if it is present. Highlights: - Multiple views implemented by running each draw multiple times. We could do something more efficient, but this is a fringe feature so far. - Render targets and input attachments are adjusted to use the layer corresponding to the current view. - Explicit attachment clears and end-of-subpass resolves are broadcast to the layers corresponding to the current subpass's view mask. - Renderpass attachment load ops are executed for the layers corresponding to the union of the subpass view masks for all subpasses which use the attachment. The actual load ops are still performed together at the beginning of the renderpass. - ViewIndex builtin variable is exposed to the shaders. In a non-multiview draw call, ViewIndex is still available, but is always zero. Bug: b/139862810 Test: dEQP-VK.*multiview* Change-Id: Iaf40cfdb2f5afa61253cc756f97c0db30fb4d813 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35408 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com>
-
- 21 Aug, 2019 3 commits
-
-
Chris Forbes authored
Change-Id: I8090e55dae72f1b48b46147bad0439d22b513b74 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35409Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com>
-
Geoff Lang authored
Chrome has started requesting RGB formats for IOSurfaces to support the alpha=false flag for WebGL context creation. BUG=chromium:995142 Change-Id: I0c9d994f2d8208e87a0d167ebc0787fc15add08f Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35389Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Geoff Lang <geofflang@chromium.org>
-
Nicolas Capens authored
This is Vulkan 1.1's "preferred method of line rasterization, and must be used when the implementation advertises the strictLines limit in VkPhysicalDeviceLimits as VK_TRUE." The 'Diamond test convention' code path, which implemented coverage corresponding to the Bresenham algorithm (except for endpoints, see b/80135519), is now inactive, but might become of use again for implementing VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT so it is kept, for now. Bug: b/139755234 Tests: dEQP-VK.*line* Change-Id: I0113c04e35c1aca8031194223e589962942e18fa Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35308Reviewed-by:
Chris Forbes <chrisforbes@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
- 20 Aug, 2019 1 commit
-
-
Nicolas Capens authored
This ports the Vulkan side change to OpenGL ES and silences the GCC 8 class-memaccess warning/error, while ensuring proper key initialization. Defines a Memset<T> class to be used as the first base class of cache key types, which makes it explicit that their underlying memory will be fully initialized before any member constructors are run. In particular this fixes Blitter::Options state having uninitialized bits after the bitfield, and Blitter::State having uninitialized padding bytes after Options so 'sourceFormat' is 32-bit aligned. Also adds is_memcmparable<T> for checking if memcmp() can be used to implement operator==() for cache keys. It's equivalent to std::is_trivially_copyable except it provides a fallback for STL implementations that don't support it. Also fix class-memset violations in LLVM 7.0 with their solution from a later version. Bug: b/135744933 Change-Id: Ic1e5c2c6b944a5133fc55840c0508bc2cdd1d66a Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/33488 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Reviewed-by:
Chris Forbes <chrisforbes@google.com> Tested-by:
Nicolas Capens <nicolascapens@google.com>
-
- 19 Aug, 2019 5 commits
-
-
Chris Forbes authored
Bug: 139469122 Change-Id: I0f319952b00fcca4165bf3f59221ebaf1ba12045 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35189Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
vk::warn etc expects the client to include the newline Change-Id: Ib0f808d7d397c37e8c52d7ce1977551a206dbc40 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35251Reviewed-by:
Ben Clayton <bclayton@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Chris Forbes authored
Newer Vulkan CTS has started providing this extension structure during device creation. Bug: b/139528538 Change-Id: Ie5c72dcc0b96b4d9e98a06a36fdecbdb25304e49 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35250Tested-by:
Chris Forbes <chrisforbes@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Chris Forbes authored
Newer Vulkan CTS has started providing this extension structure during device creation. Bug: b/139528538 Change-Id: Ied17274d95acb8be1766f62e21fcc1c6b7594015 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35249Tested-by:
Chris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com>
-
Sean Risser authored
Now that the GLES unit tests can cause the float calculations in these functions to result in inf and NaN, some platforms are throwing errors when those floats are converted to integers. The Clip*Rect functions no longer continue processing if any operation results in a non-finite value, and tell their callers that they have failed to clip properly. Make Context.cpp set the error state to GL_INVALID_OPERATION when it fails to blit. Bug chromium:979986 Change-Id: I8e11e77b1e25eab37dee97aa616a908737b16036 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35269 Presubmit-Ready: Sean Risser <srisser@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Sean Risser <srisser@google.com>
-
- 16 Aug, 2019 3 commits
-
-
Ben Clayton authored
Bug: b/139010488 Change-Id: I6a152c3df27e89c38ee89d57270b604bbe6d5acf Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35212Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
Chris pointed out that ".S" assembler files hint that they should be preprocessed. Now these files have the correct extension, we don't need to be explicit about running assembly files through the preprocessor. Bug: b/139010488 Change-Id: I1399e884071c7fc2f169e93809a9f15204e41eff Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35211Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-
Ben Clayton authored
This can be #defined in the assembly files, reducing per-build-system complexity. Bug: b/139010488 Change-Id: Ided03000dc5e93e4d1e04ce6f0b57c6e45565545 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35210 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Ben Clayton <bclayton@google.com>
-
- 15 Aug, 2019 1 commit
-
-
Ben Clayton authored
This is backed by a regular heap allocation, so we can read and write to it. Bug: b/139479506 Change-Id: I4a5ef04386120667a27c817c4ac0b59b8b44cd0b Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/35030Reviewed-by:
Nicolas Capens <nicolascapens@google.com> Tested-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
-