-- v5: include: Add UUIDs for use with D3D12EnableExperimentalFeatures. include: Add the ID3D12GraphicsCommandList{5,6,7} interfaces.
From: Martin Storsjö martin@martin.st
This ports parts of commit 83625459c8227b0bd7b86c18946a35d3a806c80d from wine.git into vkd3d.
Signed-off-by: Martin Storsjö martin@martin.st --- include/vkd3d_d3d12.idl | 20 ++++++++++++++++++++ include/vkd3d_unknown.idl | 2 ++ include/vkd3d_windows.h | 3 +++ 3 files changed, 25 insertions(+)
diff --git a/include/vkd3d_d3d12.idl b/include/vkd3d_d3d12.idl index 46eba4d0a..7a043d810 100644 --- a/include/vkd3d_d3d12.idl +++ b/include/vkd3d_d3d12.idl @@ -4983,6 +4983,22 @@ interface ID3D12Tools : IUnknown BOOL ShaderInstrumentationEnabled(); }
+cpp_quote("DEFINE_GUID(CLSID_D3D12Debug, 0xf2352aeb, 0xdd84, 0x49fe, 0xb9, 0x7b, 0xa9, 0xdc, 0xfd, 0xcc, 0x1b, 0x4f);") +cpp_quote("DEFINE_GUID(CLSID_D3D12Tools, 0xe38216b1, 0x3c8c, 0x4833, 0xaa, 0x09, 0x0a, 0x06, 0xb6, 0x5d, 0x96, 0xc8);") +cpp_quote("DEFINE_GUID(CLSID_D3D12DeviceRemovedExtendedData, 0x4a75bbc4, 0x9ff4, 0x4ad8, 0x9f, 0x18, 0xab, 0xae, 0x84, 0xdc, 0x5f, 0xf2);") +cpp_quote("DEFINE_GUID(CLSID_D3D12SDKConfiguration, 0x7cda6aca, 0xa03e, 0x49c8, 0x94, 0x58, 0x03, 0x34, 0xd2, 0x0e, 0x07, 0xce);") + +[ + uuid(e9eb5314-33aa-42b2-a718-d77f58b1f1c7), + object, + local, + pointer_default(unique) +] +interface ID3D12SDKConfiguration : IUnknown +{ + HRESULT SetSDKVersion(UINT version, const char *path); +} + typedef HRESULT (__stdcall *PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER)( const void *data, SIZE_T data_size, REFIID iid, void **deserializer);
@@ -5022,3 +5038,7 @@ typedef HRESULT (__stdcall *PFN_D3D12_GET_DEBUG_INTERFACE)(REFIID iid, void **de
[local] HRESULT __stdcall D3D12EnableExperimentalFeatures(UINT feature_count, const IID *iids, void *configurations, UINT *configurations_sizes); + +typedef HRESULT (__stdcall *PFN_D3D12_GET_INTERFACE)(REFCLSID clsid, REFIID iid, void **debug); + +[local] HRESULT __stdcall D3D12GetInterface(REFCLSID clsid, REFIID iid, void **debug); diff --git a/include/vkd3d_unknown.idl b/include/vkd3d_unknown.idl index 9a7198c82..3353e6f82 100644 --- a/include/vkd3d_unknown.idl +++ b/include/vkd3d_unknown.idl @@ -23,6 +23,8 @@ cpp_quote("#define __VKD3D_UNKNOWN_H") cpp_quote("#if 0") typedef IID *REFIID; typedef IID *REFGUID; +typedef GUID CLSID,*LPCLSID; +typedef CLSID *REFCLSID; cpp_quote("#endif")
cpp_quote("#if !defined(_WIN32)") diff --git a/include/vkd3d_windows.h b/include/vkd3d_windows.h index 2daa74e92..d53fd00b7 100644 --- a/include/vkd3d_windows.h +++ b/include/vkd3d_windows.h @@ -125,6 +125,7 @@ typedef struct _GUID # endif
typedef GUID IID; +typedef GUID CLSID;
# ifdef INITGUID # ifndef __cplusplus @@ -223,9 +224,11 @@ typedef struct SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES; # if defined(__cplusplus) && !defined(CINTERFACE) # define REFIID const IID & # define REFGUID const GUID & +# define REFCLSID const CLSID & # else # define REFIID const IID * const # define REFGUID const GUID * const +# define REFCLSID const CLSID * const # endif
#if defined(__cplusplus) && !defined(CINTERFACE)
From: Martin Storsjö martin@martin.st
Signed-off-by: Martin Storsjö martin@martin.st --- include/vkd3d_d3d12.idl | 84 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+)
diff --git a/include/vkd3d_d3d12.idl b/include/vkd3d_d3d12.idl index 7a043d810..ae9498fc8 100644 --- a/include/vkd3d_d3d12.idl +++ b/include/vkd3d_d3d12.idl @@ -4999,6 +4999,90 @@ interface ID3D12SDKConfiguration : IUnknown HRESULT SetSDKVersion(UINT version, const char *path); }
+typedef enum D3D12_AXIS_SHADING_RATE +{ + D3D12_AXIS_SHADING_RATE_1X = 0x0, + D3D12_AXIS_SHADING_RATE_2X = 0x1, + D3D12_AXIS_SHADING_RATE_4X = 0x2, +} D3D12_AXIS_SHADING_RATE; + +typedef enum D3D12_SHADING_RATE +{ + D3D12_SHADING_RATE_1X1 = 0x0, + D3D12_SHADING_RATE_1X2 = 0x1, + D3D12_SHADING_RATE_2X1 = 0x4, + D3D12_SHADING_RATE_2X2 = 0x5, + D3D12_SHADING_RATE_2X4 = 0x6, + D3D12_SHADING_RATE_4X2 = 0x9, + D3D12_SHADING_RATE_4X4 = 0xa, +} D3D12_SHADING_RATE; + +typedef enum D3D12_SHADING_RATE_COMBINER +{ + D3D12_SHADING_RATE_COMBINER_PASSTHROUGH = 0x0, + D3D12_SHADING_RATE_COMBINER_OVERRIDE = 0x1, + D3D12_SHADING_RATE_COMBINER_MIN = 0x2, + D3D12_SHADING_RATE_COMBINER_MAX = 0x3, + D3D12_SHADING_RATE_COMBINER_SUM = 0x4, +} D3D12_SHADING_RATE_COMBINER; + +[ + uuid(55050859-4024-474c-87f5-6472eaee44ea), + object, + local, + pointer_default(unique) +] +interface ID3D12GraphicsCommandList5 : ID3D12GraphicsCommandList4 +{ + void RSSetShadingRate( + D3D12_SHADING_RATE base_shading_rate, + const D3D12_SHADING_RATE_COMBINER *combiners); + + void RSSetShadingRateImage( + ID3D12Resource *shading_rate_image); +} + +const UINT D3D12_SHADING_RATE_X_AXIS_SHIFT = 2; +const UINT D3D12_SHADING_RATE_VALID_MASK = 3; + +cpp_quote("#define D3D12_MAKE_COARSE_SHADING_RATE(x, y) ((x) << D3D12_SHADING_RATE_X_AXIS_SHIFT | (y))") +cpp_quote("#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(val) (((val) >> D3D12_SHADING_RATE_X_AXIS_SHIFT) & D3D12_SHADING_RATE_VALID_MASK)") +cpp_quote("#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(val) ((val) & D3D12_SHADING_RATE_VALID_MASK)") + +typedef struct D3D12_DISPATCH_MESH_ARGUMENTS +{ + UINT ThreadGroupCountX; + UINT ThreadGroupCountY; + UINT ThreadGroupCountZ; +} D3D12_DISPATCH_MESH_ARGUMENTS; + +[ + uuid(c3827890-e548-4cfa-96cf-5689a9370f80), + object, + local, + pointer_default(unique) +] +interface ID3D12GraphicsCommandList6 : ID3D12GraphicsCommandList5 +{ + void DispatchMesh( + UINT thread_group_count_x, + UINT thread_group_count_y, + UINT thread_group_count_z); +} + +[ + uuid(dd171223-8b61-4769-90e3-160ccde4e2c1), + object, + local, + pointer_default(unique) +] +interface ID3D12GraphicsCommandList7 : ID3D12GraphicsCommandList6 +{ + void Barrier( + UINT32 barrier_groups_count, + const D3D12_BARRIER_GROUP *barrier_groups); +}; + typedef HRESULT (__stdcall *PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER)( const void *data, SIZE_T data_size, REFIID iid, void **deserializer);
From: Martin Storsjö martin@martin.st
Signed-off-by: Martin Storsjö martin@martin.st --- include/vkd3d_d3d12.idl | 4 ++++ include/vkd3d_windows.h | 1 + 2 files changed, 5 insertions(+)
diff --git a/include/vkd3d_d3d12.idl b/include/vkd3d_d3d12.idl index ae9498fc8..71faf6118 100644 --- a/include/vkd3d_d3d12.idl +++ b/include/vkd3d_d3d12.idl @@ -5123,6 +5123,10 @@ typedef HRESULT (__stdcall *PFN_D3D12_GET_DEBUG_INTERFACE)(REFIID iid, void **de [local] HRESULT __stdcall D3D12EnableExperimentalFeatures(UINT feature_count, const IID *iids, void *configurations, UINT *configurations_sizes);
+cpp_quote("static const UUID D3D12ExperimentalShaderModels = { 0x76f5573e, 0xf13a, 0x40f5, { 0xb2, 0x97, 0x81, 0xce, 0x9e, 0x18, 0x93, 0x3f } };") +cpp_quote("static const UUID D3D12TiledResourceTier4 = { 0xc9c4725f, 0xa81a, 0x4f56, { 0x8c, 0x5b, 0xc5, 0x10, 0x39, 0xd6, 0x94, 0xfb } };") +cpp_quote("static const UUID D3D12MetaCommand = { 0xc734c97e, 0x8077, 0x48c8, { 0x9f, 0xdc, 0xd9, 0xd1, 0xdd, 0x31, 0xdd, 0x77 } };") + typedef HRESULT (__stdcall *PFN_D3D12_GET_INTERFACE)(REFCLSID clsid, REFIID iid, void **debug);
[local] HRESULT __stdcall D3D12GetInterface(REFCLSID clsid, REFIID iid, void **debug); diff --git a/include/vkd3d_windows.h b/include/vkd3d_windows.h index d53fd00b7..7b0e972d8 100644 --- a/include/vkd3d_windows.h +++ b/include/vkd3d_windows.h @@ -126,6 +126,7 @@ typedef struct _GUID
typedef GUID IID; typedef GUID CLSID; +typedef GUID UUID;
# ifdef INITGUID # ifndef __cplusplus
On Mon Sep 18 11:25:09 2023 +0000, Henri Verbeet wrote:
A couple of minor comments:
+typedef enum D3D12_SHADING_RATE_COMBINER +{ + D3D12_SHADING_RATE_COMBINER_PASSTHROUGH = 0, + D3D12_SHADING_RATE_COMBINER_OVERRIDE = 1, + D3D12_SHADING_RATE_COMBINER_MIN = 2, + D3D12_SHADING_RATE_COMBINER_MAX = 3, + D3D12_SHADING_RATE_COMBINER_SUM = 4, +} D3D12_SHADING_RATE_COMBINER;
It doesn't matter much here, but it seems some decimals slipped through.
+cpp_quote("#define D3D12_SHADING_RATE_X_AXIS_SHIFT 2") +cpp_quote("#define D3D12_SHADING_RATE_VALID_MASK 3")
Should that just use the following?
const UINT D3D12_SHADING_RATE_X_AXIS_SHIFT = 2; const UINT D3D12_SHADING_RATE_VALID_MASK = 3;
+cpp_quote("#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) <<
D3D12_SHADING_RATE_X_AXIS_SHIFT | (y))")
"D3D12_MAKE_COARSE_SHADING_RATE(x, y)"
+cpp_quote("#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & D3D12_SHADING_RATE_VALID_MASK)")
The choice of "y" for the macro parameter is a bit odd, I think. The macro extracts the y-axis value; the input would be a combined x and y shading rate value like those produced by D3D12_MAKE_COARSE_SHADING_RATE.
Thanks for the review.
I made that one enum use hexadecimal constants too, changed the `#define`s for plain constants into regular IDL-level constants, and changed the macro parameters `x` and `y` into `val` for the macros that extract the x or y value out of a combined value.
This merge request was approved by Henri Verbeet.