546 Commits

Author SHA1 Message Date
Ken Rockot
2d41f8c1df Enforce per-dimension dispatch size limits
Note that this is for direct dispatch calls only. Indirect dispatch
calls are still not validated.

Bug: dawn:1006
Change-Id: I061c15208a01dfb803923823ba4afd38667cad22
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/59122
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Ken Rockot <rockot@google.com>
2021-07-21 20:44:09 +00:00
Ken Rockot
59668e95c7 Validate workgroup size and storage requirements
We define hard limits on these attributes for compute stages. This
enforces them.

BUG: dawn:322
Change-Id: I9b279774e877b5d40d912cb9f812f23d61c20a42
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56806
Commit-Queue: Ken Rockot <rockot@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-07-21 20:19:20 +00:00
Jiawei Shao
46513c7810 Add validation to the maximum inter-shader stage variable location
This patch adds the validation rules on the maximum inter-shader
stage variable locations. According to Vulkan SPEC, "Each effective
Location must have a value less than the number of location avaiable for
the given interface", and according to Table 18 "Shader Input and Output
Locations", the number of available vertex output locations is
maxVertexOutputComponents / 4, and the number of available fragment input
locations is maxFragmentInputComponents / 4.

BUG=dawn:802
TEST=dawn_unittests

Change-Id: I73a66ad69c808fbd0b128abaed1ca84f19a7925d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/58640
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
2021-07-21 08:26:58 +00:00
shrekshao
bdc029ee39 Validate format is blendable when blending is enabled
Treat color target format with "float" capabilities as
blendable format and validate when blending is enabled.
Add helpers for checking float16 texture values.

Bug: dawn:726

Change-Id: Icf8c0182e5e9a13523970c84b5af91f395a089af
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/57744
Commit-Queue: Shrek Shao <shrekshao@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
2021-07-19 23:27:27 +00:00
Brandon Jones
631b300262 Ensure correct shader reflection for texture_external
Adds some handling that ensures correct reflection of texture_external now
that Dawn uses Tint by default. Enables the previously written tests.

dawn: 1004
Change-Id: I8fd43292e9fe243aee037c70fe47b79ace8b672f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/58540
Commit-Queue: Brandon Jones (Intel) <brandon1.jones@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-07-19 22:26:47 +00:00
Austin Eng
83241616ae Validate a subresource can't be an attachment multiple times in a pass
Bug: dawn:998, dawn:1001
Change-Id: Id7cd4964ebf9589c599059cc0f853c0125fa725a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/58361
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-07-16 17:44:59 +00:00
Zhaoming Jiang
d8b3d99038 Add OOB validation in RenderPassEncoder for Draw and DrawIndexed
1. Validate the buffer range for both vertex step mode and instance step mode vertex buffers in Draw,
2. Validate the buffer range for instance step mode vertex buffers and the range of index buffer in DrawIndexed, and
3. Add related validation unit tests DrawVertexAndIndexBufferOOBValidationTests, and remove out-of-date vertex buffer robustness tests.

Bug: dawn:808
Change-Id: Ic27a95138cb1e21b72a1da392b7828368bfe2010
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56361
Commit-Queue: Zhaoming Jiang <zhaoming.jiang@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
2021-07-16 03:22:58 +00:00
Yunchao He
37140e7c62 Fix bugs about TextureViewDesc's default values
TextureViewDescriptor's default values for dimension and
arrayLayerCount in Dawn are not correct according to WebGPU spec.
This change fixes these bugs.

Bug: dawn:760
Change-Id: Ic1d069838d6c0f7bb1afa1dceaf73e91bdfdb20a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/58020
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2021-07-15 18:33:48 +00:00
Brandon Jones
4742fbe656 Add CompilationInfo wire test, check offset/length
Change-Id: Ifc457d6b58f20c294531444836693cb31e036ca1
Bug: dawn:746
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/57941
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
2021-07-14 02:52:42 +00:00
Yunchao He
b326f8c172 Remove UnsafeAPI toggle for 3D texture
3D texture implementation has already been done. It's time to remove
the UnsafeAPI toggle for it.

