Interior triangulation draws take 2 passes: outer cubics followed by the interior triangles.
Improve batching and reduce the number of barriers by allowing other non-overlapping draws to be sorted in between the two passes.
We implement this by adding RiveRenderPathDraw::subpassCount(), and then sorting a unique indirectDraw for each subpass into the list.
Diffs=
0f805654cf Improve batching for interior triangulation draws (#8327)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
moved unreal runtime into mono and updated python scripts to work with mono paths and build and copy gms
Diffs=
4e8c555722 Unreal Runtime into Mono (#8318)
Co-authored-by: Jonathon Copeland <jcopela4@gmail.com>
This gives better support for smaller screens and side-by-side windows.
Also standardize the formatting check on GitHub on version 17.
Diffs=
e52e9fff29 Drop the ColumnLimit to 80 for clang-format (#8320)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
Pack clip data into an RGBA8 attachment and turn on src-over blending for both color and clip.
Handle advanced blend modes by rearranging the math such that the correct color isn't reached until *AFTER* the hardware blend state is applied.
This allows us to preserve clip and color contents by just emitting a=0 instead of loading the current value. It also saves flops by offloading the blending work onto the ROP blending unit, and serves as a hint to the hardware that it doesn't need to read or write anything when a == 0.
Diffs=
1b5e50fce Optimize atomic rendering for input attachments (#8310)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
Many changes to add in support for Unreal RHI
This is the first step. Afterwords we need more changes such as finalizing the for_unreal switch to premake.
Diffs=
1cc5f2b6f Prep for rhi (#8270)
Co-authored-by: Jonathon Copeland <jcopela4@gmail.com>
Since we don't do perspective transformations, the mipmap
level-of-detail for image paints is constant throughout the entire
shape. We can therefore save time by calculating the LOD ahead instead
of relying on shader derivatives in the fragment shader. This also saves
us from having to compute these derivatives explicitly outside of
control flow, which further improves performance.
To make room for LOD in the paintAuxBuffer, we also drop support for GL
bindless textures, which do not work similarly to descriptor indexing in
Vulkan, which we will use in the future if we decide this is a feature
we need.
Diffs=
7bef90845 Calculate LOD ahead of time for image paints (#8260)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
We call it "msaa" internally, so lets update it to reflect that.
Diffs=
bcd3c9218 Rename InterlockMode::depthStencil to InterlockMode::msaa (#8265)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
This stabilizes Vulkan on Android.
Also adds a "vkcore" backend, which tests vulkan without bonus features enabled.
Diffs=
adc240554 Overhaul Vulkan synchronization (#8166)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
Final fix for https://github.com/rive-app/rive/issues/7946!!
~~Letting tests run while I add WASM side.~~
This adds colinear checks and precise bounds to dart native so we can completely remove the flutter ui.Path usage in rive_core. This dries up a lot of the rendering code where we still kept the old path around and should provide some performance benefits particularly on web.
Haha @alxgibsn we both caught the StageShape issue :)
Diffs=
7e8100fee Colinear and bounds ffi (#8158)
Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
overstroke.cpp
strokefill.cpp
still needs the contour work for overstroke.cpp
Diffs=
5eadf5c17 skia removal (#8088)
Co-authored-by: blakdragan7 <jcopela4@gmail.com>
Co-authored-by: hernan <hernan@rive.app>
we need to pass the text wrap value separately in order to support right and center alignment.
Previously, since we were treating "no wrap" as an autosized text, the content wouldn't align to the text box and instead only align to itself.
This PR splits both as separate arguments and adds the new argument to the bindings.
Diffs=
451599d03 pass wrap separately to support alignments (#8058)
e32e2fde0 Start converting trickycubicstrokes to Rive (#8089)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
Co-authored-by: blakdragan7 <jcopela4@gmail.com>
Co-authored-by: hernan <hernan@rive.app>
We're getting reports of garbage pixels on the (PowerVR) Apple A10x. Restating the shader clipping logic in a different way appears to make these go away. This is probably a driver issue, since "coverage" should never be NaN and both versions ought be be equivalent.
Fixes#7423
Diffs=
b2894c99d Dance around a driver issue that generates garbage pixels (#8077)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
It's easier to experiment and debug when you can interact with it. Pump sys.stdin over the TCP server to the target.
Also delete the separate "RIV server" in favor of a "FETCH_RIV_FILE" request on the main TestHarness server.
Diffs=
0dcbf4d1f Implement keystrokes for the player test (#8065)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
Also
renamed deploy_tools to deploy_tests
renamed pr_runtime_tests.yaml to pr_unit_tests.yaml
renamed pr_tools_tests.yaml to pr_platform_tests.yaml
Diffs=
ac3b3c257 rename ios and android tools to tests (#8047)
Co-authored-by: rivessamr <suki@rive.app>
deploy_tools.py parses the "RIVE_SKIPPED_GOLDEN_TESTS" environment variable to skip flaky tests.
Diffs=
e614bda68 Add a mechanism to skip flaky golden tests (#8062)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
Only enable the GL_EXT_clip_cull_distance on GL ES.
Also tweak the gms more, sorting the slow tests first for better times.
Diffs=
04f481d40 Fix glmsaa on Desktop GL drivers (#8026)
Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
- Most of tools/* have been moved to the new packages/runtime/tests. (Excludes fuzz and a few things with proprietary information)
- The tools/test are now in packages/runtime/unit_tests/renderer.
- The runtime/tests are now also moved, to the following packages/runtime/unit_tests/runtime (moved the "dev/tests" to packages/runtime/unit_tests)
- Thus unit_tests comprises of runtime and renderer tests (in the future we can add more categories as folder, this avoids too many tests in one folder)
- The rendering tests and runtime tests are built together in one executable called unit_tests*. This is what is described in the rive-runtime README - it is the way our developers can test the rendering (GPU) and runtime (CPU) unit tests in one go.
- pr_runtime_tests now builds and runs all the unit_tests, previously it was only executing the runtime tests, but now it includes the renderer tests for the (same platforms still tested: windows, windows msvc, mac, linux)
- The pr_tools_tests still tests the same workloads on the same devices, limited still to the rendering tests
ISSUES:
- We cannot build all the "tools" tests (e.g. imagediff, rendering tests) with the runtime tests. The runtime tests enables TESTING. I'm also not sure if running the runtime tests on all the devices is actually is worth it - if the tests are platform+device agnostic then probably not worth it.
- Windows pr_runtime_tests switched to ws-actions/configure-aws-credentials@v1 from microsoft/setup-msbuild@v1.1, as would not build otherwise, seems related to old version of premake
TODO:
- Verify of the performance is reasonable for runner / checkins
Diffs=
f25ee97a0 Opensource (tools) tests as part of runtime (#8035)
Co-authored-by: rivessamr <suki@rive.app>