WIP shaders: wrap Texture in Arc within Raster<GPU>

This commit is contained in:
firestar99
2025-09-07 20:37:55 +02:00
parent 0a052b8d77
commit e9a8d4fa84
3 changed files with 20 additions and 6 deletions
+18 -4
View File
@@ -134,10 +134,11 @@ pub use gpu::GPU;
mod gpu { mod gpu {
use super::*; use super::*;
use crate::raster_types::__private::Sealed; use crate::raster_types::__private::Sealed;
use std::sync::Arc;
#[derive(Clone, Debug, PartialEq, Hash)] #[derive(Clone, Debug, PartialEq, Hash)]
pub struct GPU { pub struct GPU {
pub texture: wgpu::Texture, pub texture: Arc<InnerTexture>,
} }
impl Sealed for Raster<GPU> {} impl Sealed for Raster<GPU> {}
@@ -150,7 +151,9 @@ mod gpu {
impl Raster<GPU> { impl Raster<GPU> {
pub fn new_gpu(texture: wgpu::Texture) -> Self { pub fn new_gpu(texture: wgpu::Texture) -> Self {
Self::new(GPU { texture }) Self::new(GPU {
texture: Arc::new(InnerTexture(texture)),
})
} }
pub fn data(&self) -> &wgpu::Texture { pub fn data(&self) -> &wgpu::Texture {
@@ -158,9 +161,20 @@ mod gpu {
} }
} }
impl Drop for GPU { #[derive(Debug, PartialEq, Hash)]
pub struct InnerTexture(wgpu::Texture);
impl Deref for InnerTexture {
type Target = wgpu::Texture;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl Drop for InnerTexture {
fn drop(&mut self) { fn drop(&mut self) {
self.texture.destroy(); self.0.destroy();
} }
} }
} }
+1 -1
View File
@@ -140,7 +140,7 @@ impl WgpuExecutor {
let mut renderer = self.vello_renderer.lock().await; let mut renderer = self.vello_renderer.lock().await;
for (image, texture) in context.resource_overrides.iter() { for (image, texture) in context.resource_overrides.iter() {
let texture_view = wgpu::TexelCopyTextureInfoBase { let texture_view = wgpu::TexelCopyTextureInfoBase {
texture: texture.texture.clone(), texture: wgpu::Texture::clone(&texture.texture),
mip_level: 0, mip_level: 0,
origin: Origin3d::ZERO, origin: Origin3d::ZERO,
aspect: TextureAspect::All, aspect: TextureAspect::All,
@@ -230,7 +230,7 @@ impl PerPixelAdjustGraphicsPipeline {
rp.draw(0..3, 0..1); rp.draw(0..3, 0..1);
TableRow { TableRow {
element: Raster::new(GPU { texture: tex_out }), element: Raster::new_gpu(tex_out),
transform: *instance.transform, transform: *instance.transform,
alpha_blending: *instance.alpha_blending, alpha_blending: *instance.alpha_blending,
source_node_id: *instance.source_node_id, source_node_id: *instance.source_node_id,