When vkDestroyDebugReportCallbackEXT() is called in Backend::~Backend()
and Vulkan validation layers are in use, the variable unique_id_mapping
is referenced internally[1]. However, the variable is global[2] and it's
destructed before Backend::~Backend(), which causes a use-after-free
issue. The issue was unnoticed on Windows, but we observed the crash at
exit on Linux.
[1] 9fba37afae/layers/generated/layer_chassis_dispatch.cpp (4961)
[2] 9fba37afae/layers/generated/chassis.cpp (40)
Bug: dawn:150
Change-Id: I505373a88ef9795243dd18da9785fb49d253e498
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13787
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This CL is part of a chain of CLs that imports dma-bufs as VkImages
to support WebGPU on Chrome OS.
There are currently two steps for importing external memory into
Vulkan:
1. DeviceVk::ImportExternalImage: calls into
MemoryServiceOpaqueFD::ImportMemory which in turn calls into
vkAllocateMemory and outputs a VkDeviceMemory handle to the
imported memory.
2. TextureVk::CreateFromExternal: creates the actual TextureVk
object, creates the VkImage, and binds the VkDeviceMemory from
ImportExternalImage to the VkImage.
For dma-buf support, however, we need to re-order these two steps
because importing dma-buf memory requires a handle to the VkImage
that will alias it [1].
This CL splits these two steps into three steps to ensure we create
the VkImage first so we can use it in vkAllocateMemory:
1. TextureVk::CreateFromExternal: creates the TextureVk and
VkImage (no longer concerns itself with vkBindImageMemory).
2. DeviceVk::ImportExternalImage: now takes the VkImage as input
but is otherwise unchanged.
3. TextureVk::BindExternalMemory: calls vkBindImageMemory with
handles to VkDeviceMemory and VkImage.
[1] https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkMemoryDedicatedAllocateInfo.html
BUG=chromium:996470
Change-Id: Id2d5951e9b573af79c44ce8c63be5210a279f946
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13780
Commit-Queue: Brian Ho <hob@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
This CL adds end2end tests for memory synchronization tests for buffer.
It adds a few tests that iterate data read-add-write operations a few
times in buffer for compute and render respectively, and verifies
that data dependency among interations is well synchronized.
BUG=dawn:275
Change-Id: Idfe627e90de795d664ee64787d5c5d2bfcee676b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13700
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
The BackendBinding that implement correct interactions between Dawn and
GLFW windows is only needed when compiling the Dawn samples. This only
happen in standalone so move the dawn_bindings there.
This fixes an issue where the ChromeOS build would discover the Dawn
BUILD.gn file and try to build dawn_bindings that depended on a fake
GLFW target, making the GLFW #includes fail.
With dawn_binding moved in dawn_standalone, all targets discoverable by
a Chromium build that use GLFW do so behind the dawn_enable_opengl flag,
which is always false on ChromeOS.
Also reverts https://dawn-review.googlesource.com/c/dawn/+/13620 because
we want to allow building dawn_end2end_tests on ChromeOS even if the
browser doesn't use_dawn.
BUG=1025326
Change-Id: I8ab965c5da68ca422912b21f87f65e32e789ee8a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13820
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Brian Ho <hob@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This patch add end2end tests for map buffer twice for map read, map
write, and SetSubData.
BUG=dawn:278
Change-Id: Ibe57d7923310d2513e314fa9bf185677a706d6da
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13801
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
This changes RefCounted to increment and decrement the refcount by steps
of 2, so that a 1 bit payload can be inlined in the refcount. This
avoids using a whole boolean + padding (4 or 8 bytes in general) to know
if objects are errors.
Fixes a longstanding optimization TODO.
BUG=dawn:105
Change-Id: I5e8f66465d23772fb6082ea3e0d5d4aba2132648
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13680
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Fixes a bug where SetBindGroup command would fail to be skipped.
BUG=dawn:256
Change-Id: I9815c9d31aa88f6881274a1873cabe17379cc2e0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13800
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Bryan Bernhart <bryan.bernhart@intel.com>
This seems to be a regression introduced by CL:12022, where the
previously recorded semaphores are leaked while resetting the recording
context. The Vulkan validation layers will complain about this when
running the Linux-only image wrapping tests. Also, the semaphores are
queued for deletion with the right serial now.
Bug: dawn:19, dawn:150
Change-Id: I50fd46ca9de9199b29be2f85d5e9bd7394a10f1a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13420
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Jiajie Hu <jiajie.hu@intel.com>
This CL adds end2end tests for memory synchronization tests for buffer.
It adds a few tests that write into storage buffer in compute pass,
then read via uniform binding from the same buffer in render pass.
BUG=dawn:275
Change-Id: Ic98a10aab4cdcddecd60662438d4b8bdd34fafbc
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13580
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
The cpu_time metric measures the amount of CPU time spent on a step.
It excludes time spent waiting for the GPU or time between frames.
Bug: dawn:208
Change-Id: I5624d45557716c02bb7da632d2347eca0b81ad41
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13640
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
TerribleCommandBuffer has space for 10,000,000 bytes worth of commands. If
commands contain super large data block (e.g. setsubdata), it will
return nullptr and crash dawn wire layer.
This patch adds a large buffer to handle super large data block.
BUG=dawn:251
Change-Id: Ib007e92b5282afbb93aef63cfffe5a3965f6d5c1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13040
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This will help flush out future errors where targets depend on this
target in configs where it won't build or isn't used.
Bug: None
Change-Id: Iebfc6b9afbd9b4fd9616d87bcaf8cd83a2163777
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13620
Commit-Queue: Elly Fong-Jones <ellyjones@google.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
This was unnecessary verbosity. Fix this by having the ProcTable
generator using type aliases so all types appear like they have
"Base".
BUG=
Change-Id: I8c472fb924f6ce739e4e41038452381b4f727a2b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13442
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This patch adds an interface GetAdapterProperties() on Adapter which can
directly return a WGPUDeviceProperties object that includes the
information of the adapter.
BUG=chromium:996713
Change-Id: I9a7b1512d259761e198dfac3eafa718171d47241
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13340
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
This changes the methods of Dawn's SwapChain to match webgpu.h, namely
Present() now doesn't take arguments, and GetNextTexture() is replaced
with GetCurrentTextureView().
BUG=dawn:269
Change-Id: Ia0debefb170caf799c3310b1dad5535c4c5f59ca
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13441
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Uses D3D12 native render pass API when possible. On pre-RS5 builds of
Windows, Dawn will fall back to a software emulated render pass. A
toggle was added to provide test coverage to the emulated render pass
implementation and used in tests that test render pass functionality in
particular.
Bug: dawn:36
Change-Id: I297a3ec7655b68d28204db2d3ab78cb82bb4e7a5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13082
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Brandon Jones <brandon1.jones@intel.com>
Roll third_party/SPIRV-Tools/ 3724cfbea..12e54dae1 (10 commits)
3724cfbea8..12e54dae16
$ git log 3724cfbea..12e54dae1 --date=short --no-merges --format='%ad %ae %s'
2019-11-11 ehsannas Update Offset to ConstOffset bitmask if operand is constant. (#3024)
2019-11-08 dneto Try to fix go linter: exported constant comment (#3026)
2019-11-08 afdx spirv-fuzz: Eliminate spurious semicolons (#3025)
2019-11-07 afdx spirv-fuzz: simplify transformation for replacing an id with a synonym (#3020)
2019-11-07 alanbaker Re-enable OpReadClockKHR validation (#3013)
2019-11-07 dneto Python 3: remove deprecated U qualifier on 'open' (#3019)
2019-11-07 paulthomson Remove semicolon (#3022)
2019-11-06 afdx spirv-fuzz: vector shuffle transformation (#3015)
2019-11-06 afdx Add basic documentation about spirv-fuzz (#3016)
2019-11-05 dneto Fix Go lint issues: comment exported symbols (#3014)
Roll third_party/glslang/ 5d0e01d9e..37dcb8945 (5 commits)
5d0e01d9e7..37dcb89457
$ git log 5d0e01d9e..37dcb8945 --date=short --no-merges --format='%ad %ae %s'
2019-11-12 cepheus HLSL: Fix#1960: fmod() was not converting int args to float.
2019-11-07 dneto SPIR-V postprocessing: WEB case only needs CFG mods
2019-11-06 kainino Fix compileGLSLZeroCopy accidental minification
2019-11-06 dsinclair Add deprecation for SPIRV/ install folder location.
2019-11-05 cepheus Fix#1959 by reverting 7b0e236 to put files in two places.
Roll third_party/shaderc/ f4cf10c66..c9d5be6b0 (2 commits)
f4cf10c66f..c9d5be6b01
$ git log f4cf10c66..c9d5be6b0 --date=short --no-merges --format='%ad %ae %s'
2019-11-11 rharrison Remove deprecated items from result/message refactoring (#878)
2019-11-11 9856269+sarahM0 Add spvc parser support and unit tests for OpVariable, OpDecorate, OpExtInstImport, … … (#873)
Roll third_party/spirv-cross/ 24f209eb9..fd5aa3ad5 (12 commits)
24f209eb93..fd5aa3ad51
$ git log 24f209eb9..fd5aa3ad5 --date=short --no-merges --format='%ad %ae %s'
2019-11-12 post CMake: Clarify some warning messages.
2019-11-12 post HLSL: Add CLI support for --hlsl-auto-binding.
2019-11-11 post HLSL: Add support to remove register() bindings.
2019-11-07 post MSL: Remove dubious workaround code in unpack_expression.
2019-11-07 post MSL: Fix unpack_expression from column of padded matrix.
2019-11-06 post HLSL: Report more explicitly which member failed validation.
2019-11-06 post HLSL: Report which cbuffer failed validation.
2019-11-06 post Move .invalid. test shaders to the more appropriate subfolders.
2019-11-05 dsinclair Move all .invalid shaders into no-opt folders.
2019-11-05 dsinclair Remove old reference shaders
2019-11-05 dsinclair Only run spirv-opt if the spirv is valid.
2019-11-05 dsinclair Roll GLSLang and SPIRV-Tools
Created with:
roll-dep third_party/SPIRV-Tools third_party/glslang third_party/shaderc third_party/spirv-cross third_party/spirv-headers
Change-Id: I7b57223fabdd62adcdfd17756c866e9dfa23b374
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13421
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
The Metal driver calls command buffer completion callbacks on a
separate thread so enqueueing these trace events needs to be made
thread-safe. In the future, Dawn will probably have other threads
that also require thread-safe tracing.
In this CL, each thread records trace events into its own buffer,
and all buffers concatenated when trace events are acquired.
Bug: dawn:254, dawn:208
Change-Id: I0f1abd404568d838091066a8f27a3bf98fa764b9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13080
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
This patch adds validation code for shader side for readonly storage
buffer. It also adds unit tests for validation.
BUG=dawn:180
Change-Id: Ib5789381d41d77867dd6e6aa1f1ccbc8fa43a382
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12941
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Yunchao He <yunchao.he@intel.com>
This patch sets proper value in a few end2end tests for BindGroup/BindGroupLayout.
It also removes unused variables in unittest test for BindGroup/BindGroupLayout.
Bug=dawn:180
Change-Id: Ie5c8b2fd8265fe90b7b54c48af48106c356564b6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13300
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Subtle change to how results are handled requiring another change.
Rolling DEPS ahead to pick up change.
Roll third_party/shaderc/ 76ee91e12..f4cf10c66 (4 commits)
76ee91e126..f4cf10c66f
$ git log 76ee91e12..f4cf10c66 --date=short --no-merges --format='%ad %ae %s'
2019-11-11 rharrison Correct Unicode issue with add_copyright.py (#876)
2019-11-08 rharrison Another major API rework (#871)
2019-11-07 rharrison Remove deprecated API elements (#870)
2019-11-07 9856269+sarahM0 Add support and unit test for OpTypeInt, OpTypePointer and OpConstant (#872)
Created with:
roll-dep third_party/shaderc
Change-Id: Ic461c3ec135d2c73ebadede62fb34c90e7961eda
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13380
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
ResourceAllocatorManager::DeallocateMemory was correctly invalidating the
passed in allocation object. However, since the subclass
ResourceHeapAllocation class was not overriding the Invalidate method and
clearing out the D3D12Resource pointer, the resource ended up being tied
to the lifetime of the Texture object instead of being released on Destroy.
In Chromium, this bug was particularly egregious as it meant swap chain
texture cleanup was at the whims of the Javascript garbage collector.
Bug: dawn:242
Change-Id: Ia5856c61c8d3b92a2247a9aaa5f91c5de0a99dcb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13200
Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Reviewed-by: Austin Eng <enga@chromium.org>
It invokes [NSObject center] which is ambiguous as of the 10.15 SDK.
For now, ignore the ambiguity; a proper upstream fix to glfw will
happen later.
Bug: chromium:973128
Change-Id: Ia0b4186294b16928f55d0a3417c7840e50e8754b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13260
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Due to a renaming/refactoring of the spvc API Dawn is currently using
a deprecated class name. Fixing this, so the deprecated APIs can be
removed.
Also including the roll to pick up the API changes.
Roll third_party/shaderc/ 0a260d789..76ee91e12 (7 commits)
0a260d789f..76ee91e126
$ git log 0a260d789..76ee91e12 --date=short --no-merges --format='%ad %ae %s'
2019-11-06 9856269+sarahM0 Fix spvc test machanism and adds unit tests for OpSource (#868)
2019-11-06 rharrison Move spirv_cross state out of result and rename opaque state handle (#865)
2019-11-05 9856269+sarahM0 Add unit test for spvcir parser (#866)
2019-11-04 rharrison Rolling 5 dependencies (#862)
2019-11-04 9856269+sarahM0 Add --emit-line-drective option (#861)
2019-11-01 9856269+sarahM0 Add spvcir unit test - OpCapability (#857)
2019-11-01 rharrison Add flag for updating invalid expecations and rewrite end logic (#856)
Created with:
roll-dep third_party/shaderc
Change-Id: I81649618da6753657ef5a7533785559c2a13c416
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13180
Commit-Queue: 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>
Deploy self-built Vulkan validation layers instead of system installed
one. And it will reuse third_party/angle's Vulkan validation layers if
building with chromium.
Bug: dawn:150
Change-Id: I94e26f7a152fb2a1c39bcb102d60024f4d65eee6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/11120
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
This is a reland of 34ac535f02
Original change's description:
> Implement readonly storage buffer - validation at API side
>
> This patch adds validation code for API side for readonly storage
> buffer. It also adds unit tests for API validation.
>
> BUG=dawn:180
>
> Change-Id: I9a97c5f3aa23e720619d138ca55d7b17f08d64c9
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12620
> Reviewed-by: Austin Eng <enga@chromium.org>
> Commit-Queue: Yunchao He <yunchao.he@intel.com>
Bug: dawn:180
Change-Id: I1e107ff6168279940496317b973f2d8c7c3c6114
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13083
Reviewed-by: Yunchao He <yunchao.he@intel.com>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Roll third_party/SPIRV-Tools/ 618ee5094..3724cfbea (7 commits)
618ee50942..3724cfbea8
$ git log 618ee5094..3724cfbea --date=short --no-merges --format='%ad %ae %s'
2019-11-05 afdx spirv-fuzz: better computation of data synonym facts (#3010)
2019-11-05 afdx spirv-fuzz: make equivalence classes deterministic (#3011)
2019-11-04 jmadill Add missing headers to GN. (#3009)
2019-11-04 chris Correct "environment" typo (#3007)
2019-11-01 afdx spirv-fuzz: improvements to representation of data synonym facts (#3006)
2019-11-01 stevenperron Add iOS as a supported platform (#3001)
2019-11-01 rharrison Reset pointers before iterating in fuzzer to avoid double free (#3003)
Roll third_party/glslang/ b131630e7..5d0e01d9e (8 commits)
b131630e7c..5d0e01d9e7
$ git log b131630e7..5d0e01d9e --date=short --no-merges --format='%ad %ae %s'
2019-11-04 rharrison Remove std::move that is breaking chromium roll
2019-11-03 cepheus Tests: Add more test results for the previous generator version bump.
2019-11-02 cepheus Bump up the generator version, which is exposed in SPV test results.
2019-11-03 sk Fix warning: size_t->int implicit cast
2019-11-02 jmadill Add a couple missing headers to the GN build.
2019-11-01 cepheus Bump version.
2019-10-21 dneto SPIR-V: Aggressively prune unreachable merge, continue target
2019-10-25 sk Add option ENABLE_CTEST to skip testing
Roll third_party/shaderc/ 0a260d789..f16e79385 (4 commits)
0a260d789f..f16e793858
$ git log 0a260d789..f16e79385 --date=short --no-merges --format='%ad %ae %s'
2019-11-04 rharrison Rolling 5 dependencies (#862)
2019-11-04 9856269+sarahM0 Add --emit-line-drective option (#861)
2019-11-01 9856269+sarahM0 Add spvcir unit test - OpCapability (#857)
2019-11-01 rharrison Add flag for updating invalid expecations and rewrite end logic (#856)
Roll third_party/spirv-cross/ d253f41e1..24f209eb9 (4 commits)
d253f41e17..24f209eb93
$ git log d253f41e1..24f209eb9 --date=short --no-merges --format='%ad %ae %s'
2019-11-04 post Add spvc_type_get_base_type_id.
2019-11-04 post C API: Add missing boolean options.
2019-11-04 post GLSL: Fix issue with array-of-array inputs in tess.
2019-11-01 dmalyshau Avoid including stdexcept in no-exception environment
Created with:
roll-dep third_party/SPIRV-Tools third_party/glslang third_party/shaderc third_party/spirv-cross third_party/spirv-headers
Change-Id: I6109f6d6c0602d39d459bb3f4983ee2c88a6fcb9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13081
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Enables use of 4KB resource alignments where permitted.
This saves heap memory (4KB vs 64KB per allocation) and improves re-use.
BUG=dawn:27
Change-Id: I7a0a30252f480db2d0fa7f5d949207a56e3aa2e9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12900
Commit-Queue: Bryan Bernhart <bryan.bernhart@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Fixes the accidental disabling of the workaround on 10.11, where it is
required, and implements detection for iOS.
Bug: dawn:253, dawn:56
Change-Id: I0278f29892d3a49144b5e9620e4377e42a4a5155
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12960
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This changes puts descriptor pools in the BindGroupLayout so that they
can be reused between descriptors with the same layout.
This makes the DrawCallPerf.Run/Vulkan_NoReuseBindGroups benchmark go
from 1400ns to 800ns per run.
BUG=dawn::256
Change-Id: Ia9baf7f998d9ff4d552e255c80069b67c6a9ac40
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12920
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Recently, BUILD.gn has been added to spirv-cross repo:
https://github.com/KhronosGroup/SPIRV-Cross/blob/master/gn/BUILD.gn
However, it is incomplete, currently only inlcudes small config needed
by ANGLE's metal backend.
When building ANGLE and Dawn together with chromium, errors were thrown:
ERROR at //third_party/spirv-cross/spirv-cross/spirv_common.hpp:21:11: Include not allowed.
#include "spirv_cross_containers.hpp"
^-------------------------
It is not in any dependency of
//third_party/dawn/third_party:spirv_cross
The include file is in the target(s):
//third_party/spirv-cross/spirv-cross/gn:spirv_cross_sources
which should somehow be reachable.
___________________
ERROR at //third_party/spirv-cross/spirv-cross/spirv_common.hpp:22:11: Include not allowed.
#include "spirv_cross_error_handling.hpp"
^-----------------------------
It is not in any dependency of
//third_party/dawn/third_party:spirv_cross
Bug: angleproject:2634
Change-Id: Idb328643db0b765ab228ee7d59d7996b6e6073e4
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13020
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Enables mixing of texture and buffers in the same heap.
This allows better heap re-use and reduces internal fragmentation.
A toggle has been added and enabled by default.
BUG=dawn:27
Change-Id: I466dc96240fe1e8de6e3dc56ed5547d7b61ee045
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12821
Commit-Queue: Bryan Bernhart <bryan.bernhart@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
In WebGPU these are uint32_t because Vulkan accepts at most a 32-bit
unsigned integer.
Bug: dawn:22
Change-Id: Ia61cd710f80c19135ac215a9a93ef9a8f683bac2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12942
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Timing results extracted from trace events are reported in seconds,
not milliseconds.
Bug: dawn:208
Change-Id: I004d1ee5bbd0aaba8cf5b201f95903e76af0c530
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13000
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
This is a helper to allow a Dawn embedder to look up the Vulkan device
functions. Possibly remove when we design a cleaner way to share function
pointers.
Change-Id: I3ed92568e543c1aad9e0e64d72ad0990824640cb
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12980
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
This reverts commit 34ac535f02.
Reason for revert: Failing Dawn into Chromium roll due to failed ASSERT
https://ci.chromium.org/p/chromium/builders/try/dawn-linux-x64-deps-rel/3514
Original change's description:
> Implement readonly storage buffer - validation at API side
>
> This patch adds validation code for API side for readonly storage
> buffer. It also adds unit tests for API validation.
>
> BUG=dawn:180
>
> Change-Id: I9a97c5f3aa23e720619d138ca55d7b17f08d64c9
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12620
> Reviewed-by: Austin Eng <enga@chromium.org>
> Commit-Queue: Yunchao He <yunchao.he@intel.com>
TBR=cwallez@chromium.org,kainino@chromium.org,yunchao.he@intel.com,enga@chromium.org
Change-Id: I64e5dfd40e7aab982d97fb48544180bc9b8ea558
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: dawn:180
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12981
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
This patch adds validation code for API side for readonly storage
buffer. It also adds unit tests for API validation.
BUG=dawn:180
Change-Id: I9a97c5f3aa23e720619d138ca55d7b17f08d64c9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12620
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Yunchao He <yunchao.he@intel.com>
Roll third_party/SPIRV-Tools/ e8c3f9b0b..618ee5094 (15 commits)
e8c3f9b0b4..618ee50942
$ git log e8c3f9b0b..618ee5094 --date=short --no-merges --format='%ad %ae %s'
2019-10-30 dneto Fix some clang-tidy issues in graphics_robust_access_pass (#2998)
2019-10-30 stevenperron Add description of wrap-opkill. (#3000)
2019-10-30 kubak [opt] Do not compare optimized binary with an invalidated buffer (#2999)
2019-10-29 bclayton utils/vscode: Change assembly file ext to .spvasm (#2995)
2019-10-28 bclayton utils: Add a vscode extension for SPIR-V disassembly files (#2987)
2019-10-28 greg Add two new simplifications. (#2984)
2019-10-28 afdx spirv-fuzz: Transformation to extract from a composite object (#2991)
2019-10-27 afdx spirv-fuzz: rename class, and fix bug related to dominance (#2990)
2019-10-25 afdx spirv-fuzz: Rework management of data synonyms (#2989)
2019-10-25 afdx spirv-fuzz: add class to represent equivalence relation (#2988)
2019-10-23 stevenperron Update DEPS (#2986)
2019-10-22 afdx spirv-fuzz: fuzzer pass to adjust memory access operands (#2968)
2019-10-22 greg Instrument: Add missing def-use analysis. (#2985)
2019-10-22 afdx spirv-fuzz: add missing functionality for matrix composites (#2974)
2019-10-21 stevenperron Update CHANGES
Roll third_party/glslang/ 834ee546f..b131630e7 (16 commits)
834ee546f9..b131630e7c
$ git log 834ee546f..b131630e7 --date=short --no-merges --format='%ad %ae %s'
2019-10-24 greg Update spirv-tools known good.
2019-10-23 ehsannas Make buildbot licenses consistent with the rest of the code
2019-10-23 52076061+digit-google BUILD.gn: Fix fuchsia build (#1944)
2019-10-21 cepheus Web: Reclaim more space and make all work w/wo GLSLANG_WEB.
2019-10-18 cepheus Web: Add basic atomics for SSBOs.
2019-10-17 cepheus Web: Add SSBOs and a few other missing compute features.
2019-10-10 cepheus Web: Add compute stage.
2019-10-08 cepheus Web: Add separate texture/sampler, exclude *CubeArray*.
2019-10-22 47668180+tsuoranta Enable generation of compile_commands.json (#1938)
2019-10-21 dexcelstraun7 Fix the exports of glslang-default-resource-limits (#1942)
2019-10-18 ehsannas Run tests on Windows too.
2019-10-18 ehsannas Fix build scripts.
2019-10-18 ehsannas More cleanups for Windows.
2019-10-17 ehsannas Add Kokoro bots for building using Bazel.
2019-10-17 ehsannas Make it work on Windows.
2019-10-16 ehsannas Add Bazel build configuration files.
Roll third_party/shaderc/ c4835b852..0a260d789 (5 commits)
c4835b8523..0a260d789f
$ git log c4835b852..0a260d789 --date=short --no-merges --format='%ad %ae %s'
2019-10-30 rharrison Refactor file reading code into common utility method (#852)
2019-10-30 rharrison Rolling 5 dependencies & expectation files (#849)
2019-10-22 dneto Android.mk: Install all necessary headers (#846)
2019-10-22 9856269+sarahM0 spvc: add spvc parsing option to msl, glsl and vulkan compilers (#845)
2019-10-21 rharrison Rolling 4 dependencies, small script fix and updating expectation files (#844)
Roll third_party/spirv-cross/ ff1897ae0..00189b19a (90 commits)
ff1897ae0e..00189b19a5
$ git log ff1897ae0..00189b19a --date=short --no-merges --format='%ad %ae %s'
2019-10-29 post MSL: Add missing reference output.
2019-10-29 post Fix broken access tracking for OpFunctionCall results.
2019-10-28 post MSL: Avoid some fallthrough warnings.
2019-10-28 post Run format_all.sh.
2019-10-28 post MSL: Remove hacky workaround for patch constant passing.
2019-10-28 post MSL: Remove workaround for passing constant arrays to functions.
2019-10-28 post Remove another dead reference file.
2019-10-28 post Remove some more dead reference files.
2019-10-28 post Remove another dead reference file.
2019-10-28 post Remove dead reference file.
2019-10-28 post Hack some constants in UE4 tests.
2019-10-28 post MSL: Ensure stable output for access chain CFG workarounds.
2019-10-26 post MSL: Fix integer cast.
2019-10-26 post MSL: Declare arrays with proper type wrapper.
2019-10-26 post MSL: Deal with chained access chains for tessellation IO variables.
2019-10-26 post MSL: Declare struct type explicitly.
2019-10-26 post MSL: Fix array of array declaration.
2019-10-25 post MSL: Rewrite tessellation_access_chain.
2019-10-25 post MSL: Slight cleanup in emit_tessellation_access_chain.
2019-10-25 post MSL: Do not declare variables which will not be unflattened.
2019-10-25 post MSL: Report tess input array failures more accurately.
2019-10-25 post MSL: Revert hack with kBufferSizeBufferBinding
2019-10-25 post MSL: Remove stale code for TextureSwizzle.
2019-10-24 post GLSL: Minor nit, check flushed_phi_variables with count().
2019-10-24 post Clean up call to builtin_translates_to_nonarray.
2019-10-24 post Implement constant empty struct correctly on all backends.
2019-10-24 post MSL: Rewrite propagated depth comparison state handling.
2019-10-24 post MSL: Do read-only lookups of access_chain_children.
2019-10-24 post MSL: Remove stray allow_id_rewrite().
2019-10-24 post MSL: Do not declare array of UBO/SSBO as spvUnsafeArray<T>.
2019-10-24 bill.hollings MSL: Support option for treating 1D textures as 2D textures of height 1.
2019-10-24 bill.hollings MSL: Support option for treating 1D textures as 2D textures of height 1.
2019-10-24 post MSL: Enable proper value types for return and value-passing of arrays.
2019-10-24 post MSL: Be a little clearer how needs_base_vertex_idx is implemented.
2019-10-24 post MSL: Remove some dead code w.r.t. vertex/instance_idx.
2019-10-24 post MSL: Do not generate UnsafeArray<> for any array inside buffer objects.
2019-10-24 post MSL: Simplify framebuffer fetch implementation.
2019-10-24 post MSL: Fall back to GLSL path for non-invariant matrix multiply as well.
2019-10-24 post MSL: Fall back to GLSL path for non-invariant FP implementation.
2019-10-24 post MSL: Minor cleanups for texture atomic emulation.
2019-10-24 post MSL: Cleanup decoration forwarding for SampleMask.
2019-10-24 post MSL: Do not declare complex composite array in main for non-inlined.
2019-10-24 post Fix formatting in main.cpp.
2019-10-24 post Add new UE4 folders to CMake testing as well.
2019-10-23 lukas.hermanns Moved all UE4 test shaders into 'shaders-ue4/' folder.
2019-10-23 lukas.hermanns Removed 'argument_buffer_offset' and fixed packed matrix Metal output.
2019-10-22 lukas.hermanns Simplified overriding of 'access_chain_internal' function in CompilerMSL.
2019-10-21 lukas.hermanns Removed bounds checks in favor of SPIRV-Tools pass '--graphics-robust-access'
2019-10-09 lukas.hermanns Disabled spvUnsafeArray<> type for packed vectors and added test cases for those arrays.
2019-10-09 lukas.hermanns Added '--msl-invariant-float-math' option and new test case for it.
2019-09-27 lukas.hermanns Further updates for pull request #1162; also added two test cases for spvCubemapTo2DArrayFace function and added '--msl-framebuffer-fetch'/ '--msl-emulate-cube-array' compiler options.
2019-09-24 lukas.hermanns Update for pull request #1162 rev. 1
2019-09-23 lukas.hermanns Updates for pull request #1162
2019-09-19 lukas.hermanns Fixed false-positive optimization of builtin variables (may happen when 'spvOut' is emitted).
2019-09-18 lukas.hermanns Updated test shaders.
2019-09-18 lukas.hermanns Rearranged all 'UE Change' comments to match to project's coding style.
2019-09-17 lukas.hermanns Removed reference specifiers in 'spvFMul*' functions to avoid address specifiers.
2019-09-17 lukas.hermanns Updated reference Metal shaders.
2019-09-17 lukas.hermanns Avoid emitting 'spvUnsafeArray<>', 'spvFMul*', and 'spvFAdd' custom functions if they are not needed.
2019-09-17 lukas.hermanns Further adjustments to make Metal backend work again in UE4 on Mac.
2019-09-16 lukas.hermanns Renamed new test shaders to fit the naming convention in SPIRV-Cross.
2019-09-13 lukas.hermanns Added a new 'emulate_cube_array' option to SPIRV-Cross to cope with translating TextureCubeArray into texture2d_array for iOS where this type is not available. (Original Author: Mark Satterthwaite)
2019-09-13 lukas.hermanns Removed all '.DS_Store' files.
2019-09-13 lukas.hermanns Adjustments after rebase of ue4_dev branch.
2019-08-26 mark.satterthwaite OpImageTexelPointer needs to use an int coordinate type for GLSL, but not for MSL.
2019-08-26 mark.satterthwaite Remove obsolete memory barrier scope specification from Metal output, this API has been removed.
2019-08-14 mark.satterthwaite Add an option to SPIRV-Cross to enforce invariant floating point math to prevent different depth calculation between prepass & basepass when running on Metal 2.0 and earlier.
2019-08-14 mark.satterthwaite More fixes to handling packing & access elements in an array. Made in two parts. 1. Don't allow AccessChain operations to add duplicated swizzles when accessing packed arrays. 2. Only pack arrays when there is the proper amount of space between members in a struct, otherwise it will definitely be wrong.
2019-08-14 mark.satterthwaite Update the Metal shaders to account for changes in the shader compilation.
2019-08-14 mark.satterthwaite Fix texture swizzling.
2019-08-14 mark.satterthwaite The result of an AccessChain intrinsic in SPIRV can be referenced by multiple blocks but when they are loops that can result in compilation problems because the source variables might not be declared early enough. This forces us to hoist those variables high enough to make it work.
2019-08-14 mark.satterthwaite There are occasions where phi-variable copies are introduced for original variables which are fully declared, which coud result in the phi-variable never being declared and the shader not compiling, so declare the phi-variables when this happens. Change made in two parts. 1. Ensure that we declare phi-variable copies even if the original declaration isn't deferred. 2. Only flush phi variables once, avoids duplicate definitions.
2019-08-14 mark.satterthwaite When converting from HLSL the dxc SPIRV output often contains variables that are written through (e.g. a = b = c;) which seems to break the tracking of expressions in SPIRV-Cross, so don't reset everything once configured.
2019-08-14 mark.satterthwaite Provide the Metal bindings as part of the options structure as that is more convenient.
2019-08-14 mark.satterthwaite Slight modifications to IAB support for Metal output, so that the caller can specify an offset for the IAB start index, as for HLSL shaders UAVs need to occupy slots 0-7. The runtime support for SSBO robustness is also much simpler if the buffer size block is at index 0. Change made in two parts. 1. Allow the caller to specify the Metal translation should use argument buffers. 2. Move this to the front of IABs for convenience of the runtime.
2019-08-14 mark.satterthwaite Metal doesn't automatically enforce robust access to buffers unlike other APIs, so for storage-buffers, which become raw T* buffers in Metal, we need to fetch the buffer size and clamp the access to a valid index within the buffer ourselves. This is essential for shaders converted from HLSL which expects all resource access to be robust, though this implementation is technically different to the HLSL specification of return-0 for OOB reads, ignore OOB writes.
2019-08-14 mark.satterthwaite HLSL makes position calculations invariant by default to eliminate problems with depth-precision, Apple added a similar qualifier for Metal 2.1 that can and should be used in Vertex & Domain/TessEval shaders for the same effect.
2019-08-14 mark.satterthwaite When compiling from HLSL which pads and aligns float[]/float2[] within structures to float4[] we need to unpack the original type in Metal from the float4.
2019-08-14 mark.satterthwaite Fix conversion of the SampleMask intrinsic from SPIRV, where it is an array to Metal where it isn't.
2019-08-14 mark.satterthwaite Fixes to the generation of Metal tessellation shaders from SPIRV so that it works correctly in more complicated cases. First, when generating from HLSL before invoking the code that comes from the HLSL patch-function a control-flow and full memory-barrier are required to ensure that all the temporary values in thread-local storage for the patch are available. Second, the inputs to control and evaluation shaders must be properly forwarded from the global variables in SPIRV to the member variables in the relevant input structure. Finally when arrays of interpolators are used for input or output we need to add an extra level of array indirection because Metal works at a different granularity than SPIRV.
2019-08-14 mark.satterthwaite Work-around HLSL using zero-based InstanceID and VertexID variables, but SPIRV, like Metal, includes BaseInstance & BaseVertex. Until this can be fixed in DXC, which is really the proper place to solve this, we can decrement InstanceID & VertexID when the source is HLSL. Made in two parts. 1. Handle HLSL-style 0-based vertex/instance index. 2. We zero-base the InstanceID & VertexID variables for HLSL emulation elsewhere, so don't do it twice.
2019-08-14 mark.satterthwaite On iOS sub-passes can be implemented using the frame-buffer fetch API which is much more efficient than binding the textures. Change was made in three parts. 1. Use Metal's native frame-buffer fetch API for subpass inputs. 2. Make sure that frame-buffer-fetch is only available on iOS. 3. Default to using Metal's native frame-buffer fetch for subpass inputs on iOS.
2019-08-14 mark.satterthwaite SPIRV doesn't distinguish depth textures from regular textures, but Metal does, so if we've ever seen a depth comparison operation we must ensure that the texture is specified as a depth-texture.
2019-08-14 mark.satterthwaite Emulate texture atomics in Metal by binding the underlying buffer that backs the resource to a separate binding point and using that for Metal's atomic operations. This will work with texture_buffer and texture2d created from an MTLBuffer, so is perfect for emulating HLSL atomics on RWBuffer and sufficient, but not ideal, for RWTexture2D with some restrictions (limited format support and can't be used for render-targets).
2019-08-14 mark.satterthwaite Support Metal 2.1's texture_buffer type which is the equivalent to HLSL's Buffer/RWBuffer, so doesn't require modifying buffer sizes to match alignments.
2019-08-13 mark.satterthwaite In order to use Metal shader libraries properly you have to ensure that you have no duplicated global symbol names for different entities, otherwise 'metallib' won't be able to combine multiple shaders into a single library. This is broken into two parts. 1. Constant arrays of non-primitive types (i.e. matrices) won't link properly into Metal libraries. 2. Metal helper functions must be static force-inline otherwise they will cause problems when linked together in a single Metallib.
2019-08-13 mark.satterthwaite Rework the way arrays are handled in Metal to remove the array copies as they are unnecessary from Metal 1.2. There were cases where copies were not being inserted and others appeared unncessary, using the template type should allow the 'metal' compiler to do the best possible optimisation. The changes are broken into three stages. 1. Allow Metal to use the array<T> template to make arrays a value type. 2. Force the use of C style array declaration for some cases which cannot be wrapped with a template. 3. Threadgroup arrays can't have a wrapper type. 4. Tweak the code to use unsafe_array in a few more places so that we can handle passing arrays of resources into the shader and then through shaders into sub-functions. 5. Handle packed matrix types inside arrays within structs. 6. Make sure that builtin arguments still retain their array qualifiers when used in leaf functions. 7. Fix declaration of array-of-array constants for Metal so we can use the array<T> template.
2019-08-13 mark.satterthwaite UE4 shader reference for those shaders that will compile without the changes.
2019-08-13 mark.satterthwaite Port the UE4 spirv shaders to ASM shaders that can be used in the test-rig - this will help show why the changes are required.
2019-08-13 mark.satterthwaite Many interesting test cases for SPIRV-Cross taken from compiling UE4 shaders. These highlight the reasons for the various changes we've made.
Created with:
roll-dep third_party/SPIRV-Tools third_party/glslang third_party/shaderc third_party/spirv-cross third_party/spirv-headers
Change-Id: I2a8721a29f71e50b617792cb5c898452617ed362
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12940
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
We have already been validating the component type of a texture matches
the bind group layout. Here is another constraint introduced by
https://github.com/gpuweb/gpuweb/pull/384. For better code reuse,
conversion from wgpu::TextureComponentType to dawn_native::Format::Type
is factored out as a helper function.
Bug: dawn:202
Change-Id: I394497722b4043dc109eca60116224b7a617e02e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12860
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
These tests draw a simple triangle with many ways of encoding commands,
binding, and uploading data to the GPU. This tests the performance of Dawn's
validation, command recording, and submission by switching buffer
bindings, bind groups, and pipelines. Some test instantiations upload
per-draw data to test efficiency of resource transitions or pre-record
commands in a render bundle.
Change-Id: I9994cd96ef5988cca410462418792f28161c0526
Bug: dawn:208
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12460
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This CL reads trace events from the tests and computes the total
time of validation and command recording.
Bug: dawn:208
Change-Id: I551d1e30e60b7d1a839b4fb834ad3608c6cedf63
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12782
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>