Commit graph

826 commits

Author SHA1 Message Date
Chad Brokaw 15cd306af6 Extend modes for gradients
This patch implements the pad, repeat and reflect extend modes for gradient brushes. Adds a new example demonstrating the functionality.

Also fixes a few bugs:
* Clamps alpha in blend.wgsl for the `blend_compose` function. The `Plus` mode was generating `alpha > 1.0` leading to incorrect rendering.
* Small change to radial gradients in fine.wgsl to reject pixels outside the cone when the circles don't nest. This requires further work to properly extend the cone when one of the radii is not 0.
2023-04-30 23:11:57 -04:00
Daniel McNab 299b47ea06
Update the bevy example to wgpu 0.16 (#313)
* Update the bevy example to wgpu 0.16

After https://github.com/bevyengine/bevy/pull/8446

* Remove inaccurate README warning
2023-04-27 08:41:17 +01:00
Arman Uguray 8b2ea0132a
Merge pull request #312 from armansito/fix-wasm
Fix WASM build

- Rolled wgpu to 0.16.
- Incorprated the instant crate in lieu of std::time::Instant which works on WASM and native builds.
- Fixed the issue with window scaling by setting the canvas size based on winit Window dimensions.
- Fixed a division-by-zero issue in path_coarse_full

This resolves #276
2023-04-25 00:40:08 -07:00
Arman Uguray c9d7a15fad
Put the Warning label in its own line
Co-authored-by: Daniel McNab <36049421+DJMcNab@users.noreply.github.com>
2023-04-25 00:37:06 -07:00
Arman Uguray b0cc221d7a Add warning to README about the Bevy example's compilation status 2023-04-24 16:03:09 -07:00
Arman Uguray b442ba550b Update wgpu version badge in README 2023-04-24 15:56:46 -07:00
Arman Uguray d3c54ed12d Include --bin with_winit_bin in run_wasm instructions 2023-04-24 15:49:49 -07:00
Daniel McNab 1529945a5a Update cargo-run-wasm 2023-04-24 15:46:18 -07:00
Arman Uguray 51f00fbd1f Fix the headless example for wgpu 0.16 2023-04-24 10:41:25 -07:00
Arman Uguray bc903d1c3b Add check for division-by-zero in path_coarse_full
The potential division by zero in this line led to visible visual
artifacts when running against WebGPU in Chrome.
2023-04-23 16:28:52 -07:00
Arman Uguray 7526d1ca26 Update run_wasm instructions 2023-04-23 16:09:17 -07:00
Arman Uguray 84915dc289 Use expect instead of unwrap on image format block size 2023-04-23 16:09:17 -07:00
Arman Uguray bb117da352 Enable wasm-bindgen feature of instant crate 2023-04-23 16:00:01 -07:00
Arman Uguray 4642fa024f [with_winit] Set the canvas size to thw winit Window's inner size
This prevents the scaling caused by the hardcoded canvas dimensions on
high dpi platforms.
2023-04-23 12:02:39 -07:00
Arman Uguray 5543ad01fe [examples] Use instant crate's time::Instant
crates.io/crates/instant provides a std::time::Instant implementation
that works on both WASM and non-wasm builds.
2023-04-23 12:02:39 -07:00
Arman Uguray 8a35c51289 Roll wgpu to 0.16 2023-04-23 12:02:39 -07:00
Arman Uguray fa027978ed
Merge pull request #310 from armansito/svg-timing
[svg] Log parse and render times separately
2023-04-23 11:31:19 -07:00
Arman Uguray 97250fb2dc
Merge pull request #311 from armansito/clip-leaf-bounds-check
[shaders] Explicitly guard writes to clip_bboxes
2023-04-23 11:27:27 -07:00
Arman Uguray ceeb0b33b6 [shaders] Explicitly guard writes to clip_bboxes
The very last statement of the `clip_leaf` shader is the assignment to
the `clip_bboxes` buffer. The buffer write is indexed on the global
invocation ID. It is possible for this index to be larger than the total
number of clips in at least one workgroup since the clip count isn't
strictly a multiple of workgroup size.

Currently the size of the clip_bboxes buffer matches the number of
clips. This means the buffer index is likely to run past the buffer.
This is not an issue when running on wgpu as it internally enables
bounds checking when compiling WGSL (so all buffer accesses are
implicitly conditional). When compiling the shaders to native backends
the vello_shaders crate currently does not enable implicit bounds
checking, so a buffer overrun is possible.

There are a few potential solutions:

1. Have an explicit bounds check in the shader. This is straightforward
   and consistent with the existing code that reads from clip_inp. The
   downside is that with bounds checking enabled, this extra check is
   redundant in the generated code. This is the solution included in
   this PR.

2. Make sure that the clip_bboxes buffer has a size that is a multiple
   of clip_leaf's workgroup size. This was the approach taken by
   piet-gpu on its native HALs. This effectively wastes up to 4080 bytes
   (255 * 16) to store unused bbox values.

3. Enable Naga's implicit bounds checks when compiling to native. This
   would make the behavior consistent with the wgpu backend, however it
   comes at the cost of increased renderer complexity as the native
   implementation must supply the sizes of each buffer in an implicitly
   generated buffer binding to every shader stage.
2023-04-21 18:43:51 -07:00
Arman Uguray 23f26ef2a1 [svg] Log parse and render times separately
The examples logged the total processing time for an SVG including both
parse and GPU buffer encoding times. Times for these two operations are
now logged separately.
2023-04-21 18:31:20 -07:00
Arman Uguray 3d83bd7fa0
Merge pull request #307 from linebender/vello_encoding
vello_encoding crate
2023-04-19 12:25:42 -07:00
Arman Uguray 2b0eab2bbc fix some clippy errors/warnings 2023-04-18 15:15:01 -07:00
Arman Uguray e9278a9253 [vello_encoding] Declare bump buffer sizes in terms of element count 2023-04-18 15:02:31 -07:00
Arman Uguray 4ae4177510 [vello_encoding] Fixup copyright headers 2023-04-18 14:46:16 -07:00
Arman Uguray fe29125a84 Remove unused WG size declarations 2023-04-18 14:46:16 -07:00
Arman Uguray ad82519444 [vello_encoding] Use the vello_encoding crate in the vello renderer
Removed the workgroup count and buffer size calculations from
src/render.rs. This code now uses the types returned by the
vello_encoding crate for this purpose.
2023-04-18 14:46:16 -07:00
Arman Uguray 899ecaa430 Remove the reduced render method
This method was intended for the coverage mask variant of the pipelines
that was present in piet-gpu. This code has regressed since the wgpu
rewrite and the mask rendering variant of the pipelines will be
redesigned. Remove this for now instead of having to maintain it until
the rewrite.
2023-04-18 14:46:16 -07:00
Arman Uguray 0256d8a92f [vello_encoding] Minor clean ups and correctness fixes
- Use the buffer sizes in src/render.rs as the current 128K is not
  sufficient for even the test scenes
- Add BumpAllocators type and bump buffer size
- Support the `base_color` render option
- Use immutable type construction where possible
- Fix the path tag stream length calculation to use the offsets stored
  in Layout. This both matches the current behavior in src/render.rs and
  makes it so that CpuConfig's construction no longer needs the Encoding
  type as an input
- Renamed CpuConfig & GpuConfig types to 'RenderConfig' and
  'ConfigUniform'
2023-04-18 14:46:16 -07:00
Arman Uguray 6d2b98cade [vello_encoding] Re-export vello_encoding::Glyph from vello
This makes it so that users of the vello crate that use the Glyph type
don't need to directly depend on the vello_encoding crate.
2023-04-18 14:46:16 -07:00
Arman Uguray 3ff490fc13 [vello_encoding] Declare padding in binding types to match WGSL layout 2023-04-18 14:46:16 -07:00
Chad Brokaw 9f27fae64e capture computation of workgroup and buffer sizes 2023-04-18 14:46:16 -07:00
Arman Uguray db2fefdc8f [vello_encoding] Move the encoding module into its own crate
This change moves the vello encoding logic to a new crate under
crates/encoding. Combined with the `vello_shaders` crate, this enables
lightweight integration of the Vello pipelines into renderers that don't
depend on wgpu (or perhaps written in languages other than Rust).

The Scene/Fragment API currently remain the vello crate.
2023-04-18 14:46:14 -07:00
Chad Brokaw b8e1bcfac3
Merge pull request #309 from linebender/fello-deps
Fix fello deps
2023-04-14 09:15:54 -04:00
Chad Brokaw 315ce5a372 pin tested revs 2023-04-14 09:00:06 -04:00
Chad Brokaw 9934adf94c
Fix fello deps
I let a transitive dependency get away from me. This should hopefully fix #308
2023-04-14 07:11:01 -04:00
Chad Brokaw 0e71aa1d0f
Merge pull request #265 from linebender/vello_shaders
`vello_shaders` crate for AOT compilation and lightweight integration with external renderer projects
2023-03-29 16:13:15 -04:00
Arman Uguray 0a6a6e2c21 [vello_shaders] Move vello_shaders to crates/shaders 2023-03-29 12:24:28 -07:00
Arman Uguray 64020a3f77 [vello_shaders] Fix typo in README 2023-03-29 11:23:06 -07:00
Arman Uguray d2b41d628b [vello_shaders] Add a README 2023-03-29 11:20:56 -07:00
Arman Uguray 7a99ae5a9e [vello_shaders] Add copyright headers 2023-03-29 11:20:38 -07:00
Arman Uguray eb1d4be36a [vello_shaders] Pin naga dependency 2023-03-29 11:20:15 -07:00
Arman Uguray 4f445c2e0a [vello_shaders] Provide workgroup shared memory allocation sizes
Naga traslates workgroup variable declarations to threadgroup
address-space entry-point parameters when generating MSL. Metal API
validation requires that the memory sizes for these parameters be set
explicitly by calling setThreadgroupMemoryLength:index on the
MTLComputeCommandEncoder.

The crate now calculates the required memory size for global workgroup
variables that are accessed by the entry point and provides them
alongside the binding list. This is abstracted separately from the
binding list.

While the current usage that we're aware of is limited to Metal, this
information is being provided as part of the generic ComputeShader type
instead of a MSL-specific type, as the information itself is computed
from the parsed WGSL IR and not specific to Metal.
2023-03-29 10:38:10 -07:00
Arman Uguray b52ef32c90 [vello_shaders] Use thiserror::Error for the library Error type 2023-03-29 10:38:10 -07:00
Arman Uguray 14ab8d90ae [vello_shaders] Use the per_entry_point_map option for MSL 2023-03-29 10:38:10 -07:00
Chad Brokaw 87803cc8a6 fmt 2023-03-29 10:38:10 -07:00
Chad Brokaw a532eacf7b Replace HashMap with sorted Vec so builds are deterministic 2023-03-29 10:38:10 -07:00
Chad Brokaw a5434569b6 fix build rerun path 2023-03-29 10:38:10 -07:00
Chad Brokaw 0db71153ad Playing with shader permutations and AOT compilation 2023-03-29 10:38:10 -07:00
Raph Levien 1a6add81b1
Merge pull request #298 from linebender/flower
Change image to flower
2023-03-22 18:13:31 -07:00
Raph Levien 8cfe903f7e Change image to flower
Using vector graphics for the image doesn't make a huge amount of sense. The flower photo is by Raph and happily licensed to anyone who wants to use it.
2023-03-22 15:53:44 -07:00