Bug: dawn:547

Change-Id: Ic9e0930d7906ee5274b9e412ebacb2574744b2b3
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56480
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Yunchao He <yunchao.he@intel.com>
2021-07-12 19:01:51 +00:00
Yunchao He
9749f5a9f5 Move a function to TextureFormatUtils.h|.cpp and rename these two util files
This change moves function ViewDimensionToTextureDimension() to
TextureFormatUtils.h|.cpp.

This change also renames TextureFormatUtils.h|.cpp to TextureUtils.h|.cpp
because the new name makes more sense now.

Bug: dawn:547

Change-Id: I183c68d26365a6cda722be55b8ba3556c1b4c82b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/57482
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
2021-07-09 02:47:49 +00:00
Yunchao He
2f51bfc74a Implement 3D texture storage binding types
This change adds storage binding type tests for 3D texture. It turns
out that it is working. There is no additional work to be done.

Bug: dawn:547

Change-Id: Ia749200e7d371ad549405ff63c198ea4a27924c0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/57120
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
2021-07-08 07:12:24 +00:00
Corentin Wallez
7ae959da60 Allowed mismatch sampler/comparison sampler when using SPIRV-Cross
When SPIRV-Cross we always reflect samplers as regular samplers. A
recent change implementing proper validation broke programs using
comparison samplers in that path.

Skip that bit of validation when using SPIRV-Cross, that hack can be
removed once we use Tint unconditionally for reflection.

Also reenables some BGL-ShaderModule compatibility tests with
SPIRV-Cross to cover the "fixed" validation.

Bug: dawn:571
Bug: dawn:367
Change-Id: I2d1a65aaea717b4927ac4e838942547a1b413d33
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56900
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-07-05 15:07:49 +00:00
Brandon Jones
aeff235dc3 Drop deprecated rowsPerImage/bytesPerRow behavior
Removes the last remaining code paths supporting the old rowsPerImage
and bytesPerRow defaulting behavior, and updates all related tests to
strictly expect the spec-complaint behavior.

Change-Id: I022db0b142939d82e33d5989460488881e5a1ab3
Bug: dawn:520
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56803
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2021-07-04 18:31:29 +00:00
Austin Eng
a5f24e590a Validate textures with filtering/non-filtering/comparison samplers
Renames dawn_native::ComponentTypeBit to SampleTypeBit and makes
the bitmask match wgpu::TextureSampleType. wgpu::TextureComponentType
should be removed in a follow-up CL.

The Format table is augmented with float/unfilterable-float information
so that textures can be validated against the BGLEntry's
TextureSampleType.

EntryPointMetadata::ShaderBindingInfo no longer inherits BindingInfo
because the two types are diverging further. Most notably, this CL
reflects from Tint the supported SampleTypeBits for texture bindings.
This bitset is validated against the bind group layout.

Adds an isFiltering getter to SamplerBase. A filtering sampler must
not be used with a non-filtering sampler binding.

Lastly, the CL reflects sampler/texture pairs from Tint and validates
an entrypoint against the pipeline layout that a filtering sampler is
not used with an unfilterable-float texture binding.

Bug: dawn:367
Change-Id: If9f2c0d8fbad5641c2ecc30615a3c68a6ed6150a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56521
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Commit-Queue: Austin Eng <enga@chromium.org>
2021-07-02 02:29:40 +00:00
Corentin Wallez
73b7cd624f Add missing WebGPU limits to Constants.h
This will help check that the Vulkan devices are enough for WebGPU in
a following CL.

