#![allow(
non_snake_case,
clippy::too_many_arguments,
clippy::missing_safety_doc,
dead_code
)]
use core::ffi::c_void;
pub unsafe trait Library12Methods: Sized {
fn inner(&self) -> *mut c_void;
unsafe fn QueryInterface(
&self,
iid: *const windows::core::GUID,
out: *mut *mut c_void,
) -> windows::core::HRESULT;
unsafe fn AddRef(&self) -> u32;
unsafe fn Release(&self) -> u32;
unsafe fn GetPrivateData(
&self,
a0: *const windows::core::GUID,
a1: *mut u32,
a2: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { real::GetPrivateData(self.inner(), a0, a1, a2) }
}
unsafe fn SetPrivateData(
&self,
a0: *const windows::core::GUID,
a1: u32,
a2: *const core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { real::SetPrivateData(self.inner(), a0, a1, a2) }
}
unsafe fn SetPrivateDataInterface(
&self,
a0: *const windows::core::GUID,
a1: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { real::SetPrivateDataInterface(self.inner(), a0, a1) }
}
unsafe fn SetName(&self, a0: windows::core::PCWSTR) -> windows::core::HRESULT {
unsafe { real::SetName(self.inner(), a0) }
}
unsafe fn GetDevice(
&self,
a0: *const windows::core::GUID,
a1: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { real::GetDevice(self.inner(), a0, a1) }
}
unsafe fn StorePipeline(
&self,
a0: windows::core::PCWSTR,
a1: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { real::StorePipeline(self.inner(), a0, a1) }
}
unsafe fn LoadGraphicsPipeline(
&self,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_GRAPHICS_PIPELINE_STATE_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { real::LoadGraphicsPipeline(self.inner(), a0, a1, a2, a3) }
}
unsafe fn LoadComputePipeline(
&self,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_COMPUTE_PIPELINE_STATE_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { real::LoadComputePipeline(self.inner(), a0, a1, a2, a3) }
}
unsafe fn GetSerializedSize(&self) -> usize {
unsafe { real::GetSerializedSize(self.inner()) }
}
unsafe fn Serialize(&self, a0: *mut core::ffi::c_void, a1: usize) -> windows::core::HRESULT {
unsafe { real::Serialize(self.inner(), a0, a1) }
}
unsafe fn LoadPipeline(
&self,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_PIPELINE_STATE_STREAM_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { real::LoadPipeline(self.inner(), a0, a1, a2, a3) }
}
}
pub mod real {
use core::ffi::c_void;
pub unsafe fn GetPrivateData(
inner: *mut c_void,
a0: *const windows::core::GUID,
a1: *mut u32,
a2: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.base__
.base__
.GetPrivateData)(inner, a0, a1, a2)
}
}
pub unsafe fn SetPrivateData(
inner: *mut c_void,
a0: *const windows::core::GUID,
a1: u32,
a2: *const core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.base__
.base__
.SetPrivateData)(inner, a0, a1, a2)
}
}
pub unsafe fn SetPrivateDataInterface(
inner: *mut c_void,
a0: *const windows::core::GUID,
a1: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.base__
.base__
.SetPrivateDataInterface)(inner, a0, a1)
}
}
pub unsafe fn SetName(inner: *mut c_void, a0: windows::core::PCWSTR) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.base__
.base__
.SetName)(inner, a0)
}
}
pub unsafe fn GetDevice(
inner: *mut c_void,
a0: *const windows::core::GUID,
a1: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.base__
.GetDevice)(inner, a0, a1)
}
}
pub unsafe fn StorePipeline(
inner: *mut c_void,
a0: windows::core::PCWSTR,
a1: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.StorePipeline)(inner, a0, a1)
}
}
pub unsafe fn LoadGraphicsPipeline(
inner: *mut c_void,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_GRAPHICS_PIPELINE_STATE_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.LoadGraphicsPipeline)(inner, a0, a1, a2, a3)
}
}
pub unsafe fn LoadComputePipeline(
inner: *mut c_void,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_COMPUTE_PIPELINE_STATE_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.LoadComputePipeline)(inner, a0, a1, a2, a3)
}
}
pub unsafe fn GetSerializedSize(inner: *mut c_void) -> usize {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.GetSerializedSize)(inner)
}
}
pub unsafe fn Serialize(
inner: *mut c_void,
a0: *mut core::ffi::c_void,
a1: usize,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.base__
.Serialize)(inner, a0, a1)
}
}
pub unsafe fn LoadPipeline(
inner: *mut c_void,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_PIPELINE_STATE_STREAM_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
((*(*(inner as *const *const windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl)))
.LoadPipeline)(inner, a0, a1, a2, a3)
}
}
}
unsafe extern "system" fn QueryInterface<T: Library12Methods>(
this: *mut c_void,
iid: *const windows::core::GUID,
out: *mut *mut c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).QueryInterface(iid, out) }
}
unsafe extern "system" fn AddRef<T: Library12Methods>(this: *mut c_void) -> u32 {
unsafe { (*(this as *const T)).AddRef() }
}
unsafe extern "system" fn Release<T: Library12Methods>(this: *mut c_void) -> u32 {
unsafe { (*(this as *const T)).Release() }
}
unsafe extern "system" fn GetPrivateData<T: Library12Methods>(
this: *mut c_void,
a0: *const windows::core::GUID,
a1: *mut u32,
a2: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).GetPrivateData(a0, a1, a2) }
}
unsafe extern "system" fn SetPrivateData<T: Library12Methods>(
this: *mut c_void,
a0: *const windows::core::GUID,
a1: u32,
a2: *const core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).SetPrivateData(a0, a1, a2) }
}
unsafe extern "system" fn SetPrivateDataInterface<T: Library12Methods>(
this: *mut c_void,
a0: *const windows::core::GUID,
a1: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).SetPrivateDataInterface(a0, a1) }
}
unsafe extern "system" fn SetName<T: Library12Methods>(
this: *mut c_void,
a0: windows::core::PCWSTR,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).SetName(a0) }
}
unsafe extern "system" fn GetDevice<T: Library12Methods>(
this: *mut c_void,
a0: *const windows::core::GUID,
a1: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).GetDevice(a0, a1) }
}
unsafe extern "system" fn StorePipeline<T: Library12Methods>(
this: *mut c_void,
a0: windows::core::PCWSTR,
a1: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).StorePipeline(a0, a1) }
}
unsafe extern "system" fn LoadGraphicsPipeline<T: Library12Methods>(
this: *mut c_void,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_GRAPHICS_PIPELINE_STATE_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).LoadGraphicsPipeline(a0, a1, a2, a3) }
}
unsafe extern "system" fn LoadComputePipeline<T: Library12Methods>(
this: *mut c_void,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_COMPUTE_PIPELINE_STATE_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).LoadComputePipeline(a0, a1, a2, a3) }
}
unsafe extern "system" fn GetSerializedSize<T: Library12Methods>(this: *mut c_void) -> usize {
unsafe { (*(this as *const T)).GetSerializedSize() }
}
unsafe extern "system" fn Serialize<T: Library12Methods>(
this: *mut c_void,
a0: *mut core::ffi::c_void,
a1: usize,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).Serialize(a0, a1) }
}
unsafe extern "system" fn LoadPipeline<T: Library12Methods>(
this: *mut c_void,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_PIPELINE_STATE_STREAM_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe { (*(this as *const T)).LoadPipeline(a0, a1, a2, a3) }
}
#[allow(clippy::let_and_return)] unsafe impl Library12Methods for crate::d3d12::Object {
fn inner(&self) -> *mut c_void {
self.real()
}
unsafe fn QueryInterface(
&self,
iid: *const windows::core::GUID,
out: *mut *mut c_void,
) -> windows::core::HRESULT {
unsafe { self.query(iid, out) }
}
unsafe fn AddRef(&self) -> u32 {
self.add_ref()
}
unsafe fn Release(&self) -> u32 {
unsafe { self.release() }
}
unsafe fn GetPrivateData(
&self,
a0: *const windows::core::GUID,
a1: *mut u32,
a2: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
let result = real::GetPrivateData(self.real(), a0, a1, a2);
self.private_output(result, a0, a1, a2);
result
}
}
unsafe fn SetPrivateData(
&self,
a0: *const windows::core::GUID,
a1: u32,
a2: *const core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
let result = real::SetPrivateData(self.real(), a0, a1, a2);
if result.is_ok() {
self.private_interface(a0, false);
}
result
}
}
unsafe fn SetPrivateDataInterface(
&self,
a0: *const windows::core::GUID,
a1: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
let result = real::SetPrivateDataInterface(self.real(), a0, crate::d3d12::unwrap(a1));
if result.is_ok() {
self.private_interface(a0, !a1.is_null());
}
result
}
}
unsafe fn SetName(&self, a0: windows::core::PCWSTR) -> windows::core::HRESULT {
unsafe {
let result = real::SetName(self.real(), a0);
result
}
}
unsafe fn GetDevice(
&self,
a0: *const windows::core::GUID,
a1: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
let result = real::GetDevice(self.real(), a0, a1);
crate::d3d12::wrap_output(result, a0, a1);
result
}
}
unsafe fn StorePipeline(
&self,
a0: windows::core::PCWSTR,
a1: *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
let result = real::StorePipeline(self.real(), a0, crate::d3d12::unwrap(a1));
result
}
}
unsafe fn LoadGraphicsPipeline(
&self,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_GRAPHICS_PIPELINE_STATE_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
let mapped1 = crate::d3d12::inputs::graphics(a1);
self.called("LoadGraphicsPipeline");
let result = real::LoadGraphicsPipeline(self.real(), a0, mapped1.ptr(), a2, a3);
crate::d3d12::wrap_output(result, a2, a3);
if result.is_ok() {
crate::d3d12::shaders::graphics(a1);
crate::d3d12::pipelines::created(
crate::d3d12::journal::owner_device(self.data.id),
a3,
|| crate::d3d12::pipelines::graphics(a1),
);
}
result
}
}
unsafe fn LoadComputePipeline(
&self,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_COMPUTE_PIPELINE_STATE_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
let mapped1 = crate::d3d12::inputs::compute(a1);
self.called("LoadComputePipeline");
let result = real::LoadComputePipeline(self.real(), a0, mapped1.ptr(), a2, a3);
crate::d3d12::wrap_output(result, a2, a3);
if result.is_ok() {
crate::d3d12::shaders::compute(a1);
crate::d3d12::pipelines::created(
crate::d3d12::journal::owner_device(self.data.id),
a3,
|| crate::d3d12::pipelines::compute(a1),
);
}
result
}
}
unsafe fn GetSerializedSize(&self) -> usize {
unsafe {
let result = real::GetSerializedSize(self.real());
result
}
}
unsafe fn Serialize(&self, a0: *mut core::ffi::c_void, a1: usize) -> windows::core::HRESULT {
unsafe {
let result = real::Serialize(self.real(), a0, a1);
crate::log::log!("D3D12 Serialize: library={} capacity={}", self.data.id, a1);
result
}
}
unsafe fn LoadPipeline(
&self,
a0: windows::core::PCWSTR,
a1: *const windows::Win32::Graphics::Direct3D12::D3D12_PIPELINE_STATE_STREAM_DESC,
a2: *const windows::core::GUID,
a3: *mut *mut core::ffi::c_void,
) -> windows::core::HRESULT {
unsafe {
let mapped1 = crate::d3d12::inputs::stream(a1);
self.called("LoadPipeline");
let result = real::LoadPipeline(self.real(), a0, mapped1.ptr(), a2, a3);
crate::d3d12::wrap_output(result, a2, a3);
if result.is_ok() {
crate::d3d12::shaders::stream(a1);
crate::d3d12::pipelines::created(
crate::d3d12::journal::owner_device(self.data.id),
a3,
|| crate::d3d12::pipelines::stream(a1),
);
}
result
}
}
}
pub const fn vtable<T: Library12Methods>() -> windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl
{
windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary1_Vtbl {
base__: windows::Win32::Graphics::Direct3D12::ID3D12PipelineLibrary_Vtbl {
base__: windows::Win32::Graphics::Direct3D12::ID3D12DeviceChild_Vtbl {
base__: windows::Win32::Graphics::Direct3D12::ID3D12Object_Vtbl {
base__: windows::core::IUnknown_Vtbl {
QueryInterface: QueryInterface::<T>,
AddRef: AddRef::<T>,
Release: Release::<T>,
},
GetPrivateData: GetPrivateData::<T>,
SetPrivateData: SetPrivateData::<T>,
SetPrivateDataInterface: SetPrivateDataInterface::<T>,
SetName: SetName::<T>,
},
GetDevice: GetDevice::<T>,
},
StorePipeline: StorePipeline::<T>,
LoadGraphicsPipeline: LoadGraphicsPipeline::<T>,
LoadComputePipeline: LoadComputePipeline::<T>,
GetSerializedSize: GetSerializedSize::<T>,
Serialize: Serialize::<T>,
},
LoadPipeline: LoadPipeline::<T>,
}
}