use crate::types::{DepthFormat, TextureFormat, SamplerDesc};
use super::super::{DeviceHandle, BufferHandle};
use windows::Win32::Graphics::{Direct3D12, Dxgi};
pub(crate) struct DxgiAdapterInfo {
pub adapter: Dxgi::IDXGIAdapter1,
pub desc: Dxgi::DXGI_ADAPTER_DESC1,
pub adapter_id: u32,
}
pub(crate) struct LogicalDevice {
pub device: Direct3D12::ID3D12Device,
pub adapter_id: u32,
pub command_queue: Direct3D12::ID3D12CommandQueue,
pub command_allocator: Direct3D12::ID3D12CommandAllocator,
pub rtv_heap: Direct3D12::ID3D12DescriptorHeap,
pub rtv_descriptor_size: u32,
pub dsv_heap: Direct3D12::ID3D12DescriptorHeap,
pub dsv_descriptor_size: u32,
pub cbv_srv_uav_heap: Direct3D12::ID3D12DescriptorHeap,
pub cbv_srv_uav_descriptor_size: u32,
pub sampler_heap: Direct3D12::ID3D12DescriptorHeap,
pub sampler_descriptor_size: u32,
pub fence: Direct3D12::ID3D12Fence,
pub fence_value: u64,
}
pub(crate) struct BufferState {
pub device_handle: DeviceHandle,
pub resource: Direct3D12::ID3D12Resource,
pub size: u64,
}
pub(crate) struct ShaderState {
pub device_handle: DeviceHandle,
pub slang_source: String,
pub vertex_bytecode: Option<Vec<u8>>,
pub fragment_bytecode: Option<Vec<u8>>,
pub compute_bytecode: Option<Vec<u8>>,
}
pub(crate) struct PipelineState {
pub device_handle: DeviceHandle,
pub pipeline_state: Direct3D12::ID3D12PipelineState,
pub root_signature: Direct3D12::ID3D12RootSignature,
pub vertex_stride: u32,
}
pub(crate) struct ComputePipelineState {
pub device_handle: DeviceHandle,
pub pipeline_state: Direct3D12::ID3D12PipelineState,
pub root_signature: Direct3D12::ID3D12RootSignature,
pub bind_group_layouts: Vec<super::super::BindGroupLayoutHandle>,
}
pub(crate) struct BindGroupLayoutState {
pub device_handle: DeviceHandle,
pub entries: Vec<super::super::BindGroupLayoutEntry>,
}
pub(crate) struct BindGroupState {
pub device_handle: DeviceHandle,
pub layout_handle: super::super::BindGroupLayoutHandle,
pub buffer_bindings: Vec<(u32, BufferHandle, u64, u64)>, }
pub(crate) struct RenderTargetState {
pub device_handle: DeviceHandle,
pub width: u32,
pub height: u32,
pub format: TextureFormat,
pub texture: Direct3D12::ID3D12Resource,
pub rtv_offset: u32,
pub depth_format: Option<DepthFormat>,
pub depth_texture: Option<Direct3D12::ID3D12Resource>,
pub dsv_offset: Option<u32>,
pub staging_buffer: Option<Direct3D12::ID3D12Resource>,
pub command_list: Direct3D12::ID3D12GraphicsCommandList,
pub has_rendered: bool,
}
pub(crate) struct TextureState {
pub device_handle: DeviceHandle,
pub width: u32,
pub height: u32,
pub format: TextureFormat,
pub resource: Direct3D12::ID3D12Resource,
pub srv_offset: u32,
}
pub(crate) struct SamplerState {
pub device_handle: DeviceHandle,
pub sampler_offset: u32,
#[allow(dead_code)]
pub desc: SamplerDesc,
}
pub const MAX_FRAMES_IN_FLIGHT: usize = 2;
pub(crate) struct FrameSync {
pub command_list: Direct3D12::ID3D12GraphicsCommandList,
pub command_allocator: Direct3D12::ID3D12CommandAllocator,
pub fence_value: u64,
}
pub(crate) struct SurfaceState {
pub device_handle: DeviceHandle,
pub swapchain: Dxgi::IDXGISwapChain3,
pub render_targets: Vec<Direct3D12::ID3D12Resource>,
pub rtv_offsets: Vec<u32>,
pub width: u32,
pub height: u32,
pub format: Dxgi::Common::DXGI_FORMAT,
pub current_frame: usize,
pub current_image_index: Option<u32>,
pub frame_sync: Vec<FrameSync>,
}