From e1734a2bec8aed85c529ff1a7cdabf08edbebc40 Mon Sep 17 00:00:00 2001 From: relrelb Date: Fri, 19 Mar 2021 13:22:06 +0200 Subject: [PATCH] wgpu: Inline IncompleteDrawType::build --- render/wgpu/src/lib.rs | 141 ++++++++++++++++++++++++++++++++++--- render/wgpu/src/shapes.rs | 144 -------------------------------------- 2 files changed, 130 insertions(+), 155 deletions(-) diff --git a/render/wgpu/src/lib.rs b/render/wgpu/src/lib.rs index 885f37da8..6ad53c283 100644 --- a/render/wgpu/src/lib.rs +++ b/render/wgpu/src/lib.rs @@ -345,31 +345,150 @@ impl WgpuRenderBackend { return; } - let vbo = create_buffer_with_data( + let vertex_buffer = create_buffer_with_data( device, bytemuck::cast_slice(&lyon_mesh.vertices), wgpu::BufferUsage::VERTEX, create_debug_label!("Shape {} ({}) vbo", shape_id, draw.name()), ); - let ibo = create_buffer_with_data( + let index_buffer = create_buffer_with_data( device, bytemuck::cast_slice(&lyon_mesh.indices), wgpu::BufferUsage::INDEX, create_debug_label!("Shape {} ({}) ibo", shape_id, draw.name()), ); + let index_count = lyon_mesh.indices.len() as u32; let draw_id = draws.len(); - draws.push(draw.build( - device, - vbo, - ibo, - lyon_mesh.indices.len() as u32, - pipelines, - shape_id, - draw_id, - )); + draws.push(match draw { + IncompleteDrawType::Color => Draw { + draw_type: DrawType::Color, + vertex_buffer, + index_buffer, + index_count, + }, + IncompleteDrawType::Gradient { + texture_transform, + gradient, + } => { + let tex_transforms_ubo = create_buffer_with_data( + device, + bytemuck::cast_slice(&[texture_transform]), + wgpu::BufferUsage::UNIFORM, + create_debug_label!( + "Shape {} draw {} textransforms ubo transfer buffer", + shape_id, + draw_id + ), + ); + + let gradient_ubo = create_buffer_with_data( + device, + bytemuck::cast_slice(&[gradient]), + wgpu::BufferUsage::STORAGE, + create_debug_label!( + "Shape {} draw {} gradient ubo transfer buffer", + shape_id, + draw_id + ), + ); + + let bind_group_label = + create_debug_label!("Shape {} (gradient) draw {} bindgroup", shape_id, draw_id); + let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + layout: &pipelines.gradient_layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::Buffer { + buffer: &tex_transforms_ubo, + offset: 0, + size: wgpu::BufferSize::new( + std::mem::size_of::() as u64 + ), + }, + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::Buffer { + buffer: &gradient_ubo, + offset: 0, + size: wgpu::BufferSize::new( + std::mem::size_of::() as u64 + ), + }, + }, + ], + label: bind_group_label.as_deref(), + }); + + Draw { + draw_type: DrawType::Gradient { + texture_transforms: tex_transforms_ubo, + gradient: gradient_ubo, + bind_group, + }, + vertex_buffer, + index_buffer, + index_count, + } + } + IncompleteDrawType::Bitmap { + texture_transform, + is_smoothed, + is_repeating, + texture_view, + } => { + let tex_transforms_ubo = create_buffer_with_data( + device, + bytemuck::cast_slice(&[texture_transform]), + wgpu::BufferUsage::UNIFORM, + create_debug_label!( + "Shape {} draw {} textransforms ubo transfer buffer", + shape_id, + draw_id + ), + ); + + let bind_group_label = + create_debug_label!("Shape {} (bitmap) draw {} bindgroup", shape_id, draw_id); + let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { + layout: &pipelines.bitmap_layout, + entries: &[ + wgpu::BindGroupEntry { + binding: 0, + resource: wgpu::BindingResource::Buffer { + buffer: &tex_transforms_ubo, + offset: 0, + size: wgpu::BufferSize::new( + std::mem::size_of::() as u64 + ), + }, + }, + wgpu::BindGroupEntry { + binding: 1, + resource: wgpu::BindingResource::TextureView(&texture_view), + }, + ], + label: bind_group_label.as_deref(), + }); + + Draw { + draw_type: DrawType::Bitmap { + texture_transforms: tex_transforms_ubo, + texture_view, + is_smoothed, + is_repeating, + bind_group, + }, + vertex_buffer, + index_buffer, + index_count, + } + } + }); *lyon_mesh = VertexBuffers::new(); } diff --git a/render/wgpu/src/shapes.rs b/render/wgpu/src/shapes.rs index f168777ab..94ccf4bce 100644 --- a/render/wgpu/src/shapes.rs +++ b/render/wgpu/src/shapes.rs @@ -1,9 +1,5 @@ -use crate::pipelines::Pipelines; -use crate::utils::create_buffer_with_data; -use crate::TextureTransforms; use bytemuck::{Pod, Zeroable}; use ruffle_core::backend::audio::swf::CharacterId; -use wgpu::BufferSize; #[repr(C)] #[derive(Copy, Clone, Debug, Pod, Zeroable)] @@ -72,144 +68,4 @@ impl IncompleteDrawType { IncompleteDrawType::Bitmap { .. } => "Bitmap", } } - - #[allow(clippy::too_many_arguments)] - pub fn build( - self, - device: &wgpu::Device, - vertex_buffer: wgpu::Buffer, - index_buffer: wgpu::Buffer, - index_count: u32, - pipelines: &Pipelines, - shape_id: CharacterId, - draw_id: usize, - ) -> Draw { - match self { - IncompleteDrawType::Color => Draw { - draw_type: DrawType::Color, - vertex_buffer, - index_buffer, - index_count, - }, - IncompleteDrawType::Gradient { - texture_transform, - gradient, - } => { - let tex_transforms_ubo = create_buffer_with_data( - device, - bytemuck::cast_slice(&[texture_transform]), - wgpu::BufferUsage::UNIFORM, - create_debug_label!( - "Shape {} draw {} textransforms ubo transfer buffer", - shape_id, - draw_id - ), - ); - - let gradient_ubo = create_buffer_with_data( - device, - bytemuck::cast_slice(&[gradient]), - wgpu::BufferUsage::STORAGE, - create_debug_label!( - "Shape {} draw {} gradient ubo transfer buffer", - shape_id, - draw_id - ), - ); - - let bind_group_label = - create_debug_label!("Shape {} (gradient) draw {} bindgroup", shape_id, draw_id); - let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { - layout: &pipelines.gradient_layout, - entries: &[ - wgpu::BindGroupEntry { - binding: 0, - resource: wgpu::BindingResource::Buffer { - buffer: &tex_transforms_ubo, - offset: 0, - size: BufferSize::new( - std::mem::size_of::() as u64 - ), - }, - }, - wgpu::BindGroupEntry { - binding: 1, - resource: wgpu::BindingResource::Buffer { - buffer: &gradient_ubo, - offset: 0, - size: BufferSize::new( - std::mem::size_of::() as u64 - ), - }, - }, - ], - label: bind_group_label.as_deref(), - }); - - Draw { - draw_type: DrawType::Gradient { - texture_transforms: tex_transforms_ubo, - gradient: gradient_ubo, - bind_group, - }, - vertex_buffer, - index_buffer, - index_count, - } - } - IncompleteDrawType::Bitmap { - texture_transform, - is_smoothed, - is_repeating, - texture_view, - } => { - let tex_transforms_ubo = create_buffer_with_data( - device, - bytemuck::cast_slice(&[texture_transform]), - wgpu::BufferUsage::UNIFORM, - create_debug_label!( - "Shape {} draw {} textransforms ubo transfer buffer", - shape_id, - draw_id - ), - ); - - let bind_group_label = - create_debug_label!("Shape {} (bitmap) draw {} bindgroup", shape_id, draw_id); - let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { - layout: &pipelines.bitmap_layout, - entries: &[ - wgpu::BindGroupEntry { - binding: 0, - resource: wgpu::BindingResource::Buffer { - buffer: &tex_transforms_ubo, - offset: 0, - size: BufferSize::new( - std::mem::size_of::() as u64 - ), - }, - }, - wgpu::BindGroupEntry { - binding: 1, - resource: wgpu::BindingResource::TextureView(&texture_view), - }, - ], - label: bind_group_label.as_deref(), - }); - - Draw { - draw_type: DrawType::Bitmap { - texture_transforms: tex_transforms_ubo, - texture_view, - is_smoothed, - is_repeating, - bind_group, - }, - vertex_buffer, - index_buffer, - index_count, - } - } - } - } }