Commit Graph

1479 Commits

Author SHA1 Message Date
Patrick Walton 8808bfda63
Merge pull request #337 from pcwalton/macos-radeon
Associate texture parameters in shaders with specific texture units, to work around a macOS Radeon driver bug.
2020-05-12 22:08:12 -07:00
Patrick Walton ef0c0e0679 Associate texture parameters in shaders with specific texture units, to work
around a macOS Radeon driver bug.

Also, ensure there is always a dummy texture bound to every parameter in the
OpenGL backend.

These together stop the macOS Radeon drivers from recompiling the shader on
every drawcall.

Possibly addresses #300.
2020-05-12 21:40:38 -07:00
Patrick Walton 33cd3798d7
Merge pull request #335 from Veedrac/master
Change how point_queue and active_edges are sorted for performance
2020-05-11 15:24:59 -07:00
Veedrac 033a150639 Order and sample gradient correctly
Zero-width gradient sections should be ‘ignored’.
The visible endpoints should be precisely the first
and last colors added at that point.

https://html.spec.whatwg.org/multipage/canvas.html#interpolation
2020-05-11 21:47:39 +01:00
Veedrac 6d8a89b8c5 Cleanup: remode redundant ops in tiles.rs 2020-05-11 21:47:39 +01:00
Veedrac 1c48e8900e Faster sorting strategy, remove SortedVector
point_queue is only sorted by y coordinate to coordinate
work to one strip at a time. This is more efficiently handled
by punting later work into a next_point_queue,
and never explicitly sorting the data.

active_edges is only sorted by x coordinate for the tile-by-tile
work in process_old_active_edges. It is much more efficient
to sort once inside that function.
2020-05-11 21:47:35 +01:00
Patrick Walton cbceee85e6
Merge pull request #336 from Veedrac/hidpi_fix
Fix non-integer HiDPI support in demo
2020-05-11 11:19:06 -07:00
Veedrac faea46b9f6 Fix non-integer HiDPI support in demo 2020-05-11 13:14:54 +01:00
Patrick Walton 5ed26819bb
Merge pull request #331 from frewsxcv/frewsxcv-rect
Implement {Add,Sub,Mul}Assign for RectF
2020-05-10 21:33:47 -07:00
Patrick Walton fc515f950f
Merge pull request #329 from frewsxcv/frewsxcv-colors
Promote ColorU functions to `const`.
2020-05-10 21:33:23 -07:00
Patrick Walton 116b528e4e
Merge pull request #330 from frewsxcv/frewsxcv-embedded
Switch to the embedded loader for the examples.
2020-05-10 21:33:04 -07:00
Corey Farwell 9f71feb545
Update main.rs 2020-05-09 12:49:43 -04:00
Corey Farwell e993e350e2 Implement {Add,Sub,Mul}Assign for RectF 2020-05-08 21:25:45 -04:00
Corey Farwell e1ec307b3f Switch to the embedded loader for the examples. 2020-05-08 21:17:23 -04:00
Corey Farwell e26338835b Promote ColorU functions to `const`. 2020-05-08 21:09:38 -04:00
Patrick Walton aa1279d692
Merge pull request #328 from pcwalton/precision-highp
Only define `precision highp sampler2D` in OpenGL ES.
2020-05-08 17:16:35 -07:00
Patrick Walton 2ad02b0b78 Only define `precision highp sampler2D` in OpenGL ES.
Closes #309.
2020-05-08 16:59:40 -07:00
Patrick Walton 1a37b7f819
Merge pull request #327 from pcwalton/glfw-c-example
Add an example showing how to use the Pathfinder C API with GLFW
2020-05-08 16:53:06 -07:00
Patrick Walton feb6cca419
Merge pull request #326 from pcwalton/c-font-context-docs
Document `PFCanvasFontContextCreateWithFonts()`.
2020-05-08 15:10:07 -07:00
Patrick Walton bbf4c88d0d Add an example showing how to use the Pathfinder C API with GLFW
Closes #258.
2020-05-08 15:09:21 -07:00
Patrick Walton fd57193442
Merge pull request #325 from pcwalton/update-embedded
Update the resource manifest for recent changes
2020-05-08 14:33:53 -07:00
Patrick Walton b669cc7087 Document `PFCanvasFontContextCreateWithFonts()`.
Closes #247.
2020-05-08 14:27:41 -07:00
Patrick Walton d039e9009e
Merge pull request #324 from pcwalton/metal-layer-non-macos
Provide a placeholder definition of `CAMetalLayer` in the C API.
2020-05-08 14:18:00 -07:00
Patrick Walton 84cd92aea4 Update the resource manifest for recent changes 2020-05-08 14:17:13 -07:00
Patrick Walton 9998fe49bd Provide a placeholder definition of `CAMetalLayer` in the C API.
Closes #260.
2020-05-08 14:07:06 -07:00
Patrick Walton d3ceef749f
Merge pull request #323 from pcwalton/surfmanup
Upgrade to the latest master surfman
2020-05-08 13:17:52 -07:00
Patrick Walton 41c0c5f071 Upgrade to the latest master surfman 2020-05-08 12:47:58 -07:00
Patrick Walton e4edb23360
Merge pull request #322 from pcwalton/surfman-x11
Switch to using surfman in X11 mode.
2020-05-08 12:45:32 -07:00
Patrick Walton 5362d3a51e
Merge pull request #321 from pcwalton/default-compute
Enable compute shader by default if the OpenGL version is high enough.
2020-05-08 12:28:41 -07:00
Patrick Walton 90fb36f199 Switch to using surfman in X11 mode.
Partially addresses #310.
2020-05-08 12:22:46 -07:00
Patrick Walton 2421de6616 Enable compute shader by default if the OpenGL version is high enough. 2020-05-08 12:16:31 -07:00
Patrick Walton e766721f37 Update `README.md` 2020-05-07 21:46:13 -07:00
Patrick Walton 46070914be
Merge pull request #320 from pcwalton/painting-nothing
Clear the canvas to the background color if no drawing command did so.
2020-05-07 21:45:23 -07:00
Patrick Walton 6299d2c36b Clear the canvas to the background color if no drawing command did so.
Closes #318.
2020-05-07 21:36:13 -07:00
Patrick Walton 371c853370
Merge pull request #319 from pcwalton/gl4
Add OpenGL 4.3 support to the GL backend, enabling compute shader on non-Metal platforms
2020-05-07 17:11:33 -07:00
Patrick Walton 520817e909 Add OpenGL 4.3 support to the GL backend, enabling compute shader on
non-Metal platforms
2020-05-07 16:33:03 -07:00
Patrick Walton cfc1d44638
Merge pull request #317 from pcwalton/four-at-a-time
Use all four channels in the mask texture.
2020-05-07 09:55:30 -07:00
Patrick Walton 478008dcf0 Use all four channels in the mask texture.
Each bundle of four pixels on a scanline is packed into the RGBA channels of
the mask texture. The area LUT is also expanded to be RGBA so that four pixels'
worth of areas can be looked up at once.

Nice improvement on `paris-30k` from MPVG.

Closes #262.
2020-05-05 13:11:37 -07:00
Patrick Walton c7ce2153de
Merge pull request #316 from pcwalton/reduce-buffer-size
Reduce the size of buffers for performance
2020-05-05 13:11:06 -07:00
Patrick Walton f8405d81c0 Bump the number of fills per batch up 2020-05-04 20:01:08 -07:00
Patrick Walton 6407bf5871 Reduce the size of buffers 2020-05-04 20:01:08 -07:00
Patrick Walton a373a1fbc3
Merge pull request #315 from pcwalton/metal-timing
Reduce timing jitter in the Metal backend
2020-05-04 20:01:00 -07:00
Patrick Walton 0545d840db Reduce timing jitter in the Metal backend 2020-05-04 19:11:50 -07:00
Patrick Walton 9ff3248e9e
Merge pull request #314 from pcwalton/size-classes
Generalize the buffer allocator to support multiple size classes, and use it for tile compositing too
2020-05-04 16:02:48 -07:00
Patrick Walton d0842f2f4d Generalize the buffer allocator to support multiple size classes, and use it
for tile compositing too.
2020-05-04 15:48:47 -07:00
Patrick Walton da2f65ddf4 Fix `surfman` reference in `Cargo.toml` 2020-04-30 15:04:49 -07:00
Patrick Walton b335f79f77 Remove references to SDL from the README 2020-04-30 13:43:23 -07:00
Patrick Walton ac83f79d94 Add a compute shader path, optimize GPU memory management, and switch from SDL
to `surfman`.

This is a large commit; explanations of each change follow.

This adds an optional compute shader path, off by default, for rendering fills
to alpha masks. It usually does not improve performance at present, but it
provides a good baseline for further optimizations. Later improvements will
likely aim to avoid writes to the mask texture entirely. Supporting
infrastructure for compute shader has been added to `pathfinder_gpu` for the
OpenGL and Metal backends.

The Metal backend has been optimized to avoid unneccessary buffer allocations
and reflection. As part of this, argument buffers have been removed, as the
current SPIRV-Cross compiler no longer requires them.

The GPU renderer has been improved to avoid stalls. Now, separate buffers are
allocated for each fill batch and for each frame. This can be extended in the
future to allow for separate buffers for tile draw operations as well.

SDL usage has been removed in favor of the native Rust `surfman` and `winit`.
Because `surfman` allows for selection of the integrated GPU on multi-GPU
system, it is chosen by default. The demo supports a new
`--high-performance-gpu` option to opt into the discrete GPU.
2020-04-30 13:33:29 -07:00
Patrick Walton 84bf4341c2 Micro-optimize line fill primitive generation to avoid calls to `floorf()` and
`ceilf()`
2020-04-23 18:35:17 -07:00
Patrick Walton 24deb36e9a Supply solid tiles with the appropriate filter.
Fixes `embrace.svg` in MPVG.
2020-04-22 12:53:35 -07:00
Patrick Walton 104869a6e9 Move the mask enable flag to the tile to reduce drawcall count 2020-04-22 11:04:16 -07:00
Patrick Walton a9003fe69b Add missing `tile_clip` shader to `resources`.
Closes #301.
2020-04-22 09:13:42 -07:00
Patrick Walton cd09177ead Implement the infrastructure needed to support multiple clip paths.
This also lays the groundwork needed to reduce batch breaks between solid and
alpha tiles.
2020-04-21 18:25:20 -07:00
Patrick Walton 564533ff29 Switch from Rust MPSC channels to `crossbeam-channel`.
7x performance improvement in contour.svg from MPVG!
2020-04-21 09:57:47 -07:00
Patrick Walton 561582c0ac Add SVG dashing support 2020-04-21 09:29:36 -07:00
Patrick Walton 6c996981a3 Fix some transform issues and implement transformed radial gradients in SVG.
In particular, this fixes the usvg-to-Pathfinder transform conversion and the
definition of `Transform2F::row_major()`.

Makes `drops.svg` from the MPVG samples work.
2020-04-20 16:40:02 -07:00
Patrick Walton d8875efd61 Update build result flags (unsupported feature flags) in the SVG backend 2020-04-17 16:37:12 -07:00
Patrick Walton d9a93a102c Publish `pathfinder_svg` to crates.io 2020-04-17 13:57:04 -07:00
Patrick Walton ef20671ab7 Publish `pathfinder_canvas` to crates.io 2020-04-17 13:50:36 -07:00
Patrick Walton 686773224c Publish `pathfinder_text` to crates.io 2020-04-17 13:44:11 -07:00
Patrick Walton 1cd5966d3d Publish `pathfinder_content` and `pathfinder_renderer` to crates.io 2020-04-17 13:23:45 -07:00
Patrick Walton ccf9822e11 Fix `pathfinder_metal` crate description 2020-04-17 13:05:45 -07:00
Patrick Walton adf87d7636 Bump the `pathfinder_color` version to 0.5 to match other crates 2020-04-17 13:00:43 -07:00
Patrick Walton a91da6fdb4 Publish `pathfinder_resources` to crates.io 2020-04-17 12:33:22 -07:00
Patrick Walton 171fb21fe7 Switch back to upstream `skribo` 2020-04-17 12:15:55 -07:00
Patrick Walton 5819b8dc60 Stop reallocating texture pages every frame 2020-04-17 11:50:46 -07:00
Patrick Walton 07ce2a2536 Add a scene field to render target IDs to reduce the chance of misuse 2020-04-16 16:54:52 -07:00
Patrick Walton 0b43f629cd Cache loaded fonts and glyph outlines.
Approximately a 70% CPU time improvement on the NanoVG demo.
2020-04-16 16:28:44 -07:00
Sebastian K 582f025c91 Update WebGL backend for recent changes 2020-04-16 12:02:42 -07:00
Patrick Walton afe1a64f68 Allow multiple tile pages.
Closes #151.
2020-04-15 20:13:37 -07:00
Patrick Walton 83c05e9f77 Improve the fidelity of the NanoVG demo some more 2020-04-14 18:49:47 -07:00
Patrick Walton 0fec0061e6 Clamp radial gradient t values to [0.0, 1.0] instead of rendering transparent
black
2020-04-14 16:13:32 -07:00
Patrick Walton b1d8e0526e Make some shadow blurs match the original NanoVG demo better 2020-04-14 16:13:12 -07:00
Patrick Walton 39f84b287d Make the paragraph color and line height in the NanoVG demo match the original
more
2020-04-14 15:21:01 -07:00
Patrick Walton 5efdf2a04a Implement the missing pieces of `TextMetrics` for canvas.
This required a `font-kit` upgrade, and with it a `skribo` upgrade.
2020-04-14 15:01:30 -07:00
Patrick Walton b9b1472b6c Resolve fill and stroke paints when filling and stroking text.
Makes text respect global alpha.
2020-04-14 10:08:11 -07:00
Patrick Walton 667a6c7c43 Fix definition of `TextBaseline::Middle` 2020-04-14 09:45:18 -07:00
Patrick Walton cdbe2fbb6b Introduce the concept of a base color in order to handle canvas shadow alpha
correctly
2020-04-13 18:31:25 -07:00
Patrick Walton fda9b8b9e1 Make the clip example match the NanoVG example 2020-04-11 19:08:20 -07:00
Patrick Walton 3e9558957f Add a shadow to the color wheel marker in the NanoVG demo 2020-04-11 19:08:00 -07:00
Patrick Walton def7da5de2 Remove obsolete TODOs in the NanoVG demo 2020-04-11 19:07:50 -07:00
Patrick Walton 15101e90dd Draw caret position in the NanoVG demo 2020-04-10 18:13:42 -07:00
Patrick Walton ca0e9e9e14 Draw the paragraph gutter in the NanoVG demo 2020-04-10 16:00:25 -07:00
Patrick Walton 4f1d376fe5 Refactor paragraph layout in the NanoVG demo; fix BG/FG draw order 2020-04-10 15:30:12 -07:00
Patrick Walton 4365b75629 Treat negative hues correctly in HSL. 2020-04-10 13:48:31 -07:00
Patrick Walton e598249186 Use column vector length to extract scale from matrices.
Closes #298.
2020-04-10 13:38:25 -07:00
Patrick Walton df08d76627 Make the color wheel animation in the NanoVG demo match NanoVG 2020-04-10 13:37:06 -07:00
Patrick Walton ca36fed47b Fix calculation of wallclock time in the NanoVG demo 2020-04-09 18:01:12 -07:00
Patrick Walton 47919db8f3 Fix frame time measurement in the GL backend, and add it to the NanoVG demo 2020-04-09 17:49:28 -07:00
Patrick Walton 19aa9c8e54 Only paint text backgrounds up to the appropriate width in the NanoVG demo 2020-04-09 12:33:16 -07:00
Patrick Walton a196f1eff8 Fix spriting imperfections in the thumbnails in the NanoVG 2020-04-09 12:15:39 -07:00
Patrick Walton 0211296128 Publish version 0.1 of `pathfinder_color` 2020-04-09 10:36:04 -07:00
Patrick Walton 0399061a70 Bump versions of `pathfinder_simd` and `pathfinder_geometry` 2020-04-09 10:31:18 -07:00
Patrick Walton 55f89c4ffa
Merge pull request #293 from pyfisch/canvas-reexport
Re-export necessary items in pathfinder-canvas
2020-04-09 10:29:39 -07:00
Patrick Walton 205a63340c
Merge pull request #296 from servo/jdm-patch-1
Add arm64 CI and fix build errors
2020-04-09 10:28:55 -07:00
Patrick Walton 895f73096e Switch back to instanced drawing for tiles.
Improves tile build time by something around 2x in the NanoVG demo.
2020-04-08 17:16:54 -07:00
Josh Matthews 3a8339fece
Allow dividing a Vector2F by an f32 value. 2020-04-07 15:36:46 -04:00
Josh Matthews 43adc9c24a
Fix arm I32x4 min/max operations that require on floating point values. 2020-04-07 15:35:03 -04:00
Josh Matthews e87b330123
Add min/max to i32x2. 2020-04-07 12:42:28 -04:00
Josh Matthews db205f71d6
Fix incorrect cast ordering in arm simd. 2020-04-07 12:31:28 -04:00