Commit Graph

1000 Commits

Author SHA1 Message Date
Brian Ho e25a3aede0 Overload stream insertion for DawnTestParam
Passing "--gtest_list_tests" as an argument to the gtest binary lists
the tests in the binary. However, when the test suite is parameterized
(like in the case of dawn_end2end_tests), the output will list the
string name of the parameter along with the test name. Since there is no
stream insertion overload for DawnTestParam, we get this output:

./dawn_end2end_tests --gtest_list_tests
BasicTests.
  BufferSetSubData/OpenGL  # GetParam() = 56-byte object <03-00 00-00 19...
  BufferSetSubData/Vulkan  # GetParam() = 56-byte object <04-00 00-00 19...
  ...

This CL adds an implementation to display the string name of the param
instead.

BUG=chromium:993457
TEST=run ./dawn_end2end_test --gtest_list_tests

Change-Id: Ifae65a9eaf96448341e6ed1894f116f1af1154b7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10240
Commit-Queue: Brian Ho <hob@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-27 01:44:29 +00:00
Jiawei Shao b097b3100b Vulkan: workaround texture-to-texture copy issue with compressed formats
This patch adds the workaround for the Vulkan SPEC issue in the T2T
copies with compressed formats when the parameter "extent" fitting in
one subresource but not fitting in another. You can get the detail of
the issue through the following link:
https://github.com/KhronosGroup/Vulkan-Docs/issues/1005

This patch implements the workaround for this issue by splitting the
affected T2T copy into a T2B and a B2T copy with an internal buffer.

BUG=dawn:42
TEST=dawn_end2end_tests

Change-Id: I29c48da0b5ff85f9860839a82733e8c1c43acfc6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10020
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
2019-08-27 00:07:09 +00:00
Jiawei Shao 27c3fc5bd3 Metal: Initialize mSupportedExtensions in the constructor of Adapter
This patch adds a missing call of InitializeSupportedExtensions() in the
constructor of Adapter on Metal backend so that we can correctly create
device with required extensions on Metal.

BUG=dawn:42
TEST=dawn_end2end_tests

Change-Id: Ifba41d2ae43ca054df2b0f3f19503f66fe641a72
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10500
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
2019-08-27 00:04:29 +00:00
Kai Ninomiya 93196db8ef Implement new defaults for Texture::CreateView
https://github.com/gpuweb/gpuweb/pull/389 except for removing createDefaultView
https://github.com/gpuweb/gpuweb/pull/407

This will need to slightly change again when
https://github.com/gpuweb/gpuweb/pull/424 lands.

Bug: dawn:214
Change-Id: Id904b55cea6d77fcf7d971bd743468c7d82a9aa8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10440
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
2019-08-26 22:51:19 +00:00
Austin Eng f19c328b5b Fix NextPowerOfTwo for 64-bit MSVC
This test was failing consistently on win-msvc-dbg and occasionally
on win-msvc-rel. It's suspected the hardware does not properly
support __lzcnt64 so the function is implemented with _BitScanReverse64.

Bug: dawn:213
Change-Id: I0712f87787aad4aad7233bfb72846ec3dba96239
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10481
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2019-08-26 16:50:05 +00:00
Rafael Cintron 25cc723823 Fix mFenceEvent HANDLE leak
dawn_native::d3d12::Device::mFenceEvent is created in Initialize
but is never closed.

Fix is to close in the destructor if it has been previously created.

Bug: dawn:215
Change-Id: Ie9e7a395fe6fe791e2581295ed12f20070671afa
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10480
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-23 22:41:48 +00:00
Austin Eng 3f21e11e24 Fix RenderBundleValidationTests
These tests were consistently failing on MSVC Debug builds.

