Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>2021-01-28 03:38:38 +0300
committerGitHub <noreply@github.com>2021-01-28 03:38:38 +0300
commitb812fd634ea5ff307c374fb2b6340169f7db8b16 (patch)
treeb398ef072d90ac79765bca23f6000b89627513aa /tools
parentcc81f53d3d6146638b302694d319a580e4d88f70 (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.cpp6
-rw-r--r--tools/val/val.cpp3
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")) {