mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
Debug implementations for root descriptors
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
use crate::{com::WeakPtr, Blob, D3DResult, Error, TextureAddressMode};
|
||||
use std::{mem, ops::Range};
|
||||
use std::{fmt, mem, ops::Range};
|
||||
use winapi::{shared::dxgiformat, um::d3d12};
|
||||
|
||||
pub type CpuDescriptor = d3d12::D3D12_CPU_DESCRIPTOR_HANDLE;
|
||||
@@ -7,8 +7,8 @@ pub type GpuDescriptor = d3d12::D3D12_GPU_DESCRIPTOR_HANDLE;
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub struct Binding {
|
||||
pub register: u32,
|
||||
pub space: u32,
|
||||
pub register: u32,
|
||||
}
|
||||
|
||||
#[repr(u32)]
|
||||
@@ -72,6 +72,19 @@ impl DescriptorRange {
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for DescriptorRange {
|
||||
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||
formatter
|
||||
.debug_struct("DescriptorRange")
|
||||
.field("range_type", &self.0.RangeType)
|
||||
.field("num", &self.0.NumDescriptors)
|
||||
.field("register_space", &self.0.RegisterSpace)
|
||||
.field("base_register", &self.0.BaseShaderRegister)
|
||||
.field("table_offset", &self.0.OffsetInDescriptorsFromTableStart)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(transparent)]
|
||||
pub struct RootParameter(d3d12::D3D12_ROOT_PARAMETER);
|
||||
impl RootParameter {
|
||||
@@ -139,6 +152,57 @@ impl RootParameter {
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for RootParameter {
|
||||
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||
#[derive(Debug)]
|
||||
enum Inner<'a> {
|
||||
Table(&'a [DescriptorRange]),
|
||||
Constants { binding: Binding, num: u32 },
|
||||
SingleCbv(Binding),
|
||||
SingleSrv(Binding),
|
||||
SingleUav(Binding),
|
||||
}
|
||||
let kind = match self.0.ParameterType {
|
||||
d3d12::D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE => unsafe {
|
||||
let raw = self.0.u.DescriptorTable();
|
||||
Inner::Table(std::slice::from_raw_parts(
|
||||
raw.pDescriptorRanges as *const _,
|
||||
raw.NumDescriptorRanges as usize,
|
||||
))
|
||||
},
|
||||
d3d12::D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS => unsafe {
|
||||
let raw = self.0.u.Constants();
|
||||
Inner::Constants {
|
||||
binding: Binding {
|
||||
space: raw.RegisterSpace,
|
||||
register: raw.ShaderRegister,
|
||||
},
|
||||
num: raw.Num32BitValues,
|
||||
}
|
||||
},
|
||||
_ => unsafe {
|
||||
let raw = self.0.u.Descriptor();
|
||||
let binding = Binding {
|
||||
space: raw.RegisterSpace,
|
||||
register: raw.ShaderRegister,
|
||||
};
|
||||
match self.0.ParameterType {
|
||||
d3d12::D3D12_ROOT_PARAMETER_TYPE_CBV => Inner::SingleCbv(binding),
|
||||
d3d12::D3D12_ROOT_PARAMETER_TYPE_SRV => Inner::SingleSrv(binding),
|
||||
d3d12::D3D12_ROOT_PARAMETER_TYPE_UAV => Inner::SingleUav(binding),
|
||||
other => panic!("Unexpected type {:?}", other),
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
formatter
|
||||
.debug_struct("RootParameter")
|
||||
.field("visibility", &self.0.ShaderVisibility)
|
||||
.field("kind", &kind)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(u32)]
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub enum StaticBorderColor {
|
||||
|
||||
Reference in New Issue
Block a user