DynDevice create/destroy bind group layout

This commit is contained in:
Andreas Reich 2024-07-27 12:35:22 +02:00
parent 05a09338cd
commit 1da319f804
7 changed files with 33 additions and 4 deletions

View File

@ -555,6 +555,8 @@ pub struct BindGroupLayout {
copy_counts: Vec<u32>, // all 1's
}
impl crate::DynBindGroupLayout for BindGroupLayout {}
#[derive(Debug, Clone, Copy)]
enum BufferViewKind {
Constant,

View File

@ -2,12 +2,14 @@
#![allow(trivial_casts)]
use crate::{
Api, BufferDescriptor, BufferMapping, CommandEncoderDescriptor, Device, DeviceError, DynBuffer,
DynResource, MemoryRange, SamplerDescriptor, TextureDescriptor, TextureViewDescriptor,
Api, BindGroupLayoutDescriptor, BufferDescriptor, BufferMapping, CommandEncoderDescriptor,
Device, DeviceError, DynBuffer, DynResource, MemoryRange, SamplerDescriptor, TextureDescriptor,
TextureViewDescriptor,
};
use super::{
DynCommandEncoder, DynQueue, DynResourceExt as _, DynSampler, DynTexture, DynTextureView,
DynBindGroupLayout, DynCommandEncoder, DynQueue, DynResourceExt as _, DynSampler, DynTexture,
DynTextureView,
};
pub trait DynDevice: DynResource {
@ -51,6 +53,12 @@ pub trait DynDevice: DynResource {
desc: &CommandEncoderDescriptor<dyn DynQueue>,
) -> Result<Box<dyn DynCommandEncoder>, DeviceError>;
unsafe fn destroy_command_encoder(&self, pool: Box<dyn DynCommandEncoder>);
unsafe fn create_bind_group_layout(
&self,
desc: &BindGroupLayoutDescriptor,
) -> Result<Box<dyn DynBindGroupLayout>, DeviceError>;
unsafe fn destroy_bind_group_layout(&self, bg_layout: Box<dyn DynBindGroupLayout>);
}
impl<D: Device + DynResource> DynDevice for D {
@ -151,4 +159,16 @@ impl<D: Device + DynResource> DynDevice for D {
unsafe fn destroy_command_encoder(&self, encoder: Box<dyn DynCommandEncoder>) {
unsafe { D::destroy_command_encoder(self, encoder.unbox()) };
}
unsafe fn create_bind_group_layout(
&self,
desc: &BindGroupLayoutDescriptor,
) -> Result<Box<dyn DynBindGroupLayout>, DeviceError> {
unsafe { D::create_bind_group_layout(self, desc) }
.map(|b| Box::new(b) as Box<dyn DynBindGroupLayout>)
}
unsafe fn destroy_bind_group_layout(&self, bg_layout: Box<dyn DynBindGroupLayout>) {
unsafe { D::destroy_bind_group_layout(self, bg_layout.unbox()) };
}
}

View File

@ -43,6 +43,7 @@ impl crate::Api for Api {
crate::impl_dyn_resource!(Context, Encoder, Resource);
impl crate::DynBindGroup for Resource {}
impl crate::DynBindGroupLayout for Resource {}
impl crate::DynBuffer for Resource {}
impl crate::DynCommandBuffer for Resource {}
impl crate::DynComputePipeline for Resource {}

View File

@ -485,6 +485,8 @@ pub struct BindGroupLayout {
entries: Arc<[wgt::BindGroupLayoutEntry]>,
}
impl crate::DynBindGroupLayout for BindGroupLayout {}
#[derive(Debug)]
struct BindGroupLayoutInfo {
entries: Arc<[wgt::BindGroupLayoutEntry]>,

View File

@ -435,7 +435,7 @@ pub trait Api: Clone + fmt::Debug + Sized {
/// finished.
type Fence: DynFence + fmt::Debug;
type BindGroupLayout: fmt::Debug + WasmNotSendSync;
type BindGroupLayout: DynBindGroupLayout + fmt::Debug;
type BindGroup: DynBindGroup;
type PipelineLayout: DynPipelineLayout;
type ShaderModule: DynShaderModule;

View File

@ -560,6 +560,8 @@ pub struct BindGroupLayout {
entries: Arc<[wgt::BindGroupLayoutEntry]>,
}
impl crate::DynBindGroupLayout for BindGroupLayout {}
#[derive(Clone, Debug, Default)]
struct ResourceData<T> {
buffers: T,

View File

@ -727,6 +727,8 @@ pub struct BindGroupLayout {
binding_arrays: Vec<(u32, NonZeroU32)>,
}
impl crate::DynBindGroupLayout for BindGroupLayout {}
#[derive(Debug)]
pub struct PipelineLayout {
raw: vk::PipelineLayout,