In addition to additional limits this CL:

 - Change maxColorAttachments 4 -> 8 to match WebGPU
 - Renames kMinDynamicBufferOffsetAlignment to
   kMinUniformBufferOffsetAlignment.
 - Renames kMaxVertexBufferStride to kMaxVertexBufferArrayStride.
 - Changes validation of buffer offsets to use the separate uniform and
   storage limits (but no test is added because they are the same).
 - Adds validation and a test for kMaxStorageBufferBindingSize.
 - Augment the null::Device memory limit for that new test (it allocates
   a buffer of 512MB).
 - Fix the maxColorAttachment test to not use hardcoded values.

Bug: dawn:796
Change-Id: Ibe4219130a44355ae91c02aaa0a41cf5d9f9e234
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56081
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2021-06-29 08:12:00 +00:00
Brandon Jones
55a389762d Deprecated StoreOp::Clear in favor of Discard
Change-Id: Ifac3b980f23c3476d91bb89759b2a60ed5efbc17
Bug: dawn:937
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56045
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
2021-06-28 18:38:24 +00:00
Austin Eng
a9faf7f74a Fix misplaced ASSERT in bind group validation
Fixed: dawn:614
Change-Id: I06e4c89f34a1705346620dea074e3d469cbd1409
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/55900
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2021-06-24 23:05:51 +00:00
Zhaoming Jiang
1af81e3128 Validate the buffer offset in T2B and B2T for depth/stencil texture
This patch modifies the ValidateLinearTextureCopyOffset for T2B and B2T
commands to make sure that buffer offset is a multiple of 4 when the
texture is of a depth/stencil format. The unittests are also updated
to cover these cases.

Bug: dawn:721
Change-Id: I5cb9487e61e7f6ac7075157a092a1f3577844042
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/55720
Commit-Queue: Zhaoming Jiang <zhaoming.jiang@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
2021-06-24 05:38:00 +00:00
Sarah
2a57db73cb update compute shaders to include workgroup_size in their attribute
Change-Id: Ia9027f8ec9c4a293ae1bef735c8b5eeea84e81e2
Bug: tint:884
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/55685
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
2021-06-23 19:19:06 +00:00
Zhaoming Jiang
fdc35e604e Emit tint warning when creating shader module
Add the formatted tint messages in OwnedCompilationMessages, which will be emit after creating the shader module succeeds of fails.
This patch also change the compilation messages handling in creating shader modules. Now the compilation messages are separated from sparseResult, and should be handled manually. A new method, ShaderModuleBase::InjectCompilationMessages, is introduced to move a given OwnedCompilationMessages into the shader module, and emit the formatted tint errors and warnings. This method should be called explicitly on a valid or error shader module.

Bug: dawn:753
Change-Id: I5825186c6d9c4aa7725aebd0c302bfce5e1f37cf
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53890
Commit-Queue: Zhaoming Jiang <zhaoming.jiang@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-06-18 13:29:39 +00:00
Corentin Wallez
95aa7c5b29 Add SetIndex/VertexBuffer offset argument alignment constraints
The vertex buffer alignment in particular is helps make the
implementation of programmable pulling much easier on Metal since the
vertex data will be able to be represented as array<u32>.

Bug: dawn:805
Change-Id: I2bf2742db3b8fa478be620c892925b8b75dc514c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/54659
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
2021-06-17 17:48:45 +00:00
Li Hao
b936d23364 Implement internal storage for buffer usage and buffer binding type
In the timestamp internal pipeline, the ResolveQuery buffer cannnot be
binded as Storage buffer in binding group layout due to it has not
Storage usage.
Add InternalStorageBuffer for buffer usage and
InternalStorageBufferBinding for buffer binding type, make the
QueryResolve buffer implicitly get InternalStorageBuffer and only
compatible with InternalStorageBufferBinding in BGL, not Storage buffer
binding type.

Bug: dawn:797
Change-Id: I286339e703e26d3786c706ded03f850ca17355fb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/54400
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Commit-Queue: Hao Li <hao.x.li@intel.com>
2021-06-16 14:33:27 +00:00
Corentin Wallez
5a53eb3113 Validate that DS attachment must cover all aspects of the texture.
It isn't clear if this should be a limitation of the WebGPU
specification. Until further investigation is done, disallow it in Dawn
to avoid undefiend behavior.

