Commit graph

879 commits

Author SHA1 Message Date
Raph Levien
98e0499b31
Merge pull request #207 from linebender/fix_query_pools
Don't reset query pool twice
2022-11-22 11:50:44 -05:00
Raph Levien
433327cb34 Don't reset query pool twice
When invoked in non robust memory mode (ie not using RenderDriver), both
the render_coarse and render_fine calls reset the query pool, which in
turn causes the fetch of the query pool to hang (in Vulkan).

This is not an issue in robust memory mode because there are two
different query pools, and both should indeed be reset.

This patch makes the second reset conditional on the query pool being
fresh.

Fixes an observed hang with the xilem prototype on Windows.
2022-11-21 21:43:03 -08:00
Elias Naur
18c0da02e5
Clarify licensing for WGSL shaders (#205)
As stated by the README, the intention is for the shaders to be
provided under the terms of the Unlicense in addition to the MIT
and Apache-2.0 licenses.

While here, add a self-contained UNLICENSE file to replace the
external reference to unlicense.org.
2022-11-19 16:45:42 +00:00
Chad Brokaw
de998220db
Merge pull request #203 from linebender/clip_checkpoint
Extend pipeline
2022-11-18 17:28:59 -05:00
Chad Brokaw
adc9811776 add clips and blends 2022-11-18 17:26:26 -05:00
Chad Brokaw
9adeaf3e82 format 2022-11-16 12:02:11 -05:00
Chad Brokaw
20f7b68514 finish gradient support 2022-11-16 10:49:38 -05:00
Raph Levien
ef3ed3c9d7 Checkpoint of clip and gradient work
This is a checkpoint of partly completed work. Much of the GPU side is done, very little of the CPU side.

For clips, the clip_els bindings (binding 6 of draw_leaf) are not added. Clip logic is missing from coarse. The overflow buffer is missing from fine, as is its size calculation in coarse (but it should work as long as the max depth fits within BLEND_STACK_SPLIT).

For gradients, the texture binding is missing (binding 6) is missing from fine, as is the infrastructure in engine to deal with texture resources, and of course porting over the logic to fill it.

The code is not tested, bugs may lurk.
2022-11-10 19:48:36 -08:00
Raph Levien
5bd3a3639f Fix precedence issue
Note that this is evidence in favor of https://github.com/gfx-rs/naga/issues/2098 - my code is actually wrong, and it was caught by trying to port it to run in Chrome Canary.
2022-11-08 19:30:47 -08:00
Chad Brokaw
c5dbf7612c
Merge pull request #200 from dfrg/pathfix
More robust path encoding
2022-11-08 11:33:47 -05:00
Chad Brokaw
b2d57872d9 remove redundant PathElement:: 2022-11-07 23:34:56 -05:00
Chad Brokaw
a9170c4330 prevent bad encoding with only move-tos 2022-11-07 23:26:51 -05:00
Chad Brokaw
373b027780 more robust path encoding 2022-11-07 23:08:10 -05:00
Raph Levien
494f523c41 Tiger!
Still one flaw, fat lines aren't expanded with strokes in path coarse rasterization. But that's a small visual ding, and can be fixed

That said, there is some really strange stuff going on in tile_alloc. It's using storage to do a uniform broadcast (the result of bump allocation for the workgroup), which is not great at all. It should be using workgroup storage, but on my mac it behaves as if the workgroup barrier is not in place. Investigating.
2022-11-04 21:41:37 -07:00
Raph Levien
17a74fb370 Almost rendering tiger
We cut'n'pasted the picosvg stuff, kinda ugly.

It renders a number of paths of the tiger. I think the gap might be in prefix sums.
2022-11-04 13:15:05 -07:00
Raph Levien
7ae5aa7491 Mostly working strokes
The fat line in coarse path rendering is not done, but when lines are thin that mostly looks ok. Onward to tiger!
2022-11-04 12:40:54 -07:00
Raph Levien
92d6b1188f Fix color
Get rgba order right in rendering, plus generate separated alpha for png. The latter is just for debugging, we won't generally use separated alpha.
2022-11-04 09:25:06 -07:00
Raph Levien
c3d81e0985 Mostly working path rendering
It draws multiple paths and applies affine transformations.

One problem: RGBA writing is byte-reversed and premultiplied.
2022-11-04 08:59:23 -07:00
Raph Levien
06fa3cb9ab Checkpoint
Felt like checkpointing what I have before trying to run the pipeline. Theoretically everything should work.
2022-11-03 19:37:38 -07:00
Raph Levien
5851ef1417 Shaders loaded
This checkpoint loads the shaders for full rendering, but there's a bunch of stuff still needing to be done.
2022-11-03 16:53:34 -07:00
Raph Levien
7ac327c684 Unify scene buffer
All streams of the scene are combined into a single buffer. This is very much like existing piet-gpu, however the various outputs from the compute stages (whether computed on CPU or GPU) will retain their separate bindings, which is more native to WGSL.

There's a touch of ergonomics loss, in particular when we do transforms we'll need to unmarshal them by hand, but I think overall not too bad.
2022-11-02 18:07:32 -07:00
Raph Levien
5c6ec1efa3 Checkpoint
Many shader stages written.
2022-11-01 16:20:15 -07:00
Raph Levien
40416fd2ea Another checkpoint 2022-11-01 13:55:58 -07:00
Raph Levien
06ec395b68 Checkpoint coarse rasterization
The bones of coarse rasterization are in place (so far, fills only). Still not suitable for end-to-end (need to generate bounding boxes, among other things), but getting closer.
2022-11-01 13:55:58 -07:00
Raph Levien
b6da6d958b Write more shaders
This is super WIP, but represents partially written shaders for more of
the piet-gpu pipeline. Checkpointing as other work is incoming.
2022-11-01 13:55:58 -07:00
Daniel McNab
1b84071d33
WGSL: Allow imports anywhere (#196)
This means we support imports not at the start of a line.
2022-11-01 20:41:47 +00:00
Daniel McNab
3831b58dea Prepare for wgsl-analyzer upgrades (#195)
* Prepare for wgsl-analyzer upgrades

* Fix the exponentials
2022-10-27 10:48:34 -07:00
Daniel McNab
afa706bd7e
Use 'C style' preprocessing in piet-wgsl (#194)
This lets us use https://github.com/wgsl-analyzer/wgsl-analyzer for writing the wgsl files.
The imports (for wgsl-analyzer) have to be machine specific at the moment - to use this you need to configure .vscode/settings.json yourself. The alternative is to point them at static files on GitHub, which is tempting to make things easier, but would potentially go out of sync with what is actually used.
2022-10-27 15:27:46 +01:00
Raph Levien
b42679c675
Merge pull request #193 from linebender/wgsl
Initial commit of piet-wgsl
2022-10-26 13:29:31 -07:00
Raph Levien
911dee23cd Address review feedback
Cleans up some of the immediate issue, but still hacky and has a bunch
of stuff hard-coded.
2022-10-25 09:03:13 -07:00
Raph Levien
a50d76cb1c rustfmt 2022-10-24 15:17:51 -07:00
Raph Levien
b6c4963d4c Initial commit of piet-wgsl
Starting an experimental port to WGSL shader language, using wgpu to run the examples. As of this commit, it's quite hacky and takes some shortcuts, but does render paths to a grayscale texture.
2022-10-24 15:08:14 -07:00
Chad Brokaw
4edea5fbc9
Merge pull request #190 from dfrg/api2
Remove piet API and replace with scene fragments
2022-10-19 16:02:21 -04:00
Chad Brokaw
6b1c315163 update c-api deps 2022-10-19 15:54:43 -04:00
Chad Brokaw
fe6ed00447 merging Cargo.lock is fun 2022-10-19 15:44:30 -04:00
Chad Brokaw
fd14495db6 Merge branch 'api2' of https://github.com/dfrg/piet-gpu into api2 2022-10-19 15:36:44 -04:00
Chad Brokaw
91a6d59cdc Update Cargo.lock 2022-10-19 15:23:18 -04:00
Chad Brokaw
c616c69dd8 update tests 2022-10-19 15:21:57 -04:00
Chad Brokaw
ca6c43adab update dependencies 2022-10-19 15:21:29 -04:00
Chad Brokaw
09773f89a3 fix gradient ramp color packing 2022-10-19 15:20:04 -04:00
Chad Brokaw
6c5a2cb4f4 macOS fixes
* Fix call to removed encoded_scene method in pgpu-render
* Add new ImageFormat::Surface variant to select a pixel format that matches the platform specific surface format. This makes gradients consistent across platforms.
2022-10-19 15:20:04 -04:00
Chad Brokaw
c84d1f6df5 format :( 2022-10-19 15:20:04 -04:00
Chad Brokaw
d07fda8ef8 Make transforms stateless
Removes the transform state mutator from SceneBuilder and adds transform parameters to push_layer, fill and stroke methods.
2022-10-19 15:20:04 -04:00
Chad Brokaw
c0fcdbad58 make gradient ramps late bound
Removes ResourceContext type. This makes scenes and fragments nearly identical. Should they be merged?
2022-10-19 15:20:04 -04:00
Chad Brokaw
782e7d51d2 Remove piet API & replace w/ fragments
Removes the dependency on the piet crate and replaces all uses with the scene crate.  Also does some cleanup of the scene API, renaming some types and moving them all to the crate root for better ergonomics.
2022-10-19 15:19:20 -04:00
Chad Brokaw
73833eb7c3 update tests 2022-10-19 15:05:23 -04:00
Chad Brokaw
14247770aa update dependencies 2022-10-19 14:58:54 -04:00
Chad Brokaw
f7b1bca18b fix gradient ramp color packing 2022-10-19 14:29:40 -04:00
Raph Levien
12fe2c10bc
Merge pull request #191 from linebender/version_bump
Update dependencies
2022-10-18 07:30:59 -07:00
Raph Levien
c5d71b4349
Pare down winit features to reduce bloat
Co-authored-by: m-hugo <56653363+m-hugo@users.noreply.github.com>
2022-10-18 07:18:45 -07:00