[Flutter GPU] Runtime shader import. (#48875) * Add `--shader-bundle` mode to impellerc that takes a simple JSON spec and produces a single flatbuffer with a pack of named shaders. * Added "single invocation" mode to the impellerc GN templates. * Record vertex attribute reflection information. * Light refactoring of the compiler frontend to make compiler invocations easier to follow. Example shader bundle spec (json form of the yaml spec as shown in the [Flutter GPU](https://docs.google.com/document/d/1Sh1BAC5c_kkuMVreo7ymBzPoMzb7lamZRPsI7GBXv5M/edit?resourcekey=0-5w8u2V-LS41tCHeoE8bDTQ#heading=h.a3gmnzue7wgq) doc): ```json { "UnlitFragment": { "type": "fragment", "file": "shaders/flutter_gpu_unlit.frag" }, "UnlitVertex": { "type": "vertex", "file": "shaders/flutter_gpu_unlit.vert" }, "TextureFragment": { "type": "fragment", "file": "shaders/flutter_gpu_texture.frag" }, "TextureVertex": { "type": "vertex", "file": "shaders/flutter_gpu_texture.vert" } } ``` Example impellerc invocation: ```bash impellerc \ --include=~/projects/flutter/engine/src/flutter/impeller/compiler/shader_lib \ --runtime-stage-metal \ --sl=assets/TestLibrary.shaderbundle \ --shader-bundle='{"UnlitFragment": {"type": "fragment", "file": "shaders/flutter_gpu_unlit.frag"}, "UnlitVertex": {"type": "vertex", "file": "shaders/flutter_gpu_unlit.vert"}, "TextureFragment": {"type": "fragment", "file": "shaders/flutter_gpu_texture.frag"}, "TextureVertex": {"type": "vertex", "file": "shaders/flutter_gpu_texture.vert"}}' ``` Runtime usage: ```dart /// Add a render pass encoder to the command buffer so that we can start /// encoding commands. final encoder = commandBuffer.createRenderPass(renderTarget); /// Load a shader bundle asset. final library = gpu.ShaderLibrary.fromAsset('assets/TestLibrary.shaderbundle')!; /// Create a RenderPipeline using shaders from the asset. final vertex = library['TextureVertex']!; final fragment = library['TextureFragment']!; final pipeline = gpu.gpuContext.createRenderPipeline(vertex, fragment); encoder.bindPipeline(pipeline); ``` https://github.com/flutter/engine/assets/919017/6f3e9a59-d180-4ba6-b14c-fa6d7056965c https://dart.googlesource.com/external/github.com/flutter/engine/+/a14171213eda8c272858702764041495972a69bd
diff --git a/DEPS b/DEPS index 3531bd7..9f49546 100644 --- a/DEPS +++ b/DEPS
@@ -275,7 +275,7 @@ deps = { 'engine/src': 'https://github.com/flutter/buildroot.git' + '@' + '0141e94b34cbd3db77f28796587334857fa985da', - 'engine/src/flutter': Var('flutter_git') + '/mirrors/engine' + '@' + '45b95f264d63845d429ffbda69eab0a61a1af451', + 'engine/src/flutter': Var('flutter_git') + '/mirrors/engine' + '@' + 'a14171213eda8c272858702764041495972a69bd', 'engine/src/third_party/dart': Var('dart_git') + '/sdk' + '@' + '55bd60be32f1ee59c01b1663d798d4356ace5f47',
diff --git a/commits.json b/commits.json index c544212..2ef27bf 100644 --- a/commits.json +++ b/commits.json
@@ -1,5 +1,5 @@ { - "engine/src/flutter":"45b95f264d63845d429ffbda69eab0a61a1af451", + "engine/src/flutter":"a14171213eda8c272858702764041495972a69bd", "engine/src/third_party/dart":"55bd60be32f1ee59c01b1663d798d4356ace5f47", "flutter":"1ff768633a863d7f6b6d0a7f585f6aa7c399df43" } \ No newline at end of file