Bug: dawn:812
Change-Id: Iab8208f1ea479263b08ede41374ce1a680ce191e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53387
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
2021-06-11 14:25:29 +00:00
Ben Clayton
6133e5cf3d Wrap call stmts with non-void rets, with ignore()
We have a new validation rule that states that all calls to functions that return a value must use that value. ignore() is the escape hatch.

Bug: tint:886
Change-Id: I9ab8d288b3c54ad4b7e46feda129c36c9136c20b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/54200
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
2021-06-11 14:01:29 +00:00
Austin Eng
f8a0f82fad Move zero-size copy skips from the frontend to the backend
Bug: chromium:1217741
Change-Id: Ib4884b5aa80124ed9da48262fcae11cf6d605034
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53883
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
2021-06-10 02:40:18 +00:00
Brandon Jones
0d50a2c770 ComputePipelineDescriptor.computeStage->compute
Deprecates the computeStage member of the descriptor in favor of compute
as described by the spec. In order to support both variants without
breaking backwards compatibility some code had to be manually added to
the wire client to copy from the deprecated member to the new one and
visa versa.

Change-Id: I9d5c2fc9c446c927c5792c9af9ed56c90060b65b
Bug: dawn:800
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53884
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-06-09 18:07:32 +00:00
Hao Li
7cbcacc712 Disallow pipeline statistics query as UnsafeAPIs
- Pipeline statistics query is not fully implemented, disallow its
  creation as unsafe
- Add pipeline statistics creation in UnsafeAPIsTest, because it needs
  enable extension, add a separate test class for it.

BUG: chromium:1177506
Change-Id: Ic77e04c9c854b396e7240674bd9deb0caf97a513
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53889
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
2021-06-09 08:47:37 +00:00
Brandon Jones
b94c41ad23 Follow-up For ExternalTexture Binding Feedback
Implements two basic binding tests requested in a previous review. Moves
ExternalTextureState enum to be private.

Bug: dawn:798
Change-Id: I9e5ac31a92bab26b7d68568802db1fa988e849a9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53700
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Brandon Jones (Intel) <brandon1.jones@intel.com>
2021-06-08 20:29:37 +00:00
Ben Clayton
15eba9a048 WGSL: Migrate access control to var<>
Spec change: https://github.com/gpuweb/gpuweb/pull/1735

Bug: tint:846
Change-Id: Id2eddc4e8f3bdb86027db8d61bb96b9b8ef9778f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53386
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
2021-06-08 15:36:44 +00:00
Ben Clayton
b3c371031c Move texture_storage access into type
Instead of having it as a decoration.
The old style is now deprecated and will be removed soon.

See  https://github.com/gpuweb/gpuweb/pull/1735 for the WGSL spec change.

Bug: tint:846
Change-Id: Id2fa681ddf7b97cd3fa41d7b5538029d96db7e28
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/53082
Reviewed-by: Corentin Wallez <cwallez@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
2021-06-03 13:21:36 +00:00
Brandon Jones
39633e2da2 Implement External Texture Binding Functionality
Adds functionality to BindGroupLayout and BindGroup to allow
GPUExternalTexture bindings.

Bug: dawn:728
Change-Id: I651b28606dceda15f0a944711ddba639df77c1a3
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47381
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
2021-06-01 19:45:53 +00:00
Brandon Jones
7e59470563 Remove deprecated BindGroupLayoutEntry fields
Bug: dawn:22
Change-Id: Idf0fd0505fb7e5e5389520fa7bc638e137f4c0b6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/51765
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2021-05-21 18:25:48 +00:00
Brandon Jones
41c87d973a Removed deprecated CreateRenderPipeline path
Renames all the RenderPipeline*2 stuff to simple RenderPipeline* but
keeps *2 definitionas around as typedefs and wrappers so that users can
migrate away from it.

