Commit Graph

9013 Commits

Author SHA1 Message Date
João Capucho
647dd76dba Moved the ConstantSolver to the glsl frontend 2021-02-06 00:25:30 -05:00
João Capucho
88eee833d7 Add binary op support for the ConstantSolver 2021-02-06 00:25:30 -05:00
bors[bot]
21f0e66074 [rs] Merge #745
745: Bump wgpu-core r=kvark a=Imberflur

For the fix of this issue https://github.com/gfx-rs/wgpu/issues/1188

Co-authored-by: Imbris <imbrisf@gmail.com>
2021-02-06 05:16:11 +00:00
Imbris
b1e535d2b7 [rs] Bump wgpu-core 2021-02-05 22:02:48 -05:00
Dzmitry Malyshau
b1fa7471d2 Basic image query support in SPV and WGSL frontends 2021-02-05 15:26:45 -05:00
Dzmitry Malyshau
50f0ad6249 Image queries 2021-02-05 15:26:45 -05:00
Dzmitry Malyshau
c496c05ba4 Makefile commands for native shader validation 2021-02-05 14:04:02 -05:00
Dzmitry Malyshau
f9eb133370 [rs] Experimental ReadBuffer structure 2021-02-05 12:59:49 -05:00
Dzmitry Malyshau
ac27a1abaa Don't break upon a void function in the typifier 2021-02-05 10:08:34 -05:00
bors[bot]
3ebe198911 Merge #1198
1198: Fix command allocator race condition with maintenance r=kvark a=kvark

**Connections**
Fixes #1196

**Description**
This was a recent change, where I thought it would be more pure to just prepare the pool but not create anything right away. It looked more elegant, but now we see it was flowed.

**Testing**
Not really tested the concurrent aspect of it, but it should work.
Perhaps, we can hook up Loom in the future for this task?

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-02-05 05:59:16 +00:00
Dzmitry Malyshau
e357e3083a Fix command allocator race condition with maintenance 2021-02-05 00:57:18 -05:00
bors[bot]
c513bb03a6 Merge #1194
1194: Isolate binding compatibility logic into a separate module r=cwfitzgerald a=kvark

**Connections**
Fixes #1188 

**Description**
The actual problem was the following: when a pipeline changed, we used to go through the binding entries and re-bind only those that *became* compatible. However, we were missing ones that were already compatible, but were not activated because they were behind some previously incompatible ones.

So it's not a very complex fix. However, working with the binding code had me concerned that it wasn't isolated enough. It got quite a few issues discovered in it over the time, which only proven the point that it was way too fragile. So I took this opportunity to bring us closer to the world I want wgpu to be in: the world of semi-independent testable components.

This PR makes the binding compatibility checker one of these components. It's fully isolated, has unit tests, fairly straightforward to reason about, and integrates nicely with the render pass logic (without too many generics!). It's more profitable in the long run, I think, to build this kind of architecture versus integration-testing the thing (even at `wgpu` playtest level).

There is less magic overall now: no binding iterator, no fancy chaining, no complex matching. The logic is straightforward, hopefully. And the 40 LOC saved is a good indication of it.

