web: Enable webgpu

This commit is contained in:
Nathan Adams 2024-01-16 22:35:43 +01:00
parent 78963ba15b
commit c63f51f823
3 changed files with 23 additions and 9 deletions

View File

@ -59,14 +59,22 @@ pub struct WgpuRenderBackend<T: RenderTarget> {
impl WgpuRenderBackend<SwapChainTarget> {
#[cfg(target_family = "wasm")]
pub async fn for_canvas(canvas: web_sys::HtmlCanvasElement) -> Result<Self, Error> {
pub async fn for_canvas(
canvas: web_sys::HtmlCanvasElement,
webgpu: bool,
) -> Result<Self, Error> {
let backends = if webgpu {
wgpu::Backends::BROWSER_WEBGPU
} else {
wgpu::Backends::GL
};
let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
backends: wgpu::Backends::BROWSER_WEBGPU | wgpu::Backends::GL,
backends,
..Default::default()
});
let surface = instance.create_surface(wgpu::SurfaceTarget::Canvas(canvas))?;
let (adapter, device, queue) = request_adapter_and_device(
wgpu::Backends::BROWSER_WEBGPU | wgpu::Backends::GL,
backends,
&instance,
Some(&surface),
wgpu::PowerPreference::HighPerformance,

View File

@ -16,7 +16,7 @@ workspace = true
crate-type = ["cdylib", "rlib"]
[features]
default = ["canvas", "console_error_panic_hook", "webgl", "wgpu-webgl"]
default = ["canvas", "console_error_panic_hook", "webgl", "wgpu-webgl", "webgpu"]
# core features
avm_debug = ["ruffle_core/avm_debug"]

View File

@ -1628,7 +1628,7 @@ async fn create_renderer(
let _is_transparent = config.wmode.as_deref() == Some("transparent");
let mut renderer_list = vec!["webgpu", "wgpu-webgl", "webgl", "canvas"];
let mut renderer_list = vec!["wgpu-webgl", "webgpu", "webgl", "canvas"];
if let Some(preferred_renderer) = &config.preferred_renderer {
if let Some(pos) = renderer_list.iter().position(|&r| r == preferred_renderer) {
renderer_list.remove(pos);
@ -1660,7 +1660,10 @@ async fn create_renderer(
.dyn_into()
.map_err(|_| "Expected HtmlCanvasElement")?;
match ruffle_render_wgpu::backend::WgpuRenderBackend::for_canvas(canvas.clone())
match ruffle_render_wgpu::backend::WgpuRenderBackend::for_canvas(
canvas.clone(),
true,
)
.await
{
Ok(renderer) => {
@ -1681,7 +1684,10 @@ async fn create_renderer(
.dyn_into()
.map_err(|_| "Expected HtmlCanvasElement")?;
match ruffle_render_wgpu::backend::WgpuRenderBackend::for_canvas(canvas.clone())
match ruffle_render_wgpu::backend::WgpuRenderBackend::for_canvas(
canvas.clone(),
false,
)
.await
{
Ok(renderer) => {