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

This commit is contained in:
firestar99
2025-09-07 20:29:44 +02:00
parent 0a052b8d77
commit e9a8d4fa84
3 changed files with 20 additions and 6 deletions

View File

@@ -134,10 +134,11 @@ pub use gpu::GPU;
mod gpu {
use super::*;
use crate::raster_types::__private::Sealed;
use std::sync::Arc;
#[derive(Clone, Debug, PartialEq, Hash)]
pub struct GPU {
pub texture: wgpu::Texture,
pub texture: Arc<InnerTexture>,
}
impl Sealed for Raster<GPU> {}
@@ -150,7 +151,9 @@ mod gpu {
impl Raster<GPU> {
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 {
@@ -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) {
self.texture.destroy();
self.0.destroy();
}
}
}

View File

@@ -140,7 +140,7 @@ impl WgpuExecutor {
let mut renderer = self.vello_renderer.lock().await;
for (image, texture) in context.resource_overrides.iter() {
let texture_view = wgpu::TexelCopyTextureInfoBase {
texture: texture.texture.clone(),
texture: wgpu::Texture::clone(&texture.texture),
mip_level: 0,
origin: Origin3d::ZERO,
aspect: TextureAspect::All,

View File

@@ -230,7 +230,7 @@ impl PerPixelAdjustGraphicsPipeline {
rp.draw(0..3, 0..1);
TableRow {
element: Raster::new(GPU { texture: tex_out }),
element: Raster::new_gpu(tex_out),
transform: *instance.transform,
alpha_blending: *instance.alpha_blending,
source_node_id: *instance.source_node_id,