**Testing**
Tested on wgpu-rs examples.


Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-02-05 02:29:45 +00:00
Dzmitry Malyshau
f563b5810b [spv-in] support OpImage, OpImageFetch, OpLogicalOr, OpLogicalAnd, relational functions, and fix OpUndef 2021-02-04 09:49:40 -05:00
Dzmitry Malyshau
423ccc2074 [spv-in] parse OpConstantNull and OpUndef 2021-02-04 09:49:40 -05:00
Dzmitry Malyshau
0970ef0ea5 [spv-in] derive the block status of a structure from its members 2021-02-04 09:49:40 -05:00
Dzmitry Malyshau
262d0c6dfc Isolate binding compatibility logic into a separate module 2021-02-04 01:16:40 -05:00
tfgast
71fdaedcec FragDepth is a Write Property
FragDepth is written to in a fragment shader, not read.
2021-02-03 22:29:42 -05:00
Andreas Reich
52aee1a037 Better error output for player test 2021-02-03 23:44:50 +01:00
Andreas Reich
5e488d4fea Added player test with compute shader reading & writing an uninitialized buffer 2021-02-03 23:44:42 +01:00
João Capucho
bb88aac937 Add matrix access to ConstantSolver 2021-02-02 11:17:34 -05:00
João Capucho
fcbf2aa4c4 Add support for unary ops to the constant solver
Fix wrong result when casting to bool
Add tests
2021-02-02 11:17:34 -05:00
João Capucho
53bd721895 Add support for casts in constant expressions 2021-02-02 11:17:34 -05:00
João Capucho
68bbf00249 Added support for initalizers and constants 2021-02-02 11:17:34 -05:00
Dzmitry Malyshau
e05baa2889 [spv] put NonWritable on buffer variable itself (#405) 2021-02-01 20:17:50 -05:00
bors[bot]
780637eec0 Merge #1187
1187: validate for strip_index_format being used with non-strip topology r=kvark a=Wumpf

**Description**
Hit lack of this validation when porting a project to newest wgpu-rs: Accidentally set the strip_index_format for a TriangleList pipeline which left me with a Vulkan validation error (since wgpu decides to set `restart_index` in presence of a `strip_index_format`)

```
VALIDATION [VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428 (-1077750125)] : Validation Error: [ VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428 ] Object 0: handle = 0x1ebbfa512a8, type = VK_OBJECT_TYPE_DEVICE; | MessageID 
= 0xbfc2d693 | vkCreateGraphicsPipelines() pCreateInfo[0]: topology is VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST and primitiveRestartEnable is VK_TRUE. It is invalid. The Vulkan spec states: If topology is VK_PRIMITIVE_TOPOLOGY_POINT_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, primitiveRestartEnable must be VK_FALSE (https://vulkan.lunarg.com/doc/view/1.2.141.0/windows/1.2-extensions/vkspec.html#VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428)
    object info: (type: DEVICE, hndl: 2112044208808)
```

(arguably wgpu could be more clever about this and just not set `restart_index`, but that leaves the user code in a non-sense state)

**Testing**
One-off test triggering the error through wgpu-rs.

Co-authored-by: Andreas Reich <r_andreas2@web.de>
2021-02-01 21:12:19 +00:00
Andreas Reich
9dd88cb338 validate for strip_index_format being used with non-strip topology 2021-02-01 21:46:24 +01:00
Dzmitry Malyshau
5def021b6e [spv] replace the internal type inferrence with the typifier (#403)
Also, fix the Typifier's handling of logical operations.
See https://github.com/gfx-rs/naga/pull/404 for v0.3 branch.
2021-02-01 09:33:28 -05:00
bors[bot]
aea2af588c Merge #1183
1183: Improve docs language r=cwfitzgerald a=danielzgtg

**Description**

- s/fact culling/face culling/g
- s/are draw /are drawn /g

**Testing**

- There are no code change.
- The documentation should be less confusing


Co-authored-by: Daniel Tang <danielzgtg.opensource@gmail.com>
2021-02-01 08:13:20 +00:00
bors[bot]
e15eefc718 Merge #1185
1185: [master] Fix Readme Date r=trivial a=cwfitzgerald

Port #1184 to master

Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2021-02-01 07:46:17 +00:00
Connor Fitzgerald
c43bfaf8e0 Fix readme date 2021-02-01 02:45:31 -05:00
Daniel Tang
07a2c9a712 Improve docs language 2021-02-01 02:19:32 -05:00
bors[bot]
75cbc46d6e [rs] Merge #738
738: Update version and dependencies to gfx-9 r=kvark a=kvark



Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-02-01 07:17:07 +00:00
Dzmitry Malyshau
9755a464ae [rs] Update version and dependencies to gfx-9 2021-02-01 02:16:31 -05:00
bors[bot]
7c7501cab7 Merge #1182
1182: Update all versions r=kvark a=kvark

**Connections**
Picks up https://github.com/gfx-rs/gfx/pull/3620 and a bunch of other fixes in gfx-rs and naga.

**Description**
Updates the dependencies ("gfx-9" naga train) as well as self version to 0.7, to match the v0.7 branch.

**Testing**
Should just work :)

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2021-02-01 05:37:39 +00:00
Dzmitry Malyshau
8ed543f26a Update all versions 2021-02-01 00:35:40 -05:00
Lain-dono
6ff725d89a [spv-out] Add missing math functions (#401)
* [spv-out] Add missing builtins

* [spv-out] remove a non-existent integer version of mix
2021-02-01 00:28:17 -05:00
Lain-dono
208346fad6 [spv-out] implement discard 2021-01-31 23:39:45 -05:00
bors[bot]
da8d17d8d3 Merge #1159
1159: Zero initialize buffers r=kvark a=Wumpf

**Connections**
First half of  #563, focusing solely on buffers and ignoring same issue for textures

**Description**
Tracks for each buffer which parts are initialized (i.e. set to zero). Identified three interaction points for this:
* buffer mapping: Zeroing out ad-hoc and marking as initialized
* queue write to buffer: Marks target buffer regions as initialized (i.e. optimizes away buffer init down the line)
* use in binding or copy operation in a command buffer:
   * fine grained tracking of regions that may require init (or will be initialized implicitly) on each command buffer
   * set in motion on queue submit, init is exclusively with `fill_buffer`

Todo list for Ready-to-Review

- [x] memory barriers for `fill_buffer` calls
- [x] better data structure for `memory_init_tracker`
- [x] coarse filtering on command-buffer buffer init requirements (the list should almost always be empty whereas now it pushes any buffer use)
- [x] improve naming of things
- [x] at least pretend this is adequately tested

Todo list beyond this PR

* make data structures usable for textures
  * and.. well.. implement all this for textures!
* explore reusing barrier tracker for memory init tracking?


**Testing**

* Some basic testing by doing some changes to wgpu-rs samples and watching them in in the debugger.
* Added a ron test file for the player (love those!) to poke the feature a little bit
* MemoryInitTracker comes with simple unit tests

Overall this is a bit shallow but as so often in this area accurate testing is hard because the outcomes are quite indirect



Co-authored-by: Andreas Reich <r_andreas2@web.de>
2021-02-01 03:17:36 +00:00
João Capucho
c12003f564 Populate ResolveContext with functions
Add support for more math functions
2021-01-31 21:21:51 -05:00
João Capucho
daf18642d7 Add support for hexadecimal literals 2021-01-31 21:20:59 -05:00
João Capucho
df3759ebff Fix double constant lexing and lex uint constants 2021-01-31 21:20:59 -05:00
Jay Oster
9f88c3e986 Update emoji in README 2021-01-31 21:19:18 -05:00
Dzmitry Malyshau
537a516ff5 Version bump to 0.3.1 naga-v0.3.1 2021-01-31 18:27:08 -05:00
Dzmitry Malyshau
6138e4ddd3 [spv] fix block decoration on nested structs 2021-01-31 18:27:08 -05:00
Dzmitry Malyshau
4a3ecc774f [wgsl] remove function and constant lookup maps 2021-01-31 18:27:08 -05:00
Dzmitry Malyshau
cb36c642ea [wgsl] refactor constants processing, add support for array sizes 2021-01-31 18:27:08 -05:00
Dzmitry Malyshau
7c6835bdbc [spv] fix support for fixed-size array, refactor constant writes 2021-01-31 18:27:08 -05:00
Dzmitry Malyshau
1ec4c2b0d0 [spv] implement NonReadable/NonWritable decorations 2021-01-31 18:27:08 -05:00
Dzmitry Malyshau
15b629b750 [spv] put ColMajor on the struct member 2021-01-31 18:27:08 -05:00
Andreas Reich
822424e519 Fix buffer init in bundle.rs with mem::size_of::<wgt::DrawIndirectArgs> 2021-01-31 22:01:52 +01:00