diff options
author | Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> | 2021-01-28 03:38:38 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-28 03:38:38 +0300 |
commit | b812fd634ea5ff307c374fb2b6340169f7db8b16 (patch) | |
tree | b398ef072d90ac79765bca23f6000b89627513aa /tools | |
parent | cc81f53d3d6146638b302694d319a580e4d88f70 (diff) |
Validate SPV_KHR_workgroup_memory_explicit_layout (#4128)
* Validate SPV_KHR_workgroup_memory_explicit_layout
* Check if SPIR-V is at least 1.4 to use the extension.
* Check if either only Workgroup Blocks or only Workgroup non-Blocks
are used.
* Check that if more than one Workgroup Block is used, variables are
decorated with Aliased.
* Check layout decorations for Workgroup Blocks.
* Implicitly use main capability if the ...8BitAccess or
...16BitAccess are used.
* Allow 8-bit and 16-bit types when ...8BitAccess and ...16BitAccess
are used respectively.
* Update SPIRV-Headers dependency
Bump it to include SPV_KHR_workgroup_memory_explicit_layout.
* Add option to validate Workgroup blocks with scalar layout
Validate the equivalent of scalarBlockLayout for Workgroup storage
class Block variables from SPV_KHR_workgroup_memory_explicit_layout.
Add option to the API and command line tool.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/opt/opt.cpp | 6 | ||||
-rw-r--r-- | tools/val/val.cpp | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index e7e589989..6999b39a0 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -490,6 +490,10 @@ Options (in lexicographical order):)", avoid triggering those bugs. Current workarounds: Avoid OpUnreachable in loops.)"); printf(R"( + --workgroup-scalar-block-layout + Forwards this option to the validator. See the validator help + for details.)"); + printf(R"( --wrap-opkill Replaces all OpKill instructions in functions that can be called from a continue construct with a function call to a function @@ -741,6 +745,8 @@ OptStatus ParseFlags(int argc, const char** argv, validator_options->SetRelaxBlockLayout(true); } else if (0 == strcmp(cur_arg, "--scalar-block-layout")) { validator_options->SetScalarBlockLayout(true); + } else if (0 == strcmp(cur_arg, "--workgroup-scalar-block-layout")) { + validator_options->SetWorkgroupScalarBlockLayout(true); } else if (0 == strcmp(cur_arg, "--skip-block-layout")) { validator_options->SetSkipBlockLayout(true); } else if (0 == strcmp(cur_arg, "--relax-struct-store")) { diff --git a/tools/val/val.cpp b/tools/val/val.cpp index da63245a2..5450023a4 100644 --- a/tools/val/val.cpp +++ b/tools/val/val.cpp @@ -58,6 +58,7 @@ Options: uniform, storage buffer, and push constant layouts. Scalar layout rules are more permissive than relaxed block layout so in effect this will override the --relax-block-layout option. + --workgroup-scalar-block-layout Enable scalar block layout when checking Workgroup block layouts. --skip-block-layout Skip checking standard uniform/storage buffer layout. Overrides any --relax-block-layout or --scalar-block-layout option. --relax-struct-store Allow store from one struct type to a @@ -148,6 +149,8 @@ int main(int argc, char** argv) { options.SetUniformBufferStandardLayout(true); } else if (0 == strcmp(cur_arg, "--scalar-block-layout")) { options.SetScalarBlockLayout(true); + } else if (0 == strcmp(cur_arg, "--workgroup-scalar-block-layout")) { + options.SetWorkgroupScalarBlockLayout(true); } else if (0 == strcmp(cur_arg, "--skip-block-layout")) { options.SetSkipBlockLayout(true); } else if (0 == strcmp(cur_arg, "--relax-struct-store")) { |