amd-ext-d3d 0.4.1

Rust bindings for AMD's DirectX12 modified PIX3 RGP markers
// Bindings generated by `windows-bindgen` 0.63.0

#![allow(
    non_snake_case,
    non_upper_case_globals,
    non_camel_case_types,
    dead_code,
    clippy::all
)]

pub mod Amd {
    pub mod Ext {
        pub mod D3D {
            #[repr(C)]
            #[derive(Clone, Copy, Debug, PartialEq)]
            pub struct AmdExtD3DCreateInfo {
                pub r#type: AmdExtD3DStructType,
                pub pNext: *mut core::ffi::c_void,
            }
            impl Default for AmdExtD3DCreateInfo {
                fn default() -> Self {
                    unsafe { core::mem::zeroed() }
                }
            }
            #[repr(C)]
            #[derive(Clone, Copy, Debug, Default, PartialEq)]
            pub struct AmdExtD3DPipelineCreateInfo {
                pub Base: AmdExtD3DCreateInfo,
                pub flags: AmdExtD3DPipelineFlags,
            }
            #[repr(C)]
            #[derive(Clone, Copy, Debug, Default, PartialEq)]
            pub struct AmdExtD3DPipelineFlags {
                pub _bitfield: u32,
            }
            pub const AmdExtD3DStructPipelineState: AmdExtD3DStructType = AmdExtD3DStructType(1u32);
            #[repr(transparent)]
            #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
            pub struct AmdExtD3DStructType(pub u32);
            pub const AmdExtD3DStructUnknown: AmdExtD3DStructType = AmdExtD3DStructType(0u32);
            windows_core::imp::define_interface!(
                IAmdExtD3DDevice,
                IAmdExtD3DDevice_Vtbl,
                0x8104c0fc_7413_410f_8e83_aa617e908648
            );
            windows_core::imp::interface_hierarchy!(IAmdExtD3DDevice, windows_core::IUnknown);
            impl IAmdExtD3DDevice {
                pub unsafe fn CreateGraphicsPipelineState<T>(
                    &self,
                    pamdextcreateinfo: *const AmdExtD3DCreateInfo,
                    pdesc : *const windows::Win32::Graphics::Direct3D12:: D3D12_GRAPHICS_PIPELINE_STATE_DESC,
                ) -> windows_core::Result<T>
                where
                    T: windows_core::Interface,
                {
                    let mut result__ = core::ptr::null_mut();
                    unsafe {
                        (windows_core::Interface::vtable(self).CreateGraphicsPipelineState)(
                            windows_core::Interface::as_raw(self),
                            pamdextcreateinfo,
                            core::mem::transmute(pdesc),
                            &T::IID,
                            &mut result__,
                        )
                        .and_then(|| windows_core::Type::from_abi(result__))
                    }
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAmdExtD3DDevice_Vtbl {
                pub base__: windows_core::IUnknown_Vtbl,
                pub CreateGraphicsPipelineState: unsafe extern "system" fn(
                    *mut core::ffi::c_void,
                    *const AmdExtD3DCreateInfo,
                    *const windows::Win32::Graphics::Direct3D12::D3D12_GRAPHICS_PIPELINE_STATE_DESC,
                    *const windows_core::GUID,
                    *mut *mut core::ffi::c_void,
                )
                    -> windows_core::HRESULT,
            }
            unsafe impl Send for IAmdExtD3DDevice {}
            unsafe impl Sync for IAmdExtD3DDevice {}
            pub trait IAmdExtD3DDevice_Impl: windows_core::IUnknownImpl {
                fn CreateGraphicsPipelineState(
                    &self,
                    pamdextcreateinfo: *const AmdExtD3DCreateInfo,
                    pdesc : *const windows::Win32::Graphics::Direct3D12:: D3D12_GRAPHICS_PIPELINE_STATE_DESC,
                    riid: *const windows_core::GUID,
                    pppipelinestate: *mut *mut core::ffi::c_void,
                ) -> windows_core::Result<()>;
            }
            impl IAmdExtD3DDevice_Vtbl {
                pub const fn new<Identity: IAmdExtD3DDevice_Impl, const OFFSET: isize>() -> Self {
                    unsafe extern "system" fn CreateGraphicsPipelineState<
                        Identity: IAmdExtD3DDevice_Impl,
                        const OFFSET: isize,
                    >(
                        this: *mut core::ffi::c_void,
                        pamdextcreateinfo: *const AmdExtD3DCreateInfo,
                        pdesc : *const windows::Win32::Graphics::Direct3D12:: D3D12_GRAPHICS_PIPELINE_STATE_DESC,
                        riid: *const windows_core::GUID,
                        pppipelinestate: *mut *mut core::ffi::c_void,
                    ) -> windows_core::HRESULT {
                        unsafe {
                            let this: &Identity =
                                &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                            IAmdExtD3DDevice_Impl::CreateGraphicsPipelineState(
                                this,
                                core::mem::transmute_copy(&pamdextcreateinfo),
                                core::mem::transmute_copy(&pdesc),
                                core::mem::transmute_copy(&riid),
                                core::mem::transmute_copy(&pppipelinestate),
                            )
                            .into()
                        }
                    }
                    Self {
                        base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
                        CreateGraphicsPipelineState: CreateGraphicsPipelineState::<Identity, OFFSET>,
                    }
                }
                pub fn matches(iid: &windows_core::GUID) -> bool {
                    iid == &<IAmdExtD3DDevice as windows_core::Interface>::IID
                }
            }
            impl windows_core::RuntimeName for IAmdExtD3DDevice {}
            windows_core::imp::define_interface!(
                IAmdExtD3DDevice1,
                IAmdExtD3DDevice1_Vtbl,
                0x4bbcaf68_eaf7_4fa4_b653_cb458c334a4e
            );
            impl core::ops::Deref for IAmdExtD3DDevice1 {
                type Target = IAmdExtD3DDevice;
                fn deref(&self) -> &Self::Target {
                    unsafe { core::mem::transmute(self) }
                }
            }
            windows_core::imp::interface_hierarchy!(
                IAmdExtD3DDevice1,
                windows_core::IUnknown,
                IAmdExtD3DDevice
            );
            impl IAmdExtD3DDevice1 {
                pub unsafe fn PushMarker<P0, P1>(&self, pgfxcmdlist: P0, pmarker: P1)
                where
                    P0: windows_core::Param<
                        windows::Win32::Graphics::Direct3D12::ID3D12GraphicsCommandList,
                    >,
                    P1: windows_core::Param<windows_core::PCSTR>,
                {
                    unsafe {
                        (windows_core::Interface::vtable(self).PushMarker)(
                            windows_core::Interface::as_raw(self),
                            pgfxcmdlist.param().abi(),
                            pmarker.param().abi(),
                        )
                    }
                }
                pub unsafe fn PopMarker<P0>(&self, pgfxcmdlist: P0)
                where
                    P0: windows_core::Param<
                        windows::Win32::Graphics::Direct3D12::ID3D12GraphicsCommandList,
                    >,
                {
                    unsafe {
                        (windows_core::Interface::vtable(self).PopMarker)(
                            windows_core::Interface::as_raw(self),
                            pgfxcmdlist.param().abi(),
                        )
                    }
                }
                pub unsafe fn SetMarker<P0, P1>(&self, pgfxcmdlist: P0, pmarker: P1)
                where
                    P0: windows_core::Param<
                        windows::Win32::Graphics::Direct3D12::ID3D12GraphicsCommandList,
                    >,
                    P1: windows_core::Param<windows_core::PCSTR>,
                {
                    unsafe {
                        (windows_core::Interface::vtable(self).SetMarker)(
                            windows_core::Interface::as_raw(self),
                            pgfxcmdlist.param().abi(),
                            pmarker.param().abi(),
                        )
                    }
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAmdExtD3DDevice1_Vtbl {
                pub base__: IAmdExtD3DDevice_Vtbl,
                pub PushMarker: unsafe extern "system" fn(
                    *mut core::ffi::c_void,
                    *mut core::ffi::c_void,
                    windows_core::PCSTR,
                ),
                pub PopMarker:
                    unsafe extern "system" fn(*mut core::ffi::c_void, *mut core::ffi::c_void),
                pub SetMarker: unsafe extern "system" fn(
                    *mut core::ffi::c_void,
                    *mut core::ffi::c_void,
                    windows_core::PCSTR,
                ),
            }
            unsafe impl Send for IAmdExtD3DDevice1 {}
            unsafe impl Sync for IAmdExtD3DDevice1 {}
            pub trait IAmdExtD3DDevice1_Impl: IAmdExtD3DDevice_Impl {
                fn PushMarker(
                    &self,
                    pgfxcmdlist: windows_core::Ref<
                        windows::Win32::Graphics::Direct3D12::ID3D12GraphicsCommandList,
                    >,
                    pmarker: &windows_core::PCSTR,
                );
                fn PopMarker(
                    &self,
                    pgfxcmdlist: windows_core::Ref<
                        windows::Win32::Graphics::Direct3D12::ID3D12GraphicsCommandList,
                    >,
                );
                fn SetMarker(
                    &self,
                    pgfxcmdlist: windows_core::Ref<
                        windows::Win32::Graphics::Direct3D12::ID3D12GraphicsCommandList,
                    >,
                    pmarker: &windows_core::PCSTR,
                );
            }
            impl IAmdExtD3DDevice1_Vtbl {
                pub const fn new<Identity: IAmdExtD3DDevice1_Impl, const OFFSET: isize>() -> Self {
                    unsafe extern "system" fn PushMarker<
                        Identity: IAmdExtD3DDevice1_Impl,
                        const OFFSET: isize,
                    >(
                        this: *mut core::ffi::c_void,
                        pgfxcmdlist: *mut core::ffi::c_void,
                        pmarker: windows_core::PCSTR,
                    ) {
                        unsafe {
                            let this: &Identity =
                                &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                            IAmdExtD3DDevice1_Impl::PushMarker(
                                this,
                                core::mem::transmute_copy(&pgfxcmdlist),
                                core::mem::transmute(&pmarker),
                            )
                        }
                    }
                    unsafe extern "system" fn PopMarker<
                        Identity: IAmdExtD3DDevice1_Impl,
                        const OFFSET: isize,
                    >(
                        this: *mut core::ffi::c_void,
                        pgfxcmdlist: *mut core::ffi::c_void,
                    ) {
                        unsafe {
                            let this: &Identity =
                                &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                            IAmdExtD3DDevice1_Impl::PopMarker(
                                this,
                                core::mem::transmute_copy(&pgfxcmdlist),
                            )
                        }
                    }
                    unsafe extern "system" fn SetMarker<
                        Identity: IAmdExtD3DDevice1_Impl,
                        const OFFSET: isize,
                    >(
                        this: *mut core::ffi::c_void,
                        pgfxcmdlist: *mut core::ffi::c_void,
                        pmarker: windows_core::PCSTR,
                    ) {
                        unsafe {
                            let this: &Identity =
                                &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                            IAmdExtD3DDevice1_Impl::SetMarker(
                                this,
                                core::mem::transmute_copy(&pgfxcmdlist),
                                core::mem::transmute(&pmarker),
                            )
                        }
                    }
                    Self {
                        base__: IAmdExtD3DDevice_Vtbl::new::<Identity, OFFSET>(),
                        PushMarker: PushMarker::<Identity, OFFSET>,
                        PopMarker: PopMarker::<Identity, OFFSET>,
                        SetMarker: SetMarker::<Identity, OFFSET>,
                    }
                }
                pub fn matches(iid: &windows_core::GUID) -> bool {
                    iid == &<IAmdExtD3DDevice1 as windows_core::Interface>::IID
                        || iid == &<IAmdExtD3DDevice as windows_core::Interface>::IID
                }
            }
            impl windows_core::RuntimeName for IAmdExtD3DDevice1 {}
            windows_core::imp::define_interface!(
                IAmdExtD3DFactory,
                IAmdExtD3DFactory_Vtbl,
                0x014937ec_9288_446f_a9ac_d75a8e3a984f
            );
            windows_core::imp::interface_hierarchy!(IAmdExtD3DFactory, windows_core::IUnknown);
            impl IAmdExtD3DFactory {
                pub unsafe fn CreateInterface<P0, T>(&self, pouter: P0) -> windows_core::Result<T>
                where
                    P0: windows_core::Param<windows_core::IUnknown>,
                    T: windows_core::Interface,
                {
                    let mut result__ = core::ptr::null_mut();
                    unsafe {
                        (windows_core::Interface::vtable(self).CreateInterface)(
                            windows_core::Interface::as_raw(self),
                            pouter.param().abi(),
                            &T::IID,
                            &mut result__,
                        )
                        .and_then(|| windows_core::Type::from_abi(result__))
                    }
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAmdExtD3DFactory_Vtbl {
                pub base__: windows_core::IUnknown_Vtbl,
                pub CreateInterface: unsafe extern "system" fn(
                    *mut core::ffi::c_void,
                    *mut core::ffi::c_void,
                    *const windows_core::GUID,
                    *mut *mut core::ffi::c_void,
                )
                    -> windows_core::HRESULT,
            }
            unsafe impl Send for IAmdExtD3DFactory {}
            unsafe impl Sync for IAmdExtD3DFactory {}
            pub trait IAmdExtD3DFactory_Impl: windows_core::IUnknownImpl {
                fn CreateInterface(
                    &self,
                    pouter: windows_core::Ref<windows_core::IUnknown>,
                    riid: *const windows_core::GUID,
                    ppvobject: *mut *mut core::ffi::c_void,
                ) -> windows_core::Result<()>;
            }
            impl IAmdExtD3DFactory_Vtbl {
                pub const fn new<Identity: IAmdExtD3DFactory_Impl, const OFFSET: isize>() -> Self {
                    unsafe extern "system" fn CreateInterface<
                        Identity: IAmdExtD3DFactory_Impl,
                        const OFFSET: isize,
                    >(
                        this: *mut core::ffi::c_void,
                        pouter: *mut core::ffi::c_void,
                        riid: *const windows_core::GUID,
                        ppvobject: *mut *mut core::ffi::c_void,
                    ) -> windows_core::HRESULT {
                        unsafe {
                            let this: &Identity =
                                &*((this as *const *const ()).offset(OFFSET) as *const Identity);
                            IAmdExtD3DFactory_Impl::CreateInterface(
                                this,
                                core::mem::transmute_copy(&pouter),
                                core::mem::transmute_copy(&riid),
                                core::mem::transmute_copy(&ppvobject),
                            )
                            .into()
                        }
                    }
                    Self {
                        base__: windows_core::IUnknown_Vtbl::new::<Identity, OFFSET>(),
                        CreateInterface: CreateInterface::<Identity, OFFSET>,
                    }
                }
                pub fn matches(iid: &windows_core::GUID) -> bool {
                    iid == &<IAmdExtD3DFactory as windows_core::Interface>::IID
                }
            }
            impl windows_core::RuntimeName for IAmdExtD3DFactory {}
            pub type PFNAmdExtD3DCreateInterface = Option<
                unsafe extern "system" fn(
                    pouter: windows_core::Ref<windows_core::IUnknown>,
                    riid: *const windows_core::GUID,
                    ppvobject: *mut *mut core::ffi::c_void,
                ) -> windows_core::HRESULT,
            >;
        }
    }
}