Bug: dawn:22
Change-Id: If301d81a829bba0646c3a61068f2279932b191e0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/51764
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
2021-05-21 05:01:38 +00:00
Brandon Jones
a548578f67 Remove Fences
Fences are no longer part of the WebGPU spec, and have been removed from
Blink.

Bug: dawn:22
Change-Id: I240c4c4107acfaf9facec88a43a38b5ff327c7a6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/50702
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-05-21 00:01:08 +00:00
Brandon Jones
76e5a9f6dd Remove deprecated API surface, Pt. 1
- Remove Device.getDefaultQueue()
 - Remove Extent3D.depth
 - Remove setIndexBufferWithFormat
 - Remove TextureUsage::OutputAttachment

Change-Id: If1c39b5630c88c3b87b37e317aafe7442419f7d0
Bug: dawn:22
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/50700
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
2021-05-13 17:51:23 +00:00
Austin Eng
67851d9021 Validate that 3D texture copies cannot be between the same subresource
Bug: dawn:547
Change-Id: I747ccdb895121292e527acc385d69697bc86d8b2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/50240
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Yunchao He <yunchao.he@intel.com>
2021-05-10 17:42:41 +00:00
Yan
47652564e6 Add validation rules for CopyTextureForBrowser
This CL complete the validation rules for CopyTextureForBrowser by:
 - Restrict source texture must have |CopySrc| and |Sampled| usage.
 - Restrict destinaton texture must have |CopyDst| and
   |RenderAttachment| usage.
 - Restrict sample counts of source texture and destination texture
   must be 1.
 - Restrict source copy origin.z must be 0.
 - Restrict CopyTextureForBrowser() can only copy to single slice.

A validation unittest is added to check.

BUG=dawn:465

Change-Id: I5e645a4b69edeaf97ce1231bd7c8036027524ba8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/49306
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
2021-05-07 01:48:14 +00:00
Corentin Wallez
76732abfe5 Properly implement per-dispatch synchronization scopes.
Below are the list of all the individual changes, which are a good order
in which to review this CL.

Core changes:
 - Change the tracking in the frontend to produce a synchronization
   scope per dispatch instead of per compute pass. Some bindgroups might
   not be part of any synchronization scopes so we also track all the
   referenced resources on the side so they can be checked during
   Queue::Submit validation.
 - Fix clearing in the GL and Metal backends to use the per-dispatch
   synchronization scopes.
 - Fix the Vulkan backend to use the per dispatch synchronization scopes
   to produce the correct pipeline barriers. This allows the removal of
   previous logic that was subtly incorrect for Indirect buffer. This
   allows the merging of the Compute and Render DescriptorSetTracker into
   a single small helper class.
 - D3D12 changes are similar to Vulkan, but the simplification is just a
   the suppression of a branch with a lot of code in
   BindGroupStateTracker.

Test changes:
 - Fixup all the ResourceUsageTracking tests to follow the WebGPU spec
   for synchronization scopes (fixing a lot of TODOs).
 - Add additional tests checking that Indirect buffers are not allowed
   to be used as a writeable storage in the same synchronization scope.
 - Add tests for Queue::Submit validation correctly taking into account
   resources that are bound but unused in compute passes.
 - Add an end2end test for using a buffer as Indirect and Storage at the
   same time in a DispatchIndirect, which would previously produce
   incorrect barriers in the Vulkan and D3D12 backends.

Other small changes (that I was to lazy to put in a different CL):
 - Add the utils::MakePipelineLayout helper function.
 - Fix Indirect not being in the list of readonly buffer usages (caught
   by a test added in this CL).

Bug: dawn:632
Change-Id: I77263c3535a4ba995faccbf26255da9a2f6ed3b5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/49887
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
2021-05-06 19:20:14 +00:00
Ryan Harrison
bf99a720c3 Re-enable unittests for Tint
Bug: tint:717
Bug: tint:692
Bug: tint:718

