Commit Graph

298 Commits

Author SHA1 Message Date
alan-baker
8129cf2f99
Remove merge assert in block calculation (#2489)
Fixes #2488

* Validator doesn't identify back-edge of the loop, so the merge is
never set
* Construct::blocks() has safe uses of `merge` so the assert can be
removed
* Added a test
2019-04-02 14:37:05 -04:00
alan-baker
320a7de5c9
Validate that OpUnreacahble is not statically reachable (#2473)
* Adds a validator check that ensures no block reachable from the entry
block is terminated by OpUnreachable
* Updated tests
* Added new tests
2019-03-29 10:49:37 -04:00
Ryan Harrison
ffbecae56a
Check OpSampledImage is only passed into valid instructions (#2467)
Fixes #1528
2019-03-25 15:44:57 -04:00
Ryan Harrison
08b54d9e45
Convert sampled consumers to being Instructions instead of IDs (#2464)
Changing the stored value for a sampled image consumer to be the
instruction instead of result ID, since not all instructions have
result IDs. Using result IDs led to a potential crash when using
OpReturnValue, which doesn't have a result ID. OpReturnValue is not a
legal consumer, but the validator needs to look at the instruction to
determine this, thus storing the pointer to the instruction, instead
of trying to fetch the pointer using the instruction.

Issue #1528 covers fixing the check.

Fixes #2463
2019-03-19 12:39:37 -04:00
Alan Baker
9244e6ff62 Reverting commit da5a780ff9 2019-03-18 15:14:41 -04:00
SarahM0
da5a780ff9 Variable pointers cannot be an operand to OpArrayLength 2019-03-18 14:07:36 -04:00
alan-baker
bdcb155163
Relax function call parameter check (#2448)
Fixes #2447

* Allow sub-objects for UniformConstant storage class
* Updated tests
2019-03-14 12:45:31 -04:00
Ryan Harrison
6df8a917a4
Add validation of storage classes for WebGPU (#2446)
Fixes #2445
2019-03-13 13:01:25 -04:00
Jaebaek Seo
a5c06c903c
Validator: no Storage comparison for pointer param (#2428)
If relax-logical-pointer is enabled, this commit makes Validator
accept function param even when its Storage Class is different from
the expected one.

Related to #2423, #2430
2019-03-13 12:25:24 -04:00
Ryan Harrison
b75f4362f0
Add validation for ExecutionMode in WebGPU (#2443)
Fixes #2437
2019-03-12 14:50:25 -04:00
Ryan Harrison
b1ff15f220
Add missing DepthGreater case to Fragment only check (#2440)
Fixes #2439
2019-03-12 11:27:40 -04:00
Ryan Harrison
b12e7338ee
Implement WebGPU specific CFG validation (#2386)
In WebGPU all blocks are required to be reachable, unless they are one of two
specific degenerate cases for merge-block or continue-target. This PR adds in
checking for these conditions.

Fixes #2068
2019-03-08 13:01:09 -05:00
Ehsan
5fb83a9708
Allow NonWritable to target struct members. (#2420)
It should be allowed for the NonWritable decoration to be applied to
structure type members.
2019-02-27 16:11:50 -05:00
Jeff Bolz
002ef361ca Add validation for SPV_NV_cooperative_matrix (#2404) 2019-02-25 17:43:11 -05:00
Sarah
fc3897b5f5
Validate: (data) Block can't appear within a Block (#2410)
A Block or BufferBlock cannot be nested within another Block or BufferBlock
2019-02-25 10:37:43 -05:00
Steven Perron
a006cbc1d0
Non memory object as parameters. (#2415)
In relaxed addressing mode, we want to accept non memory objects
because this is a very natural translation of hlsl.  It should be fixed
by legalization by inlining the calls.
2019-02-22 12:51:22 -05:00
Sarah
4c43afcade
It is invalid to apply both Restrict and Aliased to the same <id> (#2408)
to fix #2408 - It is invalid to apply both Restrict and Aliased to the same
2019-02-21 12:03:52 -05:00
Sarah
76730a46a1
In Vulkan, disallow BufferBlock on StorageBuffer variables (#2380)
To fix #2168.
2019-02-20 11:50:57 -05:00
Ryan Harrison
0167a20b0a
Move usage detection to after all instructions are registered (#2378)
This is required to properly handle uses of forward declared ids. Since forward
declared ids were not being properly covered by the validator this uncovered a
bunch of small issues that needed to be resolved to get tests passing again.

Fixes #2373
2019-02-13 14:06:56 -05:00
alan-baker
9b6ba4d1c5
Allow arrayed storage images for NonWritable decoration (#2358)
Fixes #2354

* Storage image pointer registration allows optional level of arraying
* Added a test
2019-02-06 15:20:19 -05:00
alan-baker
117a1fd11f
Validate variable pointer related function call rules (#2270)
Fixes #2105

* Check storage class validity
* Check memory object declaration validity
2019-02-06 14:10:40 -05:00
Ryan Harrison
846d12afed
Add whitelist for decorations in WebGPU (#2346)
Fixes #2273
2019-01-31 16:25:46 -05:00
Ryan Harrison
2acbf488b8
Add WebGPU specific validation for WorkgroupSize BuiltIn decoration (#2334)
Part of resolving #2276
2019-01-30 17:01:17 -05:00
Ryan Harrison
e2f4622627
Add WebGPU specific validation for multiple BuiltIn decorations (#2333)
Covers NumWorkgroups, LocalInvocationId & GlobalInvocationId

Part of resolving #2276
2019-01-30 17:00:58 -05:00
Ryan Harrison
3d2afb78c2
Add whitelist of allowed BuiltIn decorations for WebGPU (#2337)
Part of resolving #2276
2019-01-30 15:46:02 -05:00
Ryan Harrison
d17fcf8abd
Add WebGPU validation for LocalInvocationIndex BuiltIn decoration (#2335)
Part of resolving #2276
2019-01-30 15:45:31 -05:00
Ryan Harrison
837153ccdd
Add WebGPU specific validation for FragDepth BuiltIn decoration (#2332)
Part of resolving #2276
2019-01-30 15:27:04 -05:00
Ryan Harrison
0c14583f15
Add WebGPU specific validation for FragCoord BuiltIn decoration (#2331)
Part of resolving #2276
2019-01-30 14:53:43 -05:00
Ryan Harrison
b6698e0d83
Add WebGPU specific validation for FrontFacing BuiltIn decoration (#2330)
Part of resolving #2276
2019-01-30 14:48:43 -05:00
Ryan Harrison
734def1447
Add WebGPU specific validation for InstanceIndex BuiltIn decoration (#2329)
Part of resolving #2276
2019-01-30 14:20:55 -05:00
Ryan Harrison
b947ecfe79
Add WebGPU specific validation for VertexIndex BuiltIn decoration (#2328)
Part of resolving #2276
2019-01-30 12:22:30 -05:00
David Neto
7f3679a8b6
Validate NonWritable decoration (#2263)
Also permit NonWritable on members of structs used for UBO and SSBO.
(That seems inadvertently removed in recent revisions of the spec.)
2019-01-28 12:44:13 -08:00
alan-baker
cf011f9901 More layout check fixes (#2315)
* check array strides for multidimensional arrays
* check layouts of structs in arrays for multiple indices
* new tests
2019-01-24 14:24:31 -08:00
Steven Perron
e2279da714
Remove the static maps from CheckDecorationsCompatibility (#2327)
* Remove the static maps from CheckDecorationsCompatibility

There are a few data structures in the function
`CheckDecorationsCompatibility` that are allocated using `new` and their
address is stored in a static pointer.  This code pattern causes the
MSVC memory leak checker to say there is a memory leak.  Some people
are interested in keeping that clean.

To work around it, I have replaced them with either a function or an
array of POD types.  The array can be kept as a static directly because
it has a trivial destructor, and we don't have to worry about it being
destroyed too early.

Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/2317.
2019-01-24 14:50:58 -05:00
JasperNV
8915a7c8f1 spirv-val: Emit an error when an OpSwitch target is not an OpLabel (#2298)
Fixes #1628.

* spirv-val: Emit an error when an OpBranch target is not an OpLabel
2019-01-24 12:11:49 -05:00
Ryan Harrison
1e3c589a6d
Add WebGPU specific validation for Position BuiltIn decoration (#2309)
This CL adds in the specific checks required for WebGPU, enables
running the builtin checks for WebGPU, and refactors the existing
testing infrastructure to support testing the new checks.

This PR is part of resolving #2276
2019-01-24 12:08:25 -05:00
Ryan Harrison
b1be6763f6
Add helper for 'is Vulkan or WebGPU' (#2324)
Fixes #2323
2019-01-23 13:07:03 -05:00
David Neto
4a405eda53
Fix layout checks for nested struct in relaxed layout; and descriptor arrays (#2312)
* Fixed layout checks for nested structures

Fixes #2303

* Incoming offsets accumulate through nested structures

* Check layouts through arrays

* Perform layout checks in the presence of descriptor arrays (and
runtime arrays)

* Fix formatting
2019-01-22 15:15:24 -08:00
Ryan Harrison
3a3ad2ec50
Add utility to generate a logging string for a given environment (#2314)
Fixes #2313
2019-01-22 15:18:14 -05:00
Steven Perron
eab06d669e
Check forward reference in OpTypeArray. (#2307)
In a recent PR, we allowed a forward reference for the element type in
an array declaration.  However, we do not have other check to make sure
the forward reference is a pointer type first reference in
OpTypeForawrdPointer.  We add that check.

Fixes https://crbug.com/920074.
2019-01-21 12:10:25 -05:00
Ryan Harrison
7577415cc7
Add in WebGPU specific memory scope validation (#2288)
Fixes #2278
2019-01-17 10:39:35 -05:00
Ryan Harrison
b6150e5170
Add WebGPU specific RTA validation rules (#2287)
Fixes #2066
2019-01-17 10:39:12 -05:00
Ryan Harrison
cb27ffdcd8
Ensure that required storage classes have initializer for WebGPU (#2285)
Fixes #2279
2019-01-15 10:24:58 -05:00
Ryan Harrison
9d8534e329
Enforce rules for OpTypeRuntimeArray on Vulkan (#2191)
Fixes #1936
2019-01-14 16:44:44 -05:00
Ryan Harrison
68f2af9f7d
Removing unused const version of id_decorations (#2283)
Fixes #2282
2019-01-14 13:52:50 -05:00
Ryan Harrison
16a0da370b
Ensure that entry point names are unique for WebGPU (#2281)
Fixes #2275
2019-01-14 13:52:28 -05:00
David Neto
6958d11bc2
Validate decorations from SPV_KHR_no_integer_wrap (#2271)
Validates NoSignedWrap, NoUnsignedWrap.

We are permissive by allowing any extended instruction.
2019-01-09 10:36:17 -05:00
David Neto
df5bd2d05a
Permit UConvert spec-constant op for SPV_AMD_gpu_shader_int16 (#2264)
See https://github.com/KhronosGroup/glslang/issues/848
2019-01-08 19:00:18 -05:00
Jeff Bolz
5eab6df648 SPV_EXT_physical_storage_buffer (#2267) 2019-01-07 13:19:24 -05:00
David Neto
a87d3ce48e
Validate operation for OpSpecConstantOp (#2260) 2019-01-03 14:28:00 -05:00