Bug: dawn:154, dawn:213
TBR: cwallez@chromium.org
Change-Id: I83a51dd3ac705ccfcc34fa6a643d499a9cbe694f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10400
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2019-08-22 19:02:06 +00:00
Jiawei Shao 9d9d76c590 OpenGL: Support B2T and T2T copies with BC formats
This patch implements the creation, buffer-to-texture copies and
texture-to-texture copies with BC formats on OpenGL backend. Note that
OpenGL SPEC also has the same issue about texture-to-texture copies
with compressed textures as Vulkan SPEC, so we have to skip the related
case.

The texture-to-buffer copies with BC formats and related end2end tests
will be supported in the following patches.

BUG=dawn:42
TEST=dawn_end2end_tests

Change-Id: I76b16862259cb2df77f202ed7ed433d41aa3cd47
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10220
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
2019-08-22 08:19:13 +00:00
Corentin Wallez ba9f3a8e11 OpenGL: Use non-filtering samplers for int/uint texture.
Using a sampler with filtering on int / uint textures makes them
incomplete, causing them to sample black on very conformant drivers.
Each opengl::Sampler is updated to create to GL sampler, a filtering one
and a non-filtering one.

PipelineGL and CommandBufferGL takes advantage of the new
BGLBinding::textureComponentType to know which of the two samplers to
use.

BUG=dawn:128

Change-Id: Idbf5668213bbe6a8639847d57e2be1244f97800c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10282
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
2019-08-21 13:01:23 +00:00
Corentin Wallez f463a20291 Add BGLBinding::textureComponentType
This is a new compatibility constraint that the texture component type
must match between what's declared in the shader and the bind group.

 - Format is updated to include the component type of the format.
 - Validation and state tracking is updated to reflect the new
BGLBinding member.
 - TextureFormat tests are updated to pass with the added validation and
to remove a redundant enum definition.
 - BGLBinding::multisampled validation is added because it was next to
modified code for the BGLBinding::textureComponentType validation.
 - A redundant BGL caching test was removed.

BUG=dawn:128

Change-Id: I9c4ae92062769c3ecf74caf46f27415344dfad77
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10281
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
2019-08-21 12:16:33 +00:00
Corentin Wallez 87ded961ee Remove 16 bit normalized texture formats
They were removed from the WebGPU spec because they cannot be supported
everywhere, for example on recent Qualcomm chips.

BUG=dawn:128

Change-Id: I189bd1b34105f215699ddd404341bbee964c8679
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10280
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
2019-08-20 20:58:01 +00:00
Austin Eng 0beb43809a Validate RenderBundle texture formats
Adds validation and unittests that render bundle color attachments are
color renderable texture formats and depth/stencil attachments are
depth/stencil texture formats.

Bug: dawn:154
Change-Id: I4d062a82b32fb38820fb3ebeb4c265306aa7af24
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10261
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2019-08-19 22:49:08 +00:00
Austin Eng d8cdcea0ee Validate the RenderBundle debug groups must be well nested
This patch also adds unittests to check the behavior.

Bug: dawn:154
Change-Id: I49f4c0ab98cd823231a701192bdb725937960833
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10260
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2019-08-19 22:48:48 +00:00
Brian Ho ee3de1e1f3 Remove undefined behavior from NextPowerOfTwo
This CL removes undefined behavior from NextPowerOfTwo(0). Currently on
Linux, calling NextPowerOfTwo(0) simplifies down to:
  - 1ull << (64 - __builtin_clzll(0 - 1));
  - 1ull << (64 - __builtin_clzll(INT_MAX));
  - 1ull << (64 - 0);
  - 1ull << 64

Since 64 is the same width as the long long in our left operand, this
left shift results in undefined behavior (C++11 standard 5.8.1). For a
default Chrome compile, this does not cause any issues; 1ull << 64
results in 0.

In ChromeOS, however, we compile with ThinLTO which, among other things,
inlines various functions in the interest of performance. When
NextPowerOfTwo is inlined, the undefined behavior of our invalid left
shift borks the stack which causes the Math.NextPowerOfTwo unit test to
fail.