Change-Id: I5765d8582ee0132efb47939f495781954a1e2afa
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48843
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Auto-Submit: Ryan Harrison <rharrison@chromium.org>
2021-04-26 08:31:15 +00:00
Hao Li
aed656cd7a Clear resolve buffer to 0 for resolving unavailable queries
- Add vkCmdFillBuffer in ResolveQuerySet to clear the buffer to 0s for
  these unavailable queries if the buffer has been initialized or fully
  used which won't been initialized with 0s again.
- Because vkCmdFillBuffer has driver issue on Intel Windows, Skip some
  affected cases.
- Remove unsafe api checking from Occlusion Query.

Bug: dawn:434

Change-Id: Ib34f81d93b0de8f08f0eeebf3c8a967eeb5ecefb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48320
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
2021-04-22 10:10:12 +00:00
Ben Clayton
6dd1d37da8 unittests: Add a position return value for vertex shaders
Fixes new validation errors added with:
https://dawn-review.googlesource.com/c/tint/+/48560

Change-Id: Icb9a3bc46574c365a812685d01aab336a11792c1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48681
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
2021-04-21 20:26:31 +00:00
Ryan Harrison
5147cb51e1 Fix MinBufferSizeDefaultLayoutTests.RenderPassConsidersBothStages
This test was passing on SPIRV-Cross due to SPRIV-Cross's
overreporting of binding information per entry point. On Tint it was
failing, because the resources in the vertex shader were not being
referenced, so not being reported. I have corrected the values passed
to the utility code that generates the shaders, so that it generates
the needed references.

I have also slightly tweaked the test, so it will distinguish between
failure states better.

BUG=tint:716

Change-Id: If88f600a36cba8b580d888e902b8d8102e05bd10
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48520
Auto-Submit: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-04-21 08:52:30 +00:00
Ben Clayton
8091c68450 Cleanup transform usage
Use tint::transform::DataMap for inputs as well as outputs.

This allows tint to nest transforms inside each other (e.g. embedding
transforms inside sanitizers), and still having a consistent way to pass
data in and out of these transforms, regardless of nesting depth.

Transforms can also now be fully pre-built and used multiple times as
there is no state held by the transform itself.

Bug: tint:389

Change-Id: If1616c77f2776be449021a32f4a6b0b89159aa2a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48060
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Auto-Submit: Ben Clayton <bclayton@google.com>
2021-04-19 19:42:19 +00:00
James Price
eae70b75ae Update WGSL in tests with renamed builtins
These builtins have been renamed:
* frag_coord -> position
* sample_mask_in -> sample_mask
* sample_mask_out -> sample_mask

Change-Id: Ic40dc9f4e509587b7ac82e43abbf9eec68225d9f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48300
Auto-Submit: James Price <jrprice@google.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-04-19 15:29:49 +00:00
Brandon Jones
5e6a092703 Deprecate renderpass color/depth .attachment
As of https://github.com/gpuweb/gpuweb/pull/1352 the spec indicates that
GPURenderPassColorAttachmentDescriptor and
GPURenderPassDepthStencilAttachmentDescriptor should use .view rather
than .attachment to indicate the TextureView associated with the
render pass attachment.

Bug: dawn:762
Change-Id: I70d615e19d8e7aae5b26aa5965c7109289ab868b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47902
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
2021-04-17 01:51:53 +00:00
Brandon Jones
413dcf8a40 Rename setBlendColor->setBlendConstant
Matches most recent spec changes. setBlendColor has been marked as
deprecated.

