 
            From: Rémi Bernon rbernon@codeweavers.com
This will be part of the public ABI for third-party D3D implementations wanting to support D3D shared resources on Wine. --- dlls/win32u/font.c | 1 + dlls/winewayland.drv/waylanddrv.h | 4 ++ include/ntuser.h | 112 ++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+)
diff --git a/dlls/win32u/font.c b/dlls/win32u/font.c index ed2ef5200b2..208959efbe9 100644 --- a/dlls/win32u/font.c +++ b/dlls/win32u/font.c @@ -40,6 +40,7 @@ #include "winternl.h" #include "winreg.h" #include "ntgdi_private.h" +#undef small
#include "wine/unixlib.h" #include "wine/rbtree.h" diff --git a/dlls/winewayland.drv/waylanddrv.h b/dlls/winewayland.drv/waylanddrv.h index cb331df789d..0b286c8fedf 100644 --- a/dlls/winewayland.drv/waylanddrv.h +++ b/dlls/winewayland.drv/waylanddrv.h @@ -42,6 +42,10 @@ #include "windef.h" #include "winbase.h" #include "ntgdi.h" +#include "ntuser.h" +#undef interface +#undef small + #include "wine/gdi_driver.h" #include "wine/list.h" #include "wine/rbtree.h" diff --git a/include/ntuser.h b/include/ntuser.h index 0cf257d4d07..f85a9daa972 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -25,6 +25,13 @@ #include <immdev.h> #include <shellapi.h> #include <winternl.h> +#include <d3dukmdt.h> + +#include <d3d9types.h> +#include <dxgi.h> +#include <d3d10.h> +#include <d3d11.h> +#include <d3d12.h>
#ifndef W32KAPI # if defined(_WIN32U_) || defined(WINE_UNIX_LIB) @@ -370,6 +377,111 @@ struct drag_drop_post_params
C_ASSERT( sizeof(struct drag_drop_post_params) == offsetof(struct drag_drop_post_params, files[0]) );
+ +/* D3DKMT runtime descriptors */ + +struct d3dkmt_dxgi_desc +{ + UINT size; + UINT version; + UINT width; + UINT height; + DXGI_FORMAT format; + UINT unknown_0; + UINT unknown_1; + UINT keyed_mutex; + D3DKMT_HANDLE mutex_handle; + D3DKMT_HANDLE sync_handle; + UINT nt_shared; + UINT unknown_2; + UINT unknown_3; + UINT unknown_4; +}; + +struct d3dkmt_d3d9_desc +{ + struct d3dkmt_dxgi_desc dxgi; + D3DFORMAT format; + D3DRESOURCETYPE type; + UINT usage; + union + { + struct + { + UINT unknown_0; + UINT width; + UINT height; + UINT levels; + UINT depth; + } texture; + struct + { + UINT unknown_0; + UINT unknown_1; + UINT unknown_2; + UINT width; + UINT height; + } surface; + struct + { + UINT unknown_0; + UINT width; + UINT format; + UINT unknown_1; + UINT unknown_2; + } buffer; + }; +}; + +C_ASSERT( sizeof(struct d3dkmt_d3d9_desc) == 0x58 ); + +struct d3dkmt_d3d11_desc +{ + struct d3dkmt_dxgi_desc dxgi; + D3D11_RESOURCE_DIMENSION dimension; + union + { + D3D10_BUFFER_DESC d3d10_buf; + D3D10_TEXTURE1D_DESC d3d10_1d; + D3D10_TEXTURE2D_DESC d3d10_2d; + D3D10_TEXTURE3D_DESC d3d10_3d; + D3D11_BUFFER_DESC d3d11_buf; + D3D11_TEXTURE1D_DESC d3d11_1d; + D3D11_TEXTURE2D_DESC d3d11_2d; + D3D11_TEXTURE3D_DESC d3d11_3d; + }; +}; + +C_ASSERT( sizeof(struct d3dkmt_d3d11_desc) == 0x68 ); + +struct d3dkmt_d3d12_desc +{ + struct d3dkmt_d3d11_desc d3d11; + UINT unknown_5[4]; + UINT resource_size; + UINT unknown_6[7]; + UINT resource_align; + UINT unknown_7[9]; + union + { + D3D12_RESOURCE_DESC desc; + D3D12_RESOURCE_DESC1 desc1; + }; + UINT64 unknown_8[1]; +}; + +C_ASSERT( sizeof(struct d3dkmt_d3d12_desc) == 0x108 ); +C_ASSERT( offsetof(struct d3dkmt_d3d12_desc, unknown_5) == sizeof(struct d3dkmt_d3d11_desc) ); + +union d3dkmt_desc +{ + struct d3dkmt_dxgi_desc dxgi; + struct d3dkmt_d3d9_desc d3d9; + struct d3dkmt_d3d11_desc d3d11; + struct d3dkmt_d3d12_desc d3d12; +}; + + /* DPI awareness contexts */ #define MAKE_NTUSER_DPI_CONTEXT( awareness, version, dpi, flags ) ((awareness) | ((version) << 4) | ((dpi) << 8) | (flags)) #define NTUSER_DPI_CONTEXT_GET_AWARENESS( ctx ) ((ctx) & 0x0f)