BUG= chromium:993457
TEST= verified that Math.NextPowerOfTwo now passes with LTO

Change-Id: I2702ba0b780203643da1d98ad0380098c7b3eab0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10180
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Brian Ho <hob@chromium.org>
2019-08-16 18:44:14 +00:00
Idan Raiter 09c12ca696 Validate shared semaphore and memory handles
Checks if we support specific handles and specific usages on the
current device. If we don't, Supported() fails and we stop the import.

Bug: chromium:976495
Change-Id: Icfe044a3c4d912913823728100888ab05f22afd5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10160
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Idan Raiter <idanr@google.com>
2019-08-16 17:58:44 +00:00
Idan Raiter 786f76574a Add vulkan external memory large image test
This test catches when image layout is broken, by copying a non-trivial
image after it's imported across devices.

Bug: dawn:206
Change-Id: Ic980cfe31c0e564176c6c060f4a1fab220737938
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10162
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Idan Raiter <idanr@google.com>
2019-08-16 17:36:54 +00:00
Yunchao He 0b2599c892 Add tests for RenderPassEncoder::SetViewport
This patch adds tests for SetViewport to verify that the fractions
of parameters (x, y, w, h) in viewport are not truncated.

BUG=dawn:53, dawn:205

Change-Id: I566509234c7a208989ef7ddfc2b15203b10614a0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10120
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Yunchao He <yunchao.he@intel.com>
2019-08-16 04:39:53 +00:00
Austin Eng ae2415c6f5 Trace MTLCommandBuffer acquisition and submission on Metal
Bug: chromium:958013
Change-Id: I31b8934247bf43b67956f574b97fb38fa2a9753c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10161
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-16 03:02:43 +00:00
Natasha Lee 5f8a8aadb9 Vulkan: clear nonrenderable texture color formats
Clears nonrenderable color formats and adds a clearValue enum to help
share the code path between zero and nonzero clears.

Bug: dawn:145
Change-Id: I285521cae0ee71625602b949888b21481a05fb8e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10021
Commit-Queue: Natasha Lee <natlee@microsoft.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-14 23:11:42 +00:00
Bryan Bernhart c072fc2653 Define OutOfMemory error
Used to replace CONTEXT_LOST when allocation fails.

BUG=dawn:152

Change-Id: I1b8d0061f2915df71f263e0712dba3d47d08e2b3
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10060
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
2019-08-14 18:52:12 +00:00
Austin Eng 40618d0b93 Implement RenderBundle in the backend
Bug: dawn:154
Change-Id: I45496fb2103150dabe32fbc7cb5856dc40c9339f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9222
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2019-08-14 02:01:14 +00:00
Brian Ho 0ebd54cf38 Update BUILD flags to support Chrome OS
This CL updates a few flags to support Chrome OS:

- Disables the OpenGL backend on Chrome OS builds.
- Removes the X11 dependency for Chrome OS builds because we do not
support X11.
- Removes the XCB dependency (again, no X11).

BUG=chromium:993457
TEST=e2e and unit tests build and pass on Intel Chrome OS devices

Change-Id: I1cb06453ccc94d1b68a6998ea635bddd6fb7b5ad
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10100
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-13 22:45:14 +00:00
Austin Eng 8a488c1574 Implement RenderBundle in the frontend
This CL implements RenderBundle and RenderBundleEncoder in the frontend
and adds unittests for validation.

Bug: dawn:154
Change-Id: Ice5ecd384cd627ad270b73052408f8139d1ea5f4
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9221
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-13 22:12:54 +00:00
Brian Ho 2fb628da46 Remove GLFW dependency for non-GL tests
As part of enabling WebGPU on Chrome OS, we would like to run the Dawn
unit and e2e tests as part of the Chrome OS test suite. This CL removes
the GLFW dependency because Chrome OS does not support GLFW.

The GLFWwindow is only used to create swap chains for the various
backends, but these swap chains are not actually used in the tests
(the e2e tests render to textures instead). The swap chains are only
referenced as part of an unused debugging function:
SwapBuffersForCapture which we can safely remove as per my discussions
with kainino@ and enga@.

We still need GLFW for OpenGL, so we conditionally include it on
platforms that enable the OpenGL backend (which Chrome OS is not).

Note: enga@ suggested to create a VulkanWindowlessBinding that has an
empty GetSwapChainImplementation, but after exploring the option, it
seems like a bit too many ifdefs. In the end, I think it's cleaner to
just remove the *Binding classes entirely.

BUG=chromium:993457
TEST=tests compile and pass for all values of dawn_enable_opengl

Change-Id: I067b12a23f2c236f5506252cd7727b847e79a667
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10080
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Brian Ho <hob@chromium.org>
2019-08-13 21:45:44 +00:00
Austin Eng d4ce736d18 Add dawn_platform::Platform for handling tracing events in Dawn
This patch provides Chromium TRACE_EVENT macros and hooks for
implementing the TRACE_EVENT api.

Bug: chromium:958013
Change-Id: I033b1c7ca57c550504a1bea1898a1a152831922b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/7060
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-13 19:00:34 +00:00
Yan, Shaobo 35670f183a Skip InheritDynamicOffsetsComputePipeline test on Windows
This test is flaky on Windows on Intel HD 530. Skip it on Windows for now.

BUG=dawn:55

Change-Id: I537ef66ee6b0844e8b1dfd46fae47c5921451e55
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/10040
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2019-08-13 15:47:59 +00:00
Yan, Shaobo b6d7c53708 Reland "Fix dynamic buffer offset issues on D3D12 backend"
Cannot reproduce failure on GTX1060 and GTX2080Ti with latest driver. So disable
inherit test on compute shader and reland this patch

    Original change's description:
    > Fix dynamic buffer offset issues on D3D12 backend
    >
    > This patch fixes
    > 1. Inherit dynamic buffer offsets : dawn chooses vulkan
    > like inherit behaviour, so dynamic offsets need to be inherited.
    > This patch adds inherit dynamic offsets between pipelines support and
    > adds tests to cover it.
    >
    > 2. Dynamic offsets are skipped when groups have been set : in D3D12
    > backend, when invoke SetBindGroup, dawn will check whether this group
    > has already been set and skip updating root signature if the answer is
    > yes. However, this behaviour will affect dynamic offsets update. With
    > the latest patch, we always update dynamic offsets, even if they didn't
    > change and adds tests to cover it.
    >
    > This patch also hit a dawn's issue about storage buffer validation in compute pass.
    > Currently the validation is a workaround to avoid access conflicts but will impact
    > using dynamic buffer offset in compute pipeline. Fix this issue is hard so disable
    > related test for now and will enable it after the issue been fixed. File dawn bug
    > 198 to track this
    >
    > BUG=dawn:55
BUG=dawn:55

Change-Id: Ia105786c035eafc6f68dcb54e6c1145b06c6a630
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9960
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Shaobo Yan <shaobo.yan@intel.com>
2019-08-13 02:44:48 +00:00
Austin Eng 3318caaa51 Factor RenderPass command validation
Validation of GPURenderBundle will share code with RenderPass
validation. Factor validation of commands for GPURenderBundle
into a separate function.

Bug: dawn:154
Change-Id: I79a229592ead27d462da0dd2d12fbdb95443ff19
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9980
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-13 00:22:28 +00:00
Bryan Bernhart 9b45b5aafa Handle staging buffer map failure on Metal.
BUG=dawn:108

Change-Id: Iae1331e179d112d5b93327e7e44f6a5e870557e7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9882
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
2019-08-12 23:16:17 +00:00
Idan Raiter 74e4834d3d Add wrapping for using external vulkan images as textures
This change adds platform-dependent services that handle creating
semaphores and importing image memory. Then, we use them to wrap a
texture from an outside source, and release a signal semaphore back
when we're done with it. This will be used to allow chrome to render
dawn on Vulkan platforms.

Bug: chromium:976495
Change-Id: I9f07eaf436e10aa6bd88cffdc74fd23834d62ee0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/8340
Commit-Queue: Idan Raiter <idanr@google.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-10 03:17:52 +00:00
Natasha Lee 8cb23933b1 Ensure clearing attachments is done via renderpass loadop
Clear through loadop instead of standalone clear operation to optimize
efficiency on modern desktop GPUs and mobile GPUs.

Removed clear calls in TransitionForPass for render pass
to help optimize clearing using loadop instead.
Compute pass textures and sampled textures are still cleared in transition.

Bug: dawn:145
Change-Id: I84082bdea3ed7be75683389132d8b296051731b7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/8641
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Natasha Lee <natlee@microsoft.com>
2019-08-09 17:56:30 +00:00
Austin Eng a9658d967a MemoryTransferService: Separate functions to serialize and get serialization size
Bug: dawn:156
Change-Id: I19317954c64700bdd67aa414d8eb2422d2c3544d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9860
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-09 00:03:20 +00:00
Austin Eng 42e1bba480 Revert "Fix dynamic buffer offset issues on D3D12 backend"
This reverts commit 421584173c.

Reason for revert: Some of the newly added tests are failing on Windows NVIDIA GTX 1660

https://ci.chromium.org/p/chromium/builders/ci/Win10%20FYI%20x64%20Release%20%28NVIDIA%20GeForce%20GTX%201660%29/21

Original change's description:
> Fix dynamic buffer offset issues on D3D12 backend
> 
> This patch fixes
> 1. Inherit dynamic buffer offsets : dawn chooses vulkan
> like inherit behaviour, so dynamic offsets need to be inherited.
> This patch adds inherit dynamic offsets between pipelines support and
> adds tests to cover it.
> 
> 2. Dynamic offsets are skipped when groups have been set : in D3D12
> backend, when invoke SetBindGroup, dawn will check whether this group
> has already been set and skip updating root signature if the answer is
> yes. However, this behaviour will affect dynamic offsets update. With
> the latest patch, we always update dynamic offsets, even if they didn't
> change and adds tests to cover it.
> 
> This patch also hit a dawn's issue about storage buffer validation in compute pass.
> Currently the validation is a workaround to avoid access conflicts but will impact
> using dynamic buffer offset in compute pipeline. Fix this issue is hard so disable
> related test for now and will enable it after the issue been fixed. File dawn bug
> 198 to track this
> 
> BUG=dawn:55
> 
> Change-Id: I2b0f179b3555d37d5b350292eb729767b0d60ab6
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9621
> Commit-Queue: Austin Eng <enga@chromium.org>
> Reviewed-by: Austin Eng <enga@chromium.org>
> Reviewed-by: Kai Ninomiya <kainino@chromium.org>

TBR=kainino@chromium.org,shaobo.yan@intel.com,enga@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: dawn:55
Change-Id: I018e6fa9b4b0905de602ab4ba3294ef537c53759
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9900
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2019-08-08 22:41:00 +00:00
Austin Eng e9fabf5916 Factor PassResourceUsageTracker to its own file
GPURenderBundleEncoder and GPUCommandEncoder will need to share code
for tracking resource usages.

Bug: dawn:154
Change-Id: I0286f71c4c0638f89be2754c8e9691e67e5db335
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9700
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-08 17:21:39 +00:00
Austin Eng bb10a91876 Fix leak of AttachmentState
Unlike API objects, the AttachmentState object is only used internally
and should have no external references. We should not increment the
reference count on creation because it is Ref'ed internally. This patch
also adds ASSERTs that all Device caches are empty when the Device is
destroyed.

Bug: dawn:154
Change-Id: I5dd46bde03c0be920356444e6b1214ed38e833e8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9761
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-07 21:47:24 +00:00
Yan, Shaobo 421584173c Fix dynamic buffer offset issues on D3D12 backend
This patch fixes
1. Inherit dynamic buffer offsets : dawn chooses vulkan
like inherit behaviour, so dynamic offsets need to be inherited.
This patch adds inherit dynamic offsets between pipelines support and
adds tests to cover it.

2. Dynamic offsets are skipped when groups have been set : in D3D12
backend, when invoke SetBindGroup, dawn will check whether this group
has already been set and skip updating root signature if the answer is
yes. However, this behaviour will affect dynamic offsets update. With
the latest patch, we always update dynamic offsets, even if they didn't
change and adds tests to cover it.

This patch also hit a dawn's issue about storage buffer validation in compute pass.
Currently the validation is a workaround to avoid access conflicts but will impact
using dynamic buffer offset in compute pipeline. Fix this issue is hard so disable
related test for now and will enable it after the issue been fixed. File dawn bug
198 to track this

BUG=dawn:55

Change-Id: I2b0f179b3555d37d5b350292eb729767b0d60ab6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9621
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-07 18:20:33 +00:00
Jiawei Shao 1cd83ffbdd Code clean up in CompressedTextureFormatTests
This patch does some code clean-ups in CompressedTextureFormatTests as
the preparation of adding new tests in the following patches.

BUG=dawn:42
TEST=dawn_end2end_tests

Change-Id: Ie00eeca2d3a161f3673c554b91b54eebea4bf8bb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9740
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-07 07:32:47 +00:00
Jiawei Shao 6de5baa17b Skip several end2end tests
This patch skips several flaky and failed tests on the related Dawn
backends.
1. Tests on all integer/unsigned integer formats in TextureFormatTest on
   Intel OpenGL drivers.
2. All CompressedTextureBCFormatTest tests on Intel Vulkan Windows
   drivers.
3. BufferSetSubDataTests/ManySetSubData on Intel Vulkan Linux drivers.

BUG=dawn:128, dawn:199, chromium:980737

Change-Id: Ia8912804ea762b458be0b48d9df341ff7637f608
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9800
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-07 07:11:57 +00:00
Corentin Wallez ccf805046a Make Snorm formats non-renderable
They aren't guaranteed renderable in Vulkan nor core OpenGL 4.5 without
extensions. They happened to work on a lot of our CQ builders but failed
on Intel OpenGL Linux which helped understand this was an issue.

BUG=dawn:128

Change-Id: I83c4f8116c1125c3bac2f1dd6197976c9063e129
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9682
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
2019-08-05 03:06:22 +00:00
Corentin Wallez bfc9cee5d3 Implement OpArrayLength on Metal
Metal uses a physical addressing mode and buffers are just pointers in
GPU memory that don't have a size. This prevents implementing
OpArrayLength without any additional information. When a shader uses
OpArrayLength on unsized arrays, SPIRV-Cross requires an extra buffer
argument that gets the length of the buffers.

Use that workaround mechanism in the Metal backend by keeping track of
the storage buffer sizes and applying the extra "buffer length buffer"
when a pipeline requires it.

Also adds tests that OpArraySize works in all shader stages.

BUG=dawn:195

Change-Id: I6aa6089aaea85d0589ccad1756e55dd0befefcb5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9386
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-02 18:15:08 +00:00
Idan Raiter ef4f3bd174 Add external memory and semaphore extensions
Also adds GetGlobalInfo, similar to GetDeviceInfo, but for code that wants to query instance extensions or API version.

Bug: chromium:976495
Change-Id: Ia7131aa1780737ec2691cde0007acb86a120d307
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9620
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
2019-08-02 18:10:38 +00:00
François Beaufort 54b4df7069 s/isPIXEventRuntimeLoaded/IsPIXEventRuntimeLoaded/g
Bug: dawn:44
Change-Id: I15768299cadbd5f193ae0e878befc4f5ba5a1c58
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9681
Commit-Queue: François Beaufort <beaufort.francois@gmail.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2019-08-02 09:57:28 +00:00
Corentin Wallez d64ee1a150 Implement most texture formats on OpenGL
The only missing one is BGRA8UnormSrgb because it doesn't exist in
OpenGL and will need further emulation.

Also suppress most tests on the Mesa Intel GL driver that fails tests
pending further debugging.

BUG=dawn:128

Change-Id: Id454a89711e25b14c7de75a36c7642f2429a0e1f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/8364
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
2019-08-02 09:46:58 +00:00
François Beaufort e58fbc48b8 Handle debug markers commands for compute pass encoder
This CL makes sure debug markers commands are handled not only for
render pass encoder, but also compute pass encoder.

Bug: dawn:44
Change-Id: Iad1865d7c20e36d580e1f3f16496e4b90cc1ff34
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9680
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2019-08-02 09:30:28 +00:00
François Beaufort ae7e0026a5 Make fragment stage optional in RenderPipeline
This CL makes fragment stage optional but still raises a validation
error if set to null in a RenderPipeline.

Bug: dawn:136
Change-Id: Ie900d2e768d251db1e0c4a90738f80b2de15dc2f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9641
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: François Beaufort <beaufort.francois@gmail.com>
2019-08-02 07:46:57 +00:00
Idan Raiter c1583a558c Create CommandRecordingContext
Adds a structure that contains wait / signal semaphores and the current command buffer. Will allow us to have a list of pending semaphores after recording, either to consume or do something smarter with in the future.

Bug: chromium:976495
Change-Id: Ib61455039bd97ac8b0ff701af2b694cc8794226d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9600
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2019-08-02 05:16:42 +00:00
Jiawei Shao 574b951188 Support BC formats as the first extension in Dawn
This patch refactors the current implementation of BC formats to treat
it as the first extension in Dawn and adds all the related tests.

Note that in Dawn all the extensions are disabled unless we enable them
when we create the device, which means the BC formats can only be used
when we enable the related extension on the creation of the device, and
the creation of the device will fail if the adapter does not support the
extension

BUG=dawn:42
TEST=dawn_end2end_tests
TEST=dawn_unittests

Change-Id: I04d818b0218ebb3b1b7a70a4fea71779f308f85f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9520
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
2019-08-02 00:06:38 +00:00
Corentin Wallez 56f3a7b90d WrapIOSurface: Add support for RGBA8
BUG=dawn:112

Change-Id: I18d2e8bc0bcca2725f2087913955c8ecadbd5852
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9642
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Idan Raiter <idanr@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
2019-08-01 17:58:05 +00:00
Yan, Shaobo 351ea23830 Dynamic Buffer Offset : D3D Backend
In a typical graphics application it is a common usage to update some uniforms once per draw,
and such uniforms include the word positions, orientations, and so on. In the current state of
WebGPU, this means that for each draw call we have to create a new bind group to set the right
uniform values. Bind group creation is expected to be more expensive than
recording draws because a memory allocation is required.

The functionality of dynamic buffer offset is to reduce the number of bind groups that need to
be created.

The patch implements dynamic buffer offset on D3D backend using root descriptor.

Bug=dawn:55

Change-Id: Ia713a4edb3c0ab8f3bba048d7813f343e9dee166
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9040
Commit-Queue: Shaobo Yan <shaobo.yan@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2019-07-31 01:29:42 +00:00
Jiawei Shao d08611b7a8 Move all the implementations of Toggle to Toggles.cpp
This patch moves all the code related to Toggle from Instance.cpp to
Toggles.cpp to make the code in Instance.cpp cleaner.

BUG=dawn:56

Change-Id: Ica2a779569478a58ddf21e632a211c0c5b889b00
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/9580
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
2019-07-30 23:58:52 +00:00