69fce3f7f8
* wpgu: Initial implementation of PixelBender shader execution The implementation is split across four crates: * `ruffle_render` now holds the main PixelBender bytecode parsing implementation (previously, this was in `ruffle_core`). * `ruffle_core` holds some helper functions for converting between AVM2 `Value`s and the PixelBender vector types. * `naga-pixelbender` (newly created) constructs a Naga `Module` from parsed PixelBender bytecode * `ruffle_render_wgpu` sets up the render pipeline for the shader constructed by `naga-pixelbender`, and actually executes the shader. The Actionscript-side shader parameters are passed in through uniforms. This allows us to cache the compiled `naga::Module` and associated wgpu types inside `ShaderData`, when it's first created. Each invocation of a `ShaderJob` only needs to create a bind group and render pass. Limitations: * Only a few of the PixelBender opcodes are implemented - however, this is enough to get Stemlands cannon rotation working, as well as a cool "donut" shader that I found and included as a test. * PixelBender matrix types are not supported. * Only BitmapData is supported as an input/output type - Flash Player also supports using Vector and ByteArray * ShaderJob execution is always synchronous. * Adjust comments * Address review comments |
||
---|---|---|
.. | ||
shaders | ||
src | ||
Cargo.toml |