Bug: chromium:1199057
Change-Id: I4584ce789bd7d14401244509d5ada62a46236a5d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47901
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
2021-04-15 19:33:58 +00:00
Ryan Harrison
0a5696079b Fix unittests that are broken by --enable-toggles=use_tint_generator
Tests fixed by this CL:
  BindGroupLayoutCompatibilityTest.ROStorageInBGLWithRWStorageInShader
  BindGroupLayoutCompatibilityTest.TextureViewDimension
  BindingsValidationTest.PipelineLayoutWithLessBindingsThanPipeline
  GetBindGroupLayoutTests.SameObject
  GetBindGroupLayoutTests.DefaultShaderStageAndDynamicOffsets
  GetBindGroupLayoutTests.ComputePipeline
  GetBindGroupLayoutTests.BindingType
  GetBindGroupLayoutTests.ViewDimension
  GetBindGroupLayoutTests.TextureComponentType
  GetBindGroupLayoutTests.BindingIndices
  GetBindGroupLayoutTests.MinBufferSize
  GetBindGroupLayoutTests.StageAggregation
  GetBindGroupLayoutTests.ConflictingBindingType
  GetBindGroupLayoutTests.ConflictingBindingTextureMultisampling
  GetBindGroupLayoutTests.ConflictingBindingViewDimension
  GetBindGroupLayoutTests.ConflictingBindingTextureComponentType
  GetBindGroupLayoutTests.UnusedIndex
  MinBufferSizePipelineCreationTests.LayoutSizesTooSmall
  MinBufferSizePipelineCreationTests.LayoutSizesTooSmallMultipleGroups
  MinBufferSizeDrawTimeValidationTests.ZeroMinSizeAndTooSmallBinding
  MinBufferSizeDrawTimeValidationTests.UnorderedBindings
  MinBufferSizeDrawTimeValidationTests.MultipleGroups
  MinBufferSizeDefaultLayoutTests.DefaultLayoutVariousWGSLTypes
  MinBufferSizeDefaultLayoutTests.DefaultLayoutVariousBindingTypes
  MinBufferSizeDefaultLayoutTests.MultipleBindGroups
  MinBufferSizeDefaultLayoutTests.NonDefaultLayout
  RenderPipelineValidationTest.TextureComponentTypeCompatibility
  RenderPipelineValidationTest.TextureViewDimensionCompatibility
  StorageTextureValidationTests.BindGroupLayoutEntryTypeMatchesShaderDeclaration
  StorageTextureValidationTests.BindGroupLayoutStorageTextureFormatMatchesShaderDeclaration
  StorageTextureValidationTests.BindGroupLayoutViewDimensionMatchesShaderDeclaration

Also enables GetBindGroupLayoutTests.FromCorrectEntryPoint for
use_tint_generator, since it handles this case, unlike SPIRV-Cross.

These tests remain skipped, but with bugs listed for fixing the underlying issues:
  MinBufferSizeDefaultLayoutTests.RenderPassConsidersBothStages
  ShaderModuleValidationTest.MultisampledArrayTexture
  StorageTextureValidationTests.ReadWriteStorageTexture
  StorageTextureValidationTests.StorageTextureFormatInShaders
  StorageTextureValidationTests.UnsupportedWGSLStorageTextureFormat

BUG=dawn:756

Change-Id: Ib6b0d4144927073d949cb8d1409063a767fd47e9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47823
Auto-Submit: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
2021-04-15 07:18:08 +00:00
Ryan Harrison
acdc35dc39 Support enabling/disabling toggles in unittests
Refactors support for toggle control flags, --enable-toggles= &
--disable-toggles, from the end2end tests into a utility class to make
them available elsewhere. The unittests now uses this utility class to
parse toggle control flags.

For some toggles, like 'use_tint_generator', the unittests are known to
be broken with them turned on. They will be fixed in subsequent CLs.

BUG=dawn:756

Change-Id: Ic283e8a82bedcbf255258cca3e62f58c79d3857b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47740
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Auto-Submit: Ryan Harrison <rharrison@chromium.org>
2021-04-14 14:55:07 +00:00
Corentin Wallez
78d27e88de Remove usage of deprecated WGSL IO in perf/unit/whitebox tests
Also drive-by fixes some other deprecated constructs (const -> let, and
a disabled test having ancient WGSL).

Bug: dawn:755

Change-Id: I924dfbcbd0a7d0478f3e9b3766585751a0392499
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/47620
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
2021-04-13 10:42:44 +00:00