Commit Graph

489 Commits

Author SHA1 Message Date
Adrian Wielgosik 9394f7788c wgpu: Don't use textures for shader cache keys 2024-07-06 22:44:34 +02:00
Kamil Jarosz 2ba5e47b59 render: Implement drawing lines using WebGL
This patch provides an efficient implementation of draw_line
and draw_line_rect for WebGL using Gl::LINE_STRIP.
2024-07-02 23:40:50 +02:00
Kamil Jarosz 9ba6569a2e render: Implement drawing lines using wgpu
This patch provides an efficient implementation of draw_line
and draw_line_rect for wgpu using PrimitiveTopology::LineStrip.
2024-07-02 23:40:50 +02:00
Kamil Jarosz 7dd4d2006e render: Add primitives for drawing lines
This patch adds draw_line and draw_line_rect methods to CommandHandler,
providing empty impls to be overridden by corresponding backends.

The ability to draw lines is described using a new bitflags struct
RenderBackendFeatures, which contains a set of features
supported by the given render backend.
Currently, it contains a DRAW_LINES flag, which informs whether
the backend supports drawing lines as primitives.
2024-07-02 23:40:50 +02:00
Kamil Jarosz 23931ed863 render: Refactor chunk_blends to use CommandHandler
This refactor simplifies code, gets rid of the large number of
parameters, and allows calling other rendering methods from themselves.
The latter is useful for emulating lines on Dx12.
2024-07-02 23:40:50 +02:00
Kamil Jarosz 78b2d84fa7 swf: Add ColorTransform::multiply_from
This method is used to instantiate ColorTransform with its
multiplicative component equal to the given color.
2024-07-02 23:40:50 +02:00
TÖRÖK Attila 9522acf61d render/wgpu: Switch to pipeline-overridable constant for bitmap saturation order toggle
Also call it `late_saturate` instead, to avoid the confusing negation
between the constant name and the (now removed) shader module name.
2024-05-17 22:13:13 +02:00
TÖRÖK Attila 331d1789da render,core,desktop: Port to `wgpu` `v0.20.0`, switch to `egui` `master` 2024-05-17 01:19:01 +03:00
TÖRÖK Attila f9f4c3bb82 render/wgpu: Drop `naga_oil` in favor of manual string manipulation 2024-05-16 20:24:49 +02:00
Nathan Adams e9afce3103 wgpu: Actually, we *do* support opengl on windows now! 2024-03-24 21:04:09 +01:00
Aaron Hill 81604dd21c Request highest 'max_inter_stage_shader_components' supported by adapter
We're currently always requesting a maximum of 31 components, which
is too low for some SWFs.
2024-03-09 15:39:33 -05:00
Nathan Adams baa0c5c7cd desktop: Use custom (de)serialization for preferences, not serde 2024-03-05 00:02:27 +01:00
Nathan Adams b9c6db1cb9 desktop: Add preferences dialog, allow setting of graphics backend/power 2024-03-05 00:02:27 +01:00
Nathan Adams 8df7efb662 desktop: Load graphics preferences from disk 2024-03-05 00:02:27 +01:00
Nathan Adams 2e0e7aec5c wgpu: Remove the readback-upgrade path. It's now slower than normal drawing 2024-02-02 00:59:45 +01:00
Nathan Adams 70af5cd5dd wgpu: Submit occasionally to avoid submitting a large encoder 2024-02-02 00:59:45 +01:00
Nathan Adams fb8f3301b6 wgpu: Queue up offscreen draws, don't do them immediately 2024-02-02 00:59:45 +01:00
Nathan Adams 70fbb4a7ac render: Move away from SyncHandle.retrieve_offscreen_texture to RenderBackend::resolve_sync_handle 2024-02-02 00:59:45 +01:00
Nathan Adams 1a5dff5d12 wgpu: Keep a CommandEncoder for the duration of a frame, extract out a struct to hold it with a StagingBelt 2024-02-02 00:59:45 +01:00
Nathan Adams fcb74d8fbc wgpu: Deduplicate common gradients from a single Mesh 2024-01-27 21:37:22 +01:00
Nathan Adams e479d12af0 render: Make Mesh a struct, not just an alias for Vec<Draw> 2024-01-27 21:37:22 +01:00
Nathan Adams 2d42abcb70 wgpu: Don't use max_uniform_buffer_binding_size as a limit for BufferBuilder when making meshes 2024-01-27 21:37:22 +01:00
Nathan Adams 3be2efe7cf wgpu: Clean up DynamicTransforms, after the merge 2024-01-27 21:37:22 +01:00
Nathan Adams c3423b86f8 wgpu: Use vertex buffer and staging belt for bevel filter 2024-01-27 21:37:22 +01:00
Nathan Adams 7e0bd48061 wgpu: Use vertex buffer and staging belt for glow filter 2024-01-27 21:37:22 +01:00
Nathan Adams 2722a6588e wgpu: Use vertex buffer and staging belt for simple filters 2024-01-27 21:37:22 +01:00
Nathan Adams 9320de354c wgpu: Use staging belt and single buffer for filter arguments 2024-01-27 21:37:22 +01:00
Nathan Adams 76d07faacf wgpu: Make sync index Option<> in make_queue_sync_handle 2024-01-27 21:37:22 +01:00
Nathan Adams f99f89122a wgpu: Remove uniform encoder 2024-01-27 21:37:22 +01:00
Nathan Adams de975a9727 wgpu: Merge Transforms and ColorAdjustments 2024-01-27 21:37:22 +01:00
Nathan Adams 1231d2fead wgpu: Extract out ESTIMATED_OBJECTS_PER_CHUNK, set it to 200 2024-01-27 21:37:22 +01:00
Nathan Adams 574e83f3a3 wgpu: Use max_uniform_buffer_binding_size from adapter 2024-01-27 21:37:22 +01:00
Nathan Adams befce41e11 wgpu: Remove push constant support - simplifies code significantly, and it should be same perf now 2024-01-27 21:37:22 +01:00
Nathan Adams fd604b3a18 wgpu: Try using a single buffer/bindgroup for transform/colortransforms, no longer dynamically allocated 2024-01-27 21:37:22 +01:00
Nathan Adams 6824f33cc6 wgpu: Add limits to BufferBuilder (but currently not respected for Meshes) 2024-01-27 21:37:22 +01:00
Aaron Hill 820e7e828a wgpu: Allow Stage3D texture upload where source is smaller than dest
Fancy Pants World 4 relies on this behavior.
2024-01-25 00:30:10 +01:00
Aaron Hill 1cb24b41b0 render: Support PixelBender ByteArray/Vector.<Number> input/output
When ActionScript uses a ByteArray/Vector.<Number> as a shader input
or target, we create a temporary Rgba32Float texture, and copy the
input float32 bytes to/from the texture.

Unfortunately, wgpu doesn't seem to support an Rgb32Float (3-channel)
texture. When the shader uses 3 channels, we use a Rgba32Float
(4-channel) texture, and manually insert/remove padding for the
alpha channels. This isn't very efficient, but it's the simplest
solution.

The temporary textures themselves aren't cached anywhere - if this
becomes a performance issue, we could look into using some of our
existing wgpu texture/buffer pooling code.
2024-01-24 08:31:52 -05:00
Nathan Adams c63f51f823 web: Enable webgpu 2024-01-21 19:36:08 +01:00
Nathan Adams 4d16e24889 wgpu: Update wgpu and naga to 0.19 2024-01-21 19:36:08 +01:00
Aaron Hill e73819d531 Use supported_sample_count for Context3D sample count
This rounds the requested sample count down to a value
that's supported by the device.
2024-01-21 12:47:13 -05:00
TÖRÖK Attila d153290fd6 nits: Fix a whole bunch of typos all over the place 2024-01-17 23:59:19 +01:00
Aaron Hill b5f28f6caa wgpu: Add support for Stage3D anisotropic filtering
Instead of binding every supported sampler combination
and selecting the correct index in our AGAL builder,
we now determine the correct sampler on the wgpu side,
and create one sampler binding per texture slot.
2024-01-16 18:08:28 -05:00
Aaron Hill 47db84473a avm2: Improve handling of Stage3D profile
We now validate the passed in profile, and return the selected profile
from 'Context3D.profile'. We don't yet alter the available
registers/textures based on the profile.
2024-01-07 22:34:33 +01:00
TÖRÖK Attila badac4176c chore: Stop allowing previously buggy lint `clippy::extra_unused_type_parameters`
The corresponding Clippy issue was fixed long ago.
2023-12-25 19:20:53 -05:00
Aaron Hill 837143bb12 naga-agal: Fix handling of sampler overrides
After some testing, and looking at OpenFL, I believe I've
determined the correct behavior for AGAL sampling:

Each time a Context3D.setProgram or Context3D.setSamplerStateAt
call is made, the sampler config for the used texture slot(s)
is updated with the new wrapping/filter behavior. For setProgram,
this comes from all of the 'tex' opcodes used within the program.

However, when the 'ignoresampler' flag is set in a 'tex' opcode,
the setProgram call does *not* override the existing sampler config.
As a result, that program will sample with the behavior determined
by the most recent setSamplerStateAt or setProgram call involving
the used texture slot(s).

Previously, we were always overriding the opcode sampler config
with the values from Context3D.setSamplerStateAt. However, I didn't
realize that the order of the calls matter, so none of my tests ended
up observing the effect of 'ignoresampler'.

We now need to process AGAL bytecode twice - a quick initial
parse to determine the sampler configs (which need to be updated
when we call 'setProgram'), and a second time when to build the
Naga module (which needs to wait until we have the vertex attributes
available, which can be changed by ActionScript after setting
the program).
2023-12-15 22:05:30 -07:00
TÖRÖK Attila bf9cf92af8 render/wgpu: Update wgpu to 0.18.0, naga to 0.14.1, naga_oil to 0.11.0, egui to 0.24.1 2023-12-14 01:36:42 +01:00
Aaron Hill 44c4080ae4 wgpu: Fix overly strict assertion for setVertexBufferAt
The offsets for bound attributes can overlap, which caused
us to compute the total size incorrectly. Fix this check
to take overlapping into account.
2023-12-08 23:53:39 +01:00
Aaron Hill 46320c6238
wgpu: Round down Context3D sample count to nearest power of 2 (#13762) 2023-10-29 00:18:52 +00:00
Aaron Hill b5097445e6 render: Add support for Context3DTextureFormat.COMPRESSED_ALPHA
This is our first non-rgba texture format (it uses Bc3RgbaUnorm).
ATF files store these textures in a very convoluted way - fortunately,
the 'dds2atf' tool is open-source, which allowed me to figure out
how to decode the texture back to a DXT5/DXT1 texture.
2023-10-23 11:18:27 -04:00
Aaron Hill c93020e729 wgpu: Correctly set format when rendering to Stage3D texture
This fixes a panic when trying to render a texture with a type
other than `TextureFormat::Rgba8Unorm`
2023-10-04 22:47:17 -04:00