use crate::engine::{DisplayGamut, TransferFunction};
use crate::graph::node::ResourceId;
use crate::graph::pool::TransientPool;
use crate::passes::{FrameBindings, PassRegistry};
use crate::scene_gpu::GpuScene;
use molgfx_gpu::{Device, TimestampWrites};
pub(crate) struct ResourceTable<'a, D: Device> {
pub(crate) pool: &'a TransientPool<D>,
pub(crate) swapchain: &'a D::TextureView,
}
impl<D: Device> ResourceTable<'_, D> {
pub(crate) fn view(&self, id: ResourceId) -> Option<&D::TextureView> {
if id == ResourceId::SWAPCHAIN {
return Some(self.swapchain);
}
self.pool.view(id)
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)]
pub(crate) struct DisplayEncoding {
pub gamut: DisplayGamut,
pub transfer: TransferFunction,
}
pub(crate) struct PassContext<'a, D: Device> {
pub encoder: &'a mut D::CommandEncoder,
pub resources: &'a ResourceTable<'a, D>,
pub passes: &'a PassRegistry<D>,
pub bindings: Option<&'a FrameBindings<D>>,
pub scene: &'a GpuScene<D>,
pub timestamps: Option<TimestampWrites<'a, D>>,
pub temporal_write: usize,
pub quality: bool,
pub display_encoding: DisplayEncoding,
}