Skip to content

Conversation

bdero
Copy link
Member

@bdero bdero commented Oct 28, 2022

After some experimenting, this is the solution that seemed to hit the sweet spot between minimizing friction for users and not backing ourselves into a corner for future runtime stage use cases. I'm also planning to provide macros/functions to automatically handle the framebuffer coordinate correction for samplers (with ideas to add specially managed uniforms alongside samplers that will get applied automatically through macros).

Engine dependencies:

The runner-up solution was to have the compiler automatically insert the contents of flutter/runtime_effect.glsl in runtime stage shaders, but I ended up going for the explicit import in the end because:

  1. This avoids backing ourselves into a corner for later use cases where e.g. hijacking the varying inputs (as RuntimeEffect does) would be unacceptable
  2. This avoids the friction of breaking shaders that have a #version declaration
  3. If we want to deprecate this in the future and employ a different solution, maintaining backwards compatibility is easier this way; we could just recommend switching to another include

@bdero bdero added the e: impeller Impeller rendering backend issues and features requests label Oct 28, 2022
@bdero bdero self-assigned this Oct 28, 2022
@flutter-dashboard flutter-dashboard bot added f: material design flutter/packages/flutter/material repository. framework flutter/packages/flutter repository. See also f: labels. tool Affects the "flutter" command-line tool. See also t: labels. labels Oct 28, 2022
@bdero
Copy link
Member Author

bdero commented Oct 28, 2022

My path resolution for the shader lib is pretty bananas right now -- it takes the current script dir (which is the cache dir containing the tools snapshot) and just goes up two directories to find the root.

I suspect we'll eventually want to ship this shader lib as part of the engine artifacts, but LMK if you have opinions about the best place for it to live in the meantime (or advice about how to handle the paths better)!

@@ -0,0 +1,20 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like an implementation detail of the engine/impellerc, so we should probably package it with the engine artifacts.

Copy link
Member Author

@bdero bdero Oct 28, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the recipes to include the shader lib here: https://flutter-review.googlesource.com/c/recipes/+/35221

I'm thinking maybe we can have a convention where the "flutter" dir is for stable end-user headers only, and "impeller" is for internals that the stable lib may use with no stability guarantees.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@@ -168,6 +169,10 @@ class ShaderCompiler {
);
}

// TODO(bdero): This path is intended to be identical to `impeller/compiler/shader_lib` in the engine.
// Update this path once the shader lib ships in the engine artifacts.
final String shaderLibPath = join(dirname(Platform.script.path), '../../shader_lib');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When this is packaged with the engine artifacts, it can be looked up similarly to how impellerc is looked up above on line 163

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@bdero bdero force-pushed the bdero/runtime-effect-include branch from e3b61bf to 44f170b Compare October 28, 2022 17:40
@bdero bdero force-pushed the bdero/runtime-effect-include branch 2 times, most recently from d8d24e3 to 2726b77 Compare November 2, 2022 01:36
@bdero
Copy link
Member Author

bdero commented Nov 2, 2022

I expect this PR to begin passing once flutter/engine#37218 lands in the framework. It's in the next engine roll: #114464

@@ -175,6 +176,8 @@ class ShaderCompiler {
);
}

final String shaderLibPath = join(dirname(impellerc.path), 'shader_lib');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should use _fs.path here, that will work correctly if we are using a memory file system with a different style that the current host.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm could you expand on this? _fs.path seems to be the user project dir.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, what I mean is using the path object defined on the local filesystem reference:

final String shaderLibPath = _fs.path.join(_fs.path.dirname(impellerc.path), 'shader_lib');

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh! Makes sense. Done.

@bdero bdero force-pushed the bdero/runtime-effect-include branch from c1ea4d6 to 3896a59 Compare November 2, 2022 03:57
@bdero
Copy link
Member Author

bdero commented Nov 2, 2022

I ended up getting the artifact paths wrong in the recipe. The shader lib ended up being copied into flutter/impeller/compiler/shader_lib as opposed to just shader_lib. Working on fixing it here: https://flutter-review.googlesource.com/c/recipes/+/35400

@bdero bdero force-pushed the bdero/runtime-effect-include branch 3 times, most recently from 2ba985a to 5fa7b84 Compare November 4, 2022 04:35
@bdero bdero marked this pull request as ready for review November 4, 2022 04:58
@zanderso
Copy link
Member

zanderso commented Nov 4, 2022

It looks like there is a problem with the shader library include on Windows. I'm taking a quick look on my Windows machine.

@zanderso
Copy link
Member

zanderso commented Nov 4, 2022

In a quick test, I couldn't repro this issue on my Windows machine =( @bdero do you have a Windows machine to investigate this? If not, I can try a bit harder to repro.

@jonahwilliams
Copy link
Contributor

I wonder if this is another unicode thing. The directory is C:\b\s\w\ir\x\w\Á flutter sdk\

@jonahwilliams
Copy link
Contributor

Yeah if I copy it into a folder like that I get a compile error:

Target debug_bundle_windows_assets failed: ShaderCompilerException: Shader compilation of
"C:\Users\Jonah\Documents\Á flutter sdk\hello_world\shaders\example.glsl" to "C:\Users\Jonah\Documents\Á flutter
sdk\hello_world\build\flutter_assets\shaders/example.glsl" failed with exit code 1.
[        ]              impellerc stdout:
[        ]              impellerc stderr:
[        ]              Could not write file to C:\Users\Jonah\Documents\Á flutter
sdk\hello_world\build\flutter_assets\shaders/example.glsl.spirv
[        ]              #0      ShaderCompiler.compileShader

@jonahwilliams
Copy link
Contributor

actually nvm, that is still failing at ToT

@bdero bdero force-pushed the bdero/runtime-effect-include branch from 736db93 to c9efb4e Compare November 15, 2022 03:42
@bdero
Copy link
Member Author

bdero commented Nov 15, 2022

This is passing all targets now! Merging.

@bdero bdero merged commit e9c6212 into flutter:master Nov 15, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Nov 16, 2022
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Nov 16, 2022
* 338841a Revert "Revert "Revert "Scribble mixin (#104128)" (#114647)" (#114698)" (flutter/flutter#115146)

* 229b39e [flutter_tools] Fix so that the value set by `--dart-define-from-file` can be passed to Gradle (flutter/flutter#114297)

* 3895786 Revert "Load assets in flutter_test without turning event loop. (#115123)" (flutter/flutter#115156)

* a6e3ec8 mark firebase test lab test flaky because of upstream infra issues (flutter/flutter#115178)

* 8d808b5 Roll Flutter Engine from 7326e5b3354b to 329900fc85d6 (7 revisions) (flutter/flutter#115185)

* 10dc566 Add drone_dimensions to devicelab_build_test. (flutter/flutter#115183)

* 0a5b531 b6e45ae35 extend const_finder to allow skipping particular classes (flutter/engine#37257) (flutter/flutter#115189)

* 0e9ee36 [web] Add `--local-web-sdk` flag and use precompiled platform kernels for dart2js and ddc (flutter/flutter#114639)

* 9e314ff Make FutureBuilder handle SynchronousFuture correctly, reland SynchronousFuture usage in test assets (flutter/flutter#115173)

* 673fd97 17d428e68 Roll Dart SDK from 2b6909ba35e5 to 190040da0bc8 (2 revisions) (flutter/engine#37536) (flutter/flutter#115191)

* edcdb00 Roll Flutter Engine from 17d428e688a9 to 38c4f1d78630 (2 revisions) (flutter/flutter#115192)

* 8772768 Roll Flutter Engine from 38c4f1d78630 to 1f0dd2c0f5bb (2 revisions) (flutter/flutter#115194)

* 6ec2bd0 M3 Segmented Button widget (flutter/flutter#113723)

* b7b6758 f3dfdf4cc Roll Skia from 3bbdd5bc54f2 to a727f7ac8a98 (1 revision) (flutter/engine#37544) (flutter/flutter#115196)

* 94e753d Roll Flutter Engine from f3dfdf4ccf38 to e3b3950f0fab (3 revisions) (flutter/flutter#115200)

* 61e927d e63c9443b [Impeller] Include the new primitive type in the pipeline hash (flutter/engine#37546) (flutter/flutter#115201)

* c05d887 Roll Flutter Engine from e63c9443bc04 to 9500d8c4a4ce (2 revisions) (flutter/flutter#115212)

* 1f82985 1c8c23754 Roll Fuchsia Linux SDK from xDY5B0-NZzq2idRNU... to IE4logHFoa8ZZQAw3... (flutter/engine#37554) (flutter/flutter#115214)

* 61b3d5a a0d8cd68c Add a limit to the Gaussian blur downsampling curve (flutter/engine#37550) (flutter/flutter#115217)

* 2bf64aa fd56b7ee8 Roll Fuchsia Mac SDK from j3vspnGJcQvIfsXXu... to iPqmEVwAbmYwPlh5a... (flutter/engine#37557) (flutter/flutter#115218)

* 53ab17d Roll Flutter Engine from fd56b7ee87f0 to 1ae285897eae (2 revisions) (flutter/flutter#115220)

* 4488166 d4e2188e9 [Impeller] Fix DrawPaint regression (flutter/engine#37561) (flutter/flutter#115222)

* bf906e6 2bdeaf7d7 Fix inertia cancel event on macOS Ventura (flutter/engine#37067) (flutter/flutter#115226)

* 1a19409 06c390470 Roll Fuchsia Mac SDK from iPqmEVwAbmYwPlh5a... to N-iOLgSVYYh_AfC7Q... (flutter/engine#37566) (flutter/flutter#115236)

* 1a460cf 54795869b Roll Skia from c0f87aed019b to 38edf6197aa9 (1 revision) (flutter/engine#37567) (flutter/flutter#115239)

* 8230ef5 Revert "[web] Add `--local-web-sdk` flag and use precompiled platform kernels for dart2js and ddc (#114639)" (flutter/flutter#115242)

* 8994920 7269f2f91 Roll Skia from 38edf6197aa9 to 0f515e97d535 (1 revision) (flutter/engine#37571) (flutter/flutter#115244)

* 7ac00f7 40b071c75 Roll Fuchsia Linux SDK from IE4logHFoa8ZZQAw3... to AE_mBWzdDqUvn4r1N... (flutter/engine#37572) (flutter/flutter#115247)

* fa94a3c b63e6cf55 [Impeller] dont include sampler offset in float offset (flutter/engine#37573) (flutter/flutter#115248)

* cb224d1 b7567b92c Roll Fuchsia Mac SDK from N-iOLgSVYYh_AfC7Q... to WYzUv6RnWjJpAiqYp... (flutter/engine#37575) (flutter/flutter#115252)

* d587fe4 a1b5507e5 Add playground to demonstrate mask blur problems (flutter/engine#37574) (flutter/flutter#115260)

* f5205b1 6f7447efa Roll Fuchsia Linux SDK from AE_mBWzdDqUvn4r1N... to dRHIZSishiboEHMdw... (flutter/engine#37577) (flutter/flutter#115266)

* 2c4051f b077c1c46 Roll Dart SDK from 996fe4d7ea9a to 45b7433f9015 (1 revision) (flutter/engine#37578) (flutter/flutter#115271)

* 0b5f3fd 743cec5ba Roll Skia from 0f515e97d535 to b2109e6bbbe7 (1 revision) (flutter/engine#37580) (flutter/flutter#115279)

* 80bcc3a 035313ae2 Roll Dart SDK from 45b7433f9015 to 7cbcf48157cf (1 revision) (flutter/engine#37582) (flutter/flutter#115281)

* fdd2fe4 036f8ea88 Roll Fuchsia Mac SDK from WYzUv6RnWjJpAiqYp... to XvXKIR_SSUfSyGwxe... (flutter/engine#37583) (flutter/flutter#115293)

* 436fb4c c290de693 Roll Skia from b2109e6bbbe7 to 2ad14e25f6f7 (7 revisions) (flutter/engine#37585) (flutter/flutter#115294)

* 2449907 Fixed the color curve issue (flutter/flutter#115188)

* 9359c25 1a79e8686 [macOS] Move to new update semantics embedder API (flutter/engine#37404) (flutter/flutter#115301)

* 59e1edc Roll Flutter Engine from 1a79e8686036 to 8c73ffff5b6f (2 revisions) (flutter/flutter#115302)

* f2ec1c4 42bc762b6 Roll Skia from 2ad14e25f6f7 to a434f9b69660 (11 revisions) (flutter/engine#37591) (flutter/flutter#115304)

* ea4e11d Fix test in preparation of the Dart VM dropping support for language versions < 2.12.0 (flutter/flutter#115176)

* a0a7b3a 14ecaeb91 [Impeller] error earlier on uint types (flutter/engine#37593) (flutter/flutter#115308)

* 2e51077 Do not strip architecture suffixes from host local-engine (flutter/flutter#115320)

* 8e3ea14 Incorrect rendering of `SnapshotWidget` (flutter/flutter#114400)

* 59ecc75 [flutter_tools] add uint compilation test (flutter/flutter#115317)

* 1aeb172 Roll Flutter Engine from 14ecaeb915e0 to 78ae2414003a (10 revisions) (flutter/flutter#115335)

* e391812 9dedab305 Roll Skia from b474a43dcc34 to 2cebc1ce363c (2 revisions) (flutter/engine#37612) (flutter/flutter#115338)

* 9d64a0f 31ee28684 Combine results of all the test batches. (flutter/engine#37610) (flutter/flutter#115340)

* e9c6212 [Impeller] Add shader include with FlutterFragCoord for use by FragmentProgram (flutter/flutter#114214)

* a27bb3c 06bd5a816 Roll Skia from 2cebc1ce363c to d758b240cad0 (1 revision) (flutter/engine#37614) (flutter/flutter#115341)

* abbffcc c6a513ecd Roll Fuchsia Mac SDK from XvXKIR_SSUfSyGwxe... to 32kfSm94FGtJJeUjg... (flutter/engine#37615) (flutter/flutter#115344)

* 0f56ed1 f01de9f6b Roll Skia from d758b240cad0 to 24523449b1b3 (1 revision) (flutter/engine#37616) (flutter/flutter#115346)

* 25d74e6 0b338ed86 Roll Dart SDK from 6f5478a58387 to 987faaf6d1d4 (2 revisions) (flutter/engine#37617) (flutter/flutter#115352)

* 1f28f99 721fbe111 Roll Skia from 24523449b1b3 to 4d519a8ba97a (3 revisions) (flutter/engine#37618) (flutter/flutter#115354)

* c37f255 [tools] Fix plugin_ffi template lint violation (flutter/flutter#115356)

* 3c3f136 b4fd07fa4 Roll Dart SDK from 987faaf6d1d4 to 42f87c0521f8 (1 revision) (flutter/engine#37619) (flutter/flutter#115362)

* 2ed5283 58495f077 [Impeller] Add debug names to additional VK objects (flutter/engine#37592) (flutter/flutter#115363)

* afafde6 7f74f34a4 Roll Fuchsia Linux SDK from B0OuUvWOY24LI1WoF... to agStiOtzmc9Fmw6gc... (flutter/engine#37621) (flutter/flutter#115365)

* af2ec91 Roll Plugins from 3ca3410 to e500884 (10 revisions) (flutter/flutter#115366)

* 3a298d0 Roll Flutter Engine from 7f74f34a408a to eead7b0d8656 (2 revisions) (flutter/flutter#115369)

* acf01eb 905862722 [dart] Run generate_sdk_version_file.py to be compatible with dart ch… (flutter/engine#37624) (flutter/flutter#115372)

* 95ace11 Include initial offset when using PlatformViewSurface (flutter/flutter#114103)

* 39a9ed5 Updated tokens to v0.141 (flutter/flutter#115298)

* ba47c29 216702f3d Roll Skia from 1991515dd191 to 826b3ea577f3 (4 revisions) (flutter/engine#37628) (flutter/flutter#115377)

* 2d77ac5 49f8326df Roll Skia from 826b3ea577f3 to 02e2101a75f7 (4 revisions) (flutter/engine#37631) (flutter/flutter#115385)

* 136b46b Hint text semantics to be excluded in a11y read out if textfield in not empty and label text is provided  (flutter/flutter#115010)

* 700de09 Change button and label text to sentence case for Material 3 (flutter/flutter#115187)

* b2b8391 Roll Flutter Engine from 49f8326df6f0 to 84cb1f833ac4 (3 revisions) (flutter/flutter#115387)

* 2c44f4a Remove dev branch reference from build ios-frameworks error (flutter/flutter#115166)

* 792eefe Roll Flutter Engine from 84cb1f833ac4 to af6e47f1d5c4 (4 revisions) (flutter/flutter#115395)

* 341a9b1 6d41b2ffb update Scene.toImageSync test to use proper bounds in the request (flutter/engine#37638) (flutter/flutter#115398)

* e66183d Bump github/codeql-action from 2.1.25 to 2.1.32 (flutter/flutter#115394)

* d0e5b2f Add a way to customize padding in BottomAppBar  (flutter/flutter#115175)

* 349d648 baad8f2c5 Roll Skia from 02e2101a75f7 to cfb6de45f39b (7 revisions) (flutter/engine#37640) (flutter/flutter#115399)

* 7d2b011 Fix logic error in `markNeedsPaint` (flutter/flutter#112735)

* 93c4b09 Add `RestorableEnumN<T>` and `RestorableEnum<T>` to restorable primitive types (flutter/flutter#115050)

* 2c1536a Create a main alias for master channel. (flutter/flutter#115388)

* bbb349b Roll Flutter Engine from baad8f2c553b to e56ed93faab5 (6 revisions) (flutter/flutter#115406)

* bacd770 c062f7ea7 Roll Skia from cfb6de45f39b to cdf8348e6fba (4 revisions) (flutter/engine#37649) (flutter/flutter#115407)

* 27ff6a5 Roll Flutter Engine from c062f7ea7195 to 03e9a97f8abe (3 revisions) (flutter/flutter#115410)

* 58728c6 Roll Flutter Engine from 03e9a97f8abe to 21a572e4e4d0 (2 revisions) (flutter/flutter#115411)

* e54c8a8e2 3e15c1925 Roll Dart SDK from 7163c9627d98 to c3f1b3642181 (2 revisions) (flutter/engine#37664) (flutter/flutter#115417)

* 484e09e Roll Flutter Engine from 3e15c192560f to 0241f18cbedf (2 revisions) (flutter/flutter#115423)

* 4fdaf7a Revert "Roll Flutter Engine from 3e15c192560f to 0241f18cbedf (2 revisions) (#115423)" (flutter/flutter#115456)

* 4301731 Make Flutter Driver actively wait for runnable isolate (flutter/flutter#113969)

* c940f31 Marks Mac_ios flavors_test_ios to be unflaky (flutter/flutter#115458)

* 243a830 Roll Flutter Engine from 3e15c192560f to 223e1f092dd5 (4 revisions) (flutter/flutter#115463)

* d7454d5 removing default values for [reporter] and [timeout] in flutter test (flutter/flutter#115160)

* a2233ea [flutter_tools] remove all body_might_complete_normally_catch_error ignores (flutter/flutter#115184)

* b5345ff d72164776 Revert "[Impeller] Refactor color source resolution to use explicit factory types (#37656)" (flutter/engine#37673) (flutter/flutter#115467)

* dcae424 [tools]build ipa validate template icon files (flutter/flutter#114841)
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Nov 17, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Nov 18, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Nov 18, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Nov 18, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Nov 18, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Nov 18, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Nov 18, 2022
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Nov 18, 2022
shogohida pushed a commit to shogohida/flutter that referenced this pull request Dec 7, 2022
gspencergoog pushed a commit to gspencergoog/flutter that referenced this pull request Jan 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
e: impeller Impeller rendering backend issues and features requests f: material design flutter/packages/flutter/material repository. framework flutter/packages/flutter repository. See also f: labels. tool Affects the "flutter" command-line tool. See also t: labels.
Projects
No open projects
Archived in project
Development

Successfully merging this pull request may close these issues.

4 participants