fsr 0.1.11

FidelityFX Super Resolution 2 bindings for rust.
Documentation
use crate::{interface::ScratchBuffer, *};
use widestring::U16String;
use windows::Win32::Graphics::Direct3D12::{ID3D12CommandList, ID3D12Device, ID3D12Resource};

impl From<&mut ID3D12CommandList> for CommandList {
    fn from(value: &mut ID3D12CommandList) -> Self {
        unsafe { CommandList(fsr_sys::d3d12::GetCommandListDX12(value as *mut _ as _)) }
    }
}

unsafe fn get_scratch_memory_size() -> usize {
    fsr_sys::d3d12::GetScratchMemorySizeDX12()
}

pub unsafe fn get_interface(device: &mut ID3D12Device) -> Result<Interface, Error> {
    let scratch_buffer =
        ScratchBuffer::new(get_scratch_memory_size()).map_err(|e| Error::ScratchBuffer(e))?;

    let mut retval = Interface {
        interface: fsr_sys::Interface::default(),
        scratch_buffer,
    };

    fsr_sys::d3d12::GetInterfaceDX12(
        &mut retval.interface,
        device as *mut _ as _,
        retval.scratch_buffer.ptr().cast::<std::ffi::c_void>(),
        retval.scratch_buffer.len(),
    );

    Ok(retval)
}

pub unsafe fn get_device(device: &mut ID3D12Device) -> Device {
    fsr_sys::d3d12::GetDeviceDX12(device as *mut _ as _)
}

pub unsafe fn get_texture_resource(
    context: &mut Context,
    resource: &mut ID3D12Resource,
    state: ResourceStates,
    name: &str,
    shader_component_mapping: u32,
) {
    fsr_sys::d3d12::GetResourceDX12(
        context.context.as_mut(),
        resource as *mut _ as _,
        U16String::from_str(name).as_ptr(),
        state,
        shader_component_mapping,
    );
}