diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 9cff93007ce..8f293a3000d 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -1827,8 +1827,8 @@ ProjectSettings::ProjectSettings() { // The default value must match the minor part of the Agility SDK version // installed by the scripts provided in the repository // (check `misc/scripts/install_d3d12_sdk_windows.py`). - // For example, if the script installs 1.613.3, the default value must be 613. - GLOBAL_DEF_RST(PropertyInfo(Variant::INT, "rendering/rendering_device/d3d12/agility_sdk_version", PROPERTY_HINT_RANGE, "0,10000,1,or_greater,hide_control"), 613); + // For example, if the script installs 1.618.5, the default value must be 618. + GLOBAL_DEF_RST(PropertyInfo(Variant::INT, "rendering/rendering_device/d3d12/agility_sdk_version", PROPERTY_HINT_RANGE, "0,10000,1,or_greater,hide_control"), 618); GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "rendering/textures/canvas_textures/default_texture_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Linear Mipmap,Nearest Mipmap"), 1); GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "rendering/textures/canvas_textures/default_texture_repeat", PROPERTY_HINT_ENUM, "Disable,Enable,Mirror"), 0); diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 2b55cfe5329..a322ef87a08 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -3254,8 +3254,8 @@ Override for [member rendering/renderer/rendering_method] on web. - - Version code of the [url=https://devblogs.microsoft.com/directx/directx12agility/]Direct3D 12 Agility SDK[/url] to use ([code]D3D12SDKVersion[/code]). This must match the [i]minor[/i] version that is installed next to the editor binary and in the export templates directory for the current editor version. For example, if you have [code]1.613.3[/code] installed, you need to input [code]613[/code] here. + + Version code of the [url=https://devblogs.microsoft.com/directx/directx12agility/]Direct3D 12 Agility SDK[/url] to use ([code]D3D12SDKVersion[/code]). This must match the [i]minor[/i] version that is installed next to the editor binary and in the export templates directory for the current editor version. For example, if you have [code]1.618.5[/code] installed, you need to input [code]618[/code] here. The number of entries in the resource descriptor heap the Direct3D 12 rendering driver uses for most rendering operations. diff --git a/misc/scripts/install_d3d12_sdk_windows.py b/misc/scripts/install_d3d12_sdk_windows.py index ca350587976..9d4128b693b 100755 --- a/misc/scripts/install_d3d12_sdk_windows.py +++ b/misc/scripts/install_d3d12_sdk_windows.py @@ -41,8 +41,8 @@ pix_folder = os.path.join(deps_folder, "pix") # DirectX 12 Agility SDK # Check for latest version: https://www.nuget.org/api/v2/package/Microsoft.Direct3D.D3D12 (check downloaded filename) # After updating this, remember to change the default value of the `rendering/rendering_device/d3d12/agility_sdk_version` -# project setting to match the minor version (e.g. for `1.613.3`, it should be `613`). -agility_sdk_version = "1.613.3" +# project setting to match the minor version (e.g. for `1.618.5`, it should be `618`). +agility_sdk_version = "1.618.5" agility_sdk_archive = os.path.join(deps_folder, f"Agility_SDK_{agility_sdk_version}.nupkg") agility_sdk_folder = os.path.join(deps_folder, "agility_sdk") diff --git a/thirdparty/README.md b/thirdparty/README.md index 211e471619d..40bf2af4c2a 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -170,7 +170,7 @@ Patches: ## directx_headers - Upstream: https://github.com/microsoft/DirectX-Headers -- Version: 1.611.1 (48f23952bc08a6dce0727339c07cedbc4797356c, 2023) +- Version: 1.618.2 (dde59d560da2760fec612d6634124edc2a26b82f, 2025) - License: MIT Files extracted from upstream source: @@ -181,8 +181,7 @@ Files extracted from upstream source: Patches: -- `0001-mingw-pragma.patch` ([GH-83452](https://github.com/godotengine/godot/pull/83452)) -- `0002-win7-8-dynamic-load.patch` ([GH-88496](https://github.com/godotengine/godot/pull/88496)) +- `0001-win7-8-dynamic-load.patch` ([GH-88496](https://github.com/godotengine/godot/pull/88496)) ## doctest diff --git a/thirdparty/directx_headers/include/directx/DirectML.h b/thirdparty/directx_headers/include/directx/DirectML.h new file mode 100644 index 00000000000..3bd1921bcba --- /dev/null +++ b/thirdparty/directx_headers/include/directx/DirectML.h @@ -0,0 +1,2651 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#ifndef DIRECTML_H +#define DIRECTML_H +#pragma once + +#ifdef _GAMING_XBOX_SCARLETT +#include "d3d12_xs.h" +#elif _GAMING_XBOX_XBOXONE +#include "d3d12_x.h" +#else +#include "d3d12.h" +#endif + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) + +#ifndef DML_DECLARE_INTERFACE +#define DML_DECLARE_INTERFACE(iid) DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE +#endif + +#ifndef DML_TARGET_VERSION + +#if !defined(NTDDI_VERSION) || defined(DML_TARGET_VERSION_USE_LATEST) // Use the latest if using redist or no Windows target set. +#define DML_TARGET_VERSION 0x6400 +#elif defined(NTDDI_WIN10_ZN) && NTDDI_VERSION >= NTDDI_WIN10_ZN +#define DML_TARGET_VERSION 0x6000 +#elif defined(NTDDI_WIN10_NI) && NTDDI_VERSION >= NTDDI_WIN10_NI +#define DML_TARGET_VERSION 0x5000 +#elif defined(NTDDI_WIN10_CO) && NTDDI_VERSION >= NTDDI_WIN10_CO +#define DML_TARGET_VERSION 0x4000 +#elif defined(NTDDI_WIN10_FE) && NTDDI_VERSION >= NTDDI_WIN10_FE +#define DML_TARGET_VERSION 0x3000 +#elif defined(NTDDI_WIN10_VB) && NTDDI_VERSION >= NTDDI_WIN10_VB // Windows 10 2004 Update +#define DML_TARGET_VERSION 0x2000 +#else // defined(NTDDI_WIN10_19H1) && NTDDI_VERSION >= NTDDI_WIN10_19H1 // Windows 10 1903 Update +#define DML_TARGET_VERSION 0x1000 +#endif + +#endif // !defined(DML_TARGET_VERSION) + +// =================================================================================================================== +// DirectML constants +// =================================================================================================================== + +static const UINT DML_TENSOR_DIMENSION_COUNT_MAX = 5; +#if DML_TARGET_VERSION >= 0x3000 +static const UINT DML_TENSOR_DIMENSION_COUNT_MAX1 = 8; +#endif + +static const UINT DML_TEMPORARY_BUFFER_ALIGNMENT = 256; +static const UINT DML_PERSISTENT_BUFFER_ALIGNMENT = 256; + +static const UINT DML_MINIMUM_BUFFER_TENSOR_ALIGNMENT = 16; + + +// =================================================================================================================== +// Interface declarations +// =================================================================================================================== + +interface IDMLObject; +interface IDMLDevice; +interface IDMLDeviceChild; +interface IDMLPageable; +interface IDMLDispatchable; +interface IDMLOperator; +interface IDMLCompiledOperator; +interface IDMLOperatorInitializer; +interface IDMLBindingTable; +interface IDMLCommandRecorder; + + +// =================================================================================================================== +// Tensor descriptions +// =================================================================================================================== + +enum DML_TENSOR_DATA_TYPE +{ + DML_TENSOR_DATA_TYPE_UNKNOWN, + DML_TENSOR_DATA_TYPE_FLOAT32, + DML_TENSOR_DATA_TYPE_FLOAT16, + DML_TENSOR_DATA_TYPE_UINT32, + DML_TENSOR_DATA_TYPE_UINT16, + DML_TENSOR_DATA_TYPE_UINT8, + DML_TENSOR_DATA_TYPE_INT32, + DML_TENSOR_DATA_TYPE_INT16, + DML_TENSOR_DATA_TYPE_INT8, + DML_TENSOR_DATA_TYPE_FLOAT64, + DML_TENSOR_DATA_TYPE_UINT64, + DML_TENSOR_DATA_TYPE_INT64, +#if DML_TARGET_VERSION >= 0x6300 + DML_TENSOR_DATA_TYPE_UINT4, + DML_TENSOR_DATA_TYPE_INT4, +#endif // DML_TARGET_VERSION >= 0x6300 +}; + +enum DML_TENSOR_TYPE +{ + DML_TENSOR_TYPE_INVALID, + + DML_TENSOR_TYPE_BUFFER, +}; + +enum DML_TENSOR_FLAGS +{ + DML_TENSOR_FLAG_NONE = 0x0, + DML_TENSOR_FLAG_OWNED_BY_DML = 0x1, +}; + +DEFINE_ENUM_FLAG_OPERATORS(DML_TENSOR_FLAGS) + +struct DML_BUFFER_TENSOR_DESC +{ + DML_TENSOR_DATA_TYPE DataType; + DML_TENSOR_FLAGS Flags; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Sizes; + _Field_size_opt_(DimensionCount) const UINT* Strides; + UINT64 TotalTensorSizeInBytes; + UINT GuaranteedBaseOffsetAlignment; +}; + +struct DML_TENSOR_DESC +{ + DML_TENSOR_TYPE Type; + _Field_size_(_Inexpressible_("Dependent on tensor type")) const void* Desc; +}; + + +// =================================================================================================================== +// Operator types +// =================================================================================================================== + +enum DML_OPERATOR_TYPE +{ + DML_OPERATOR_INVALID, + + DML_OPERATOR_ELEMENT_WISE_IDENTITY, + DML_OPERATOR_ELEMENT_WISE_ABS, + DML_OPERATOR_ELEMENT_WISE_ACOS, + DML_OPERATOR_ELEMENT_WISE_ADD, + DML_OPERATOR_ELEMENT_WISE_ASIN, + DML_OPERATOR_ELEMENT_WISE_ATAN, + DML_OPERATOR_ELEMENT_WISE_CEIL, + DML_OPERATOR_ELEMENT_WISE_CLIP, + DML_OPERATOR_ELEMENT_WISE_COS, + DML_OPERATOR_ELEMENT_WISE_DIVIDE, + DML_OPERATOR_ELEMENT_WISE_EXP, + DML_OPERATOR_ELEMENT_WISE_FLOOR, + DML_OPERATOR_ELEMENT_WISE_LOG, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_AND, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_EQUALS, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_NOT, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_OR, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_XOR, + DML_OPERATOR_ELEMENT_WISE_MAX, + DML_OPERATOR_ELEMENT_WISE_MEAN, + DML_OPERATOR_ELEMENT_WISE_MIN, + DML_OPERATOR_ELEMENT_WISE_MULTIPLY, + DML_OPERATOR_ELEMENT_WISE_POW, + DML_OPERATOR_ELEMENT_WISE_CONSTANT_POW, + DML_OPERATOR_ELEMENT_WISE_RECIP, + DML_OPERATOR_ELEMENT_WISE_SIN, + DML_OPERATOR_ELEMENT_WISE_SQRT, + DML_OPERATOR_ELEMENT_WISE_SUBTRACT, + DML_OPERATOR_ELEMENT_WISE_TAN, + DML_OPERATOR_ELEMENT_WISE_THRESHOLD, + DML_OPERATOR_ELEMENT_WISE_QUANTIZE_LINEAR, + DML_OPERATOR_ELEMENT_WISE_DEQUANTIZE_LINEAR, + DML_OPERATOR_ACTIVATION_ELU, + DML_OPERATOR_ACTIVATION_HARDMAX, + DML_OPERATOR_ACTIVATION_HARD_SIGMOID, + DML_OPERATOR_ACTIVATION_IDENTITY, + DML_OPERATOR_ACTIVATION_LEAKY_RELU, + DML_OPERATOR_ACTIVATION_LINEAR, + DML_OPERATOR_ACTIVATION_LOG_SOFTMAX, + DML_OPERATOR_ACTIVATION_PARAMETERIZED_RELU, + DML_OPERATOR_ACTIVATION_PARAMETRIC_SOFTPLUS, + DML_OPERATOR_ACTIVATION_RELU, + DML_OPERATOR_ACTIVATION_SCALED_ELU, + DML_OPERATOR_ACTIVATION_SCALED_TANH, + DML_OPERATOR_ACTIVATION_SIGMOID, + DML_OPERATOR_ACTIVATION_SOFTMAX, + DML_OPERATOR_ACTIVATION_SOFTPLUS, + DML_OPERATOR_ACTIVATION_SOFTSIGN, + DML_OPERATOR_ACTIVATION_TANH, + DML_OPERATOR_ACTIVATION_THRESHOLDED_RELU, + DML_OPERATOR_CONVOLUTION, + DML_OPERATOR_GEMM, + DML_OPERATOR_REDUCE, + DML_OPERATOR_AVERAGE_POOLING, + DML_OPERATOR_LP_POOLING, + DML_OPERATOR_MAX_POOLING, + DML_OPERATOR_ROI_POOLING, + DML_OPERATOR_SLICE, + DML_OPERATOR_CAST, + DML_OPERATOR_SPLIT, + DML_OPERATOR_JOIN, + DML_OPERATOR_PADDING, + DML_OPERATOR_VALUE_SCALE_2D, + DML_OPERATOR_UPSAMPLE_2D, + DML_OPERATOR_GATHER, + DML_OPERATOR_SPACE_TO_DEPTH, + DML_OPERATOR_DEPTH_TO_SPACE, + DML_OPERATOR_TILE, + DML_OPERATOR_TOP_K, + DML_OPERATOR_BATCH_NORMALIZATION, + DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION, + DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION, + DML_OPERATOR_LP_NORMALIZATION, + DML_OPERATOR_RNN, + DML_OPERATOR_LSTM, + DML_OPERATOR_GRU, + +#if DML_TARGET_VERSION >= 0x2000 + DML_OPERATOR_ELEMENT_WISE_SIGN, + DML_OPERATOR_ELEMENT_WISE_IS_NAN, + DML_OPERATOR_ELEMENT_WISE_ERF, + DML_OPERATOR_ELEMENT_WISE_SINH, + DML_OPERATOR_ELEMENT_WISE_COSH, + DML_OPERATOR_ELEMENT_WISE_TANH, + DML_OPERATOR_ELEMENT_WISE_ASINH, + DML_OPERATOR_ELEMENT_WISE_ACOSH, + DML_OPERATOR_ELEMENT_WISE_ATANH, + DML_OPERATOR_ELEMENT_WISE_IF, + DML_OPERATOR_ELEMENT_WISE_ADD1, + DML_OPERATOR_ACTIVATION_SHRINK, + DML_OPERATOR_MAX_POOLING1, + DML_OPERATOR_MAX_UNPOOLING, + DML_OPERATOR_DIAGONAL_MATRIX, + DML_OPERATOR_SCATTER_ELEMENTS, + DML_OPERATOR_SCATTER = DML_OPERATOR_SCATTER_ELEMENTS, // Alias name for backwards compatibility. + DML_OPERATOR_ONE_HOT, + DML_OPERATOR_RESAMPLE, +#endif // DML_TARGET_VERSION >= 0x2000 + +#if DML_TARGET_VERSION >= 0x2100 + DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_LEFT, + DML_OPERATOR_ELEMENT_WISE_BIT_SHIFT_RIGHT, + DML_OPERATOR_ELEMENT_WISE_ROUND, + DML_OPERATOR_ELEMENT_WISE_IS_INFINITY, + DML_OPERATOR_ELEMENT_WISE_MODULUS_TRUNCATE, + DML_OPERATOR_ELEMENT_WISE_MODULUS_FLOOR, + DML_OPERATOR_FILL_VALUE_CONSTANT, + DML_OPERATOR_FILL_VALUE_SEQUENCE, + DML_OPERATOR_CUMULATIVE_SUMMATION, + DML_OPERATOR_REVERSE_SUBSEQUENCES, + DML_OPERATOR_GATHER_ELEMENTS, + DML_OPERATOR_GATHER_ND, + DML_OPERATOR_SCATTER_ND, + DML_OPERATOR_MAX_POOLING2, + DML_OPERATOR_SLICE1, + DML_OPERATOR_TOP_K1, + DML_OPERATOR_DEPTH_TO_SPACE1, + DML_OPERATOR_SPACE_TO_DEPTH1, + DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION1, + DML_OPERATOR_RESAMPLE1, + DML_OPERATOR_MATRIX_MULTIPLY_INTEGER, + DML_OPERATOR_QUANTIZED_LINEAR_MATRIX_MULTIPLY, + DML_OPERATOR_CONVOLUTION_INTEGER, + DML_OPERATOR_QUANTIZED_LINEAR_CONVOLUTION, +#endif // DML_TARGET_VERSION >= 0x2100 + +#if DML_TARGET_VERSION >= 0x3000 + DML_OPERATOR_ELEMENT_WISE_BIT_AND, + DML_OPERATOR_ELEMENT_WISE_BIT_OR, + DML_OPERATOR_ELEMENT_WISE_BIT_XOR, + DML_OPERATOR_ELEMENT_WISE_BIT_NOT, + DML_OPERATOR_ELEMENT_WISE_BIT_COUNT, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL, + DML_OPERATOR_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL, + DML_OPERATOR_ACTIVATION_CELU, + DML_OPERATOR_ACTIVATION_RELU_GRAD, + DML_OPERATOR_AVERAGE_POOLING_GRAD, + DML_OPERATOR_MAX_POOLING_GRAD, + DML_OPERATOR_RANDOM_GENERATOR, + DML_OPERATOR_NONZERO_COORDINATES, + DML_OPERATOR_RESAMPLE_GRAD, + DML_OPERATOR_SLICE_GRAD, + DML_OPERATOR_ADAM_OPTIMIZER, + DML_OPERATOR_ARGMIN, + DML_OPERATOR_ARGMAX, + DML_OPERATOR_ROI_ALIGN, + DML_OPERATOR_GATHER_ND1, +#endif // DML_TARGET_VERSION >= 0x3000 + +#if DML_TARGET_VERSION >= 0x3100 + DML_OPERATOR_ELEMENT_WISE_ATAN_YX, + DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD, + DML_OPERATOR_ELEMENT_WISE_DIFFERENCE_SQUARE, + DML_OPERATOR_LOCAL_RESPONSE_NORMALIZATION_GRAD, + DML_OPERATOR_CUMULATIVE_PRODUCT, + DML_OPERATOR_BATCH_NORMALIZATION_GRAD, +#endif // DML_TARGET_VERSION >= 0x3100 + +#if DML_TARGET_VERSION >= 0x4000 + DML_OPERATOR_ELEMENT_WISE_QUANTIZED_LINEAR_ADD, + DML_OPERATOR_DYNAMIC_QUANTIZE_LINEAR, + DML_OPERATOR_ROI_ALIGN1, +#endif // DML_TARGET_VERSION >= 0x4000 + +#if DML_TARGET_VERSION >= 0x4100 + DML_OPERATOR_ROI_ALIGN_GRAD, + DML_OPERATOR_BATCH_NORMALIZATION_TRAINING, + DML_OPERATOR_BATCH_NORMALIZATION_TRAINING_GRAD, +#endif // DML_TARGET_VERSION >= 0x4100 + +#if DML_TARGET_VERSION >= 0x5000 + DML_OPERATOR_ELEMENT_WISE_CLIP1, + DML_OPERATOR_ELEMENT_WISE_CLIP_GRAD1, + DML_OPERATOR_PADDING1, + DML_OPERATOR_ELEMENT_WISE_NEGATE, +#endif // DML_TARGET_VERSION >= 0x5000 + +#if DML_TARGET_VERSION >= 0x5100 + DML_OPERATOR_ACTIVATION_GELU, + DML_OPERATOR_ACTIVATION_SOFTMAX1, + DML_OPERATOR_ACTIVATION_LOG_SOFTMAX1, + DML_OPERATOR_ACTIVATION_HARDMAX1, + DML_OPERATOR_RESAMPLE2, + DML_OPERATOR_RESAMPLE_GRAD1, + DML_OPERATOR_DIAGONAL_MATRIX1, +#endif // DML_TARGET_VERSION >= 0x5100 + +#if DML_TARGET_VERSION >= 0x6100 + DML_OPERATOR_MULTIHEAD_ATTENTION, +#endif // DML_TARGET_VERSION >= 0x6100 + +#if DML_TARGET_VERSION >= 0x6200 + DML_OPERATOR_LP_POOLING1, + DML_OPERATOR_AVERAGE_POOLING1, + DML_OPERATOR_ACTIVATION_SWISH, + DML_OPERATOR_ACTIVATION_HARD_SWISH, + DML_OPERATOR_QUANTIZED_LINEAR_AVERAGE_POOLING, + DML_OPERATOR_MATRIX_MULTIPLY_INTEGER_TO_FLOAT, +#endif // DML_TARGET_VERSION >= 0x6200 + +#if DML_TARGET_VERSION >= 0x6300 + DML_OPERATOR_MEAN_VARIANCE_NORMALIZATION2, + DML_OPERATOR_MULTIHEAD_ATTENTION1, + DML_OPERATOR_QUANTIZE, + DML_OPERATOR_DEQUANTIZE, +#endif // DML_TARGET_VERSION >= 0x6300 + +#if DML_TARGET_VERSION >= 0x6400 + DML_OPERATOR_RESAMPLE3, + DML_OPERATOR_FOLD, + DML_OPERATOR_UNFOLD, +#endif // DML_TARGET_VERSION >= 0x6400 +}; + +// =================================================================================================================== +// Operator enumerations and structures +// =================================================================================================================== + +enum DML_REDUCE_FUNCTION +{ + DML_REDUCE_FUNCTION_ARGMAX, + DML_REDUCE_FUNCTION_ARGMIN, + DML_REDUCE_FUNCTION_AVERAGE, + DML_REDUCE_FUNCTION_L1, + DML_REDUCE_FUNCTION_L2, + DML_REDUCE_FUNCTION_LOG_SUM, + DML_REDUCE_FUNCTION_LOG_SUM_EXP, + DML_REDUCE_FUNCTION_MAX, + DML_REDUCE_FUNCTION_MIN, + DML_REDUCE_FUNCTION_MULTIPLY, + DML_REDUCE_FUNCTION_SUM, + DML_REDUCE_FUNCTION_SUM_SQUARE, +}; + +enum DML_MATRIX_TRANSFORM +{ + DML_MATRIX_TRANSFORM_NONE, + DML_MATRIX_TRANSFORM_TRANSPOSE, +}; + +enum DML_CONVOLUTION_MODE +{ + DML_CONVOLUTION_MODE_CONVOLUTION, + DML_CONVOLUTION_MODE_CROSS_CORRELATION, +}; + +enum DML_CONVOLUTION_DIRECTION +{ + DML_CONVOLUTION_DIRECTION_FORWARD, + DML_CONVOLUTION_DIRECTION_BACKWARD, +}; + +enum DML_PADDING_MODE +{ + DML_PADDING_MODE_CONSTANT, + DML_PADDING_MODE_EDGE, + DML_PADDING_MODE_REFLECTION, + +#if DML_TARGET_VERSION >= 0x3000 + DML_PADDING_MODE_SYMMETRIC, +#endif + +#if DML_TARGET_VERSION >= 0x6400 + DML_PADDING_MODE_WRAP, +#endif +}; + +enum DML_INTERPOLATION_MODE +{ + DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR, + DML_INTERPOLATION_MODE_LINEAR, +}; + +struct DML_SCALE_BIAS +{ + FLOAT Scale; + FLOAT Bias; +}; + +struct DML_SIZE_2D +{ + UINT Width; + UINT Height; +}; + +enum DML_RECURRENT_NETWORK_DIRECTION +{ + DML_RECURRENT_NETWORK_DIRECTION_FORWARD, + DML_RECURRENT_NETWORK_DIRECTION_BACKWARD, + DML_RECURRENT_NETWORK_DIRECTION_BIDIRECTIONAL, +}; + +#if DML_TARGET_VERSION >= 0x2100 + +enum DML_ROUNDING_MODE +{ + DML_ROUNDING_MODE_HALVES_TO_NEAREST_EVEN, + DML_ROUNDING_MODE_TOWARD_ZERO, + DML_ROUNDING_MODE_TOWARD_INFINITY, +}; + +enum DML_IS_INFINITY_MODE +{ + DML_IS_INFINITY_MODE_EITHER = 0, + DML_IS_INFINITY_MODE_POSITIVE = 1, + DML_IS_INFINITY_MODE_NEGATIVE = 2, +}; + +enum DML_AXIS_DIRECTION +{ + DML_AXIS_DIRECTION_INCREASING = 0, + DML_AXIS_DIRECTION_DECREASING = 1, +}; + +enum DML_DEPTH_SPACE_ORDER +{ + DML_DEPTH_SPACE_ORDER_DEPTH_COLUMN_ROW, + DML_DEPTH_SPACE_ORDER_COLUMN_ROW_DEPTH, +}; + +union DML_SCALAR_UNION +{ + BYTE Bytes[8]; + INT8 Int8; + UINT8 UInt8; + INT16 Int16; + UINT16 UInt16; + INT32 Int32; + UINT32 UInt32; + INT64 Int64; + UINT64 UInt64; + FLOAT Float32; + DOUBLE Float64; +}; + +#endif // DML_TARGET_VERSION >= 0x2100 + +#if DML_TARGET_VERSION >= 0x3000 + +enum DML_RANDOM_GENERATOR_TYPE +{ + DML_RANDOM_GENERATOR_TYPE_PHILOX_4X32_10 +}; + +#endif // DML_TARGET_VERSION >= 0x3000 + +#if DML_TARGET_VERSION >= 0x6100 + +enum DML_MULTIHEAD_ATTENTION_MASK_TYPE +{ + DML_MULTIHEAD_ATTENTION_MASK_TYPE_NONE, + DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_LENGTH, + DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_SEQUENCE_END_START, + DML_MULTIHEAD_ATTENTION_MASK_TYPE_KEY_QUERY_SEQUENCE_LENGTH_START_END, + DML_MULTIHEAD_ATTENTION_MASK_TYPE_BOOLEAN, +}; + +#endif // DML_TARGET_VERSION >= 0x6100 + +#if DML_TARGET_VERSION >= 0x6300 + +enum DML_QUANTIZATION_TYPE +{ + DML_QUANTIZATION_TYPE_NONE, + DML_QUANTIZATION_TYPE_SCALE, + DML_QUANTIZATION_TYPE_SCALE_ZERO_POINT, +}; + +#endif // DML_TARGET_VERSION >= 0x6300 + +// =================================================================================================================== +// Operator descriptions +// =================================================================================================================== + +struct DML_OPERATOR_DESC +{ + DML_OPERATOR_TYPE Type; + _Field_size_(_Inexpressible_("Dependent on operator type")) const void* Desc; +}; + +struct DML_ELEMENT_WISE_IDENTITY_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_ABS_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_ACOS_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_ADD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_ADD1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_OPERATOR_DESC* FusedActivation; +}; + +struct DML_ELEMENT_WISE_ASIN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_ATAN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_CEIL_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_CLIP_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; + FLOAT Min; + FLOAT Max; +}; + +struct DML_ELEMENT_WISE_COS_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_DIVIDE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_EXP_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_FLOOR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_LOG_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_LOGICAL_AND_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_LOGICAL_EQUALS_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_LOGICAL_NOT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_LOGICAL_OR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_LOGICAL_XOR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_MAX_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_MEAN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_MIN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_MULTIPLY_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_POW_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* ExponentTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_CONSTANT_POW_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; + FLOAT Exponent; +}; + +struct DML_ELEMENT_WISE_RECIP_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_SIN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_SQRT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_SUBTRACT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_TAN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_THRESHOLD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; + FLOAT Min; +}; + +struct DML_ELEMENT_WISE_QUANTIZE_LINEAR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* ScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* ZeroPointTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_DEQUANTIZE_LINEAR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* ScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* ZeroPointTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_ELU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; +}; + +struct DML_ACTIVATION_HARDMAX_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_HARD_SIGMOID_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; + FLOAT Beta; +}; + +struct DML_ACTIVATION_IDENTITY_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_LEAKY_RELU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; +}; + +struct DML_ACTIVATION_LINEAR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; + FLOAT Beta; +}; + +struct DML_ACTIVATION_LOG_SOFTMAX_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_PARAMETERIZED_RELU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* SlopeTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_PARAMETRIC_SOFTPLUS_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; + FLOAT Beta; +}; + +struct DML_ACTIVATION_RELU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_SCALED_ELU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; + FLOAT Gamma; +}; + +struct DML_ACTIVATION_SCALED_TANH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; + FLOAT Beta; +}; + +struct DML_ACTIVATION_SIGMOID_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_SOFTMAX_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_SOFTPLUS_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Steepness; +}; + +struct DML_ACTIVATION_SOFTSIGN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_TANH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_THRESHOLDED_RELU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; +}; + +struct DML_CONVOLUTION_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* FilterTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_CONVOLUTION_MODE Mode; + DML_CONVOLUTION_DIRECTION Direction; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* Dilations; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + _Field_size_(DimensionCount) const UINT* OutputPadding; + UINT GroupCount; + _Maybenull_ const DML_OPERATOR_DESC* FusedActivation; +}; + +struct DML_GEMM_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + _Maybenull_ const DML_TENSOR_DESC* CTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_MATRIX_TRANSFORM TransA; + DML_MATRIX_TRANSFORM TransB; + FLOAT Alpha; + FLOAT Beta; + _Maybenull_ const DML_OPERATOR_DESC* FusedActivation; +}; + +struct DML_REDUCE_OPERATOR_DESC +{ + DML_REDUCE_FUNCTION Function; + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT AxisCount; + _Field_size_(AxisCount) const UINT* Axes; +}; + +struct DML_AVERAGE_POOLING_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + BOOL IncludePadding; +}; + +struct DML_LP_POOLING_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + UINT P; +}; + +struct DML_MAX_POOLING_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; +}; + +struct DML_ROI_POOLING_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* ROITensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT SpatialScale; + DML_SIZE_2D PooledSize; +}; + +struct DML_SLICE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Offsets; + _Field_size_(DimensionCount) const UINT* Sizes; + _Field_size_(DimensionCount) const UINT* Strides; +}; + +struct DML_CAST_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_SPLIT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + UINT OutputCount; + _Field_size_(OutputCount) const DML_TENSOR_DESC* OutputTensors; + UINT Axis; +}; + +struct DML_JOIN_OPERATOR_DESC +{ + UINT InputCount; + _Field_size_(InputCount) const DML_TENSOR_DESC* InputTensors; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; +}; + +struct DML_PADDING_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_PADDING_MODE PaddingMode; + FLOAT PaddingValue; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; +}; + +struct DML_VALUE_SCALE_2D_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Scale; + UINT ChannelCount; + _Field_size_(ChannelCount) const FLOAT* Bias; +}; + +struct DML_UPSAMPLE_2D_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_SIZE_2D ScaleSize; + DML_INTERPOLATION_MODE InterpolationMode; +}; + +struct DML_GATHER_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* IndicesTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; + UINT IndexDimensions; +}; + +struct DML_SPACE_TO_DEPTH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT BlockSize; +}; + +struct DML_DEPTH_TO_SPACE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT BlockSize; +}; + +struct DML_TILE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT RepeatsCount; + _Field_size_(RepeatsCount) const UINT* Repeats; +}; + +struct DML_TOP_K_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputValueTensor; + const DML_TENSOR_DESC* OutputIndexTensor; + UINT Axis; + UINT K; +}; + +struct DML_BATCH_NORMALIZATION_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* MeanTensor; + const DML_TENSOR_DESC* VarianceTensor; + const DML_TENSOR_DESC* ScaleTensor; + const DML_TENSOR_DESC* BiasTensor; + const DML_TENSOR_DESC* OutputTensor; + BOOL Spatial; + FLOAT Epsilon; + _Maybenull_ const DML_OPERATOR_DESC* FusedActivation; +}; + +struct DML_MEAN_VARIANCE_NORMALIZATION_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + _Maybenull_ const DML_TENSOR_DESC* ScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + const DML_TENSOR_DESC* OutputTensor; + BOOL CrossChannel; + BOOL NormalizeVariance; + FLOAT Epsilon; + _Maybenull_ const DML_OPERATOR_DESC* FusedActivation; +}; + +struct DML_LOCAL_RESPONSE_NORMALIZATION_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + BOOL CrossChannel; + UINT LocalSize; + FLOAT Alpha; + FLOAT Beta; + FLOAT Bias; +}; + +struct DML_LP_NORMALIZATION_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; + FLOAT Epsilon; + UINT P; +}; + +struct DML_RNN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* WeightTensor; + const DML_TENSOR_DESC* RecurrenceTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + _Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor; + _Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor; + UINT ActivationDescCount; + _Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs; + DML_RECURRENT_NETWORK_DIRECTION Direction; +}; + +struct DML_LSTM_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* WeightTensor; + const DML_TENSOR_DESC* RecurrenceTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + _Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor; + _Maybenull_ const DML_TENSOR_DESC* CellMemInitTensor; + _Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor; + _Maybenull_ const DML_TENSOR_DESC* PeepholeTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputCellSingleTensor; + UINT ActivationDescCount; + _Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs; + DML_RECURRENT_NETWORK_DIRECTION Direction; + float ClipThreshold; + BOOL UseClipThreshold; + BOOL CoupleInputForget; +}; + +struct DML_GRU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* WeightTensor; + const DML_TENSOR_DESC* RecurrenceTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + _Maybenull_ const DML_TENSOR_DESC* HiddenInitTensor; + _Maybenull_ const DML_TENSOR_DESC* SequenceLengthsTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputSequenceTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputSingleTensor; + UINT ActivationDescCount; + _Field_size_(ActivationDescCount) const DML_OPERATOR_DESC* ActivationDescs; + DML_RECURRENT_NETWORK_DIRECTION Direction; + BOOL LinearBeforeReset; +}; + +#if DML_TARGET_VERSION >= 0x2000 + +struct DML_ELEMENT_WISE_SIGN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_IS_NAN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_ERF_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_SINH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_COSH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_TANH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_ASINH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_ACOSH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_ATANH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; +}; + +struct DML_ELEMENT_WISE_IF_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ConditionTensor; + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_SHRINK_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Bias; + FLOAT Threshold; +}; + +struct DML_MAX_POOLING1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputIndicesTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; +}; + +struct DML_MAX_UNPOOLING_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* IndicesTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_DIAGONAL_MATRIX_OPERATOR_DESC +{ + const DML_TENSOR_DESC* OutputTensor; + INT Offset; + FLOAT Value; +}; + +struct DML_SCATTER_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* IndicesTensor; + const DML_TENSOR_DESC* UpdatesTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; +}; + +struct DML_ONE_HOT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* IndicesTensor; + const DML_TENSOR_DESC* ValuesTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; +}; + +struct DML_RESAMPLE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_INTERPOLATION_MODE InterpolationMode; + UINT ScaleCount; + _Field_size_(ScaleCount) const FLOAT* Scales; +}; + +#endif // DML_TARGET_VERSION >= 0x2000 + +#if DML_TARGET_VERSION >= 0x2100 + +struct DML_ELEMENT_WISE_BIT_SHIFT_LEFT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_BIT_SHIFT_RIGHT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_ROUND_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_ROUNDING_MODE RoundingMode; +}; + +struct DML_ELEMENT_WISE_IS_INFINITY_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_IS_INFINITY_MODE InfinityMode; +}; + +struct DML_ELEMENT_WISE_MODULUS_TRUNCATE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_MODULUS_FLOOR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_FILL_VALUE_CONSTANT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* OutputTensor; + DML_TENSOR_DATA_TYPE ValueDataType; + DML_SCALAR_UNION Value; +}; + +struct DML_FILL_VALUE_SEQUENCE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* OutputTensor; + DML_TENSOR_DATA_TYPE ValueDataType; + DML_SCALAR_UNION ValueStart; + DML_SCALAR_UNION ValueDelta; +}; + +struct DML_CUMULATIVE_SUMMATION_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; + DML_AXIS_DIRECTION AxisDirection; + BOOL HasExclusiveSum; +}; + +struct DML_REVERSE_SUBSEQUENCES_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* SequenceLengthsTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; +}; + +struct DML_GATHER_ELEMENTS_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* IndicesTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; +}; + +// Alias existing operator, symmetric with DML_GATHER_ELEMENTS_OPERATOR_DESC. +using DML_SCATTER_ELEMENTS_OPERATOR_DESC = DML_SCATTER_OPERATOR_DESC; + +struct DML_GATHER_ND_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* IndicesTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT InputDimensionCount; + UINT IndicesDimensionCount; +}; + +struct DML_SCATTER_ND_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* IndicesTensor; + const DML_TENSOR_DESC* UpdatesTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT InputDimensionCount; + UINT IndicesDimensionCount; +}; + +struct DML_MAX_POOLING2_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputIndicesTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + _Field_size_(DimensionCount) const UINT* Dilations; +}; + +struct DML_SLICE1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* InputWindowOffsets; + _Field_size_(DimensionCount) const UINT* InputWindowSizes; + _Field_size_(DimensionCount) const INT* InputWindowStrides; +}; + +struct DML_TOP_K1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputValueTensor; + const DML_TENSOR_DESC* OutputIndexTensor; + UINT Axis; + UINT K; + DML_AXIS_DIRECTION AxisDirection; +}; + +struct DML_DEPTH_TO_SPACE1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT BlockSize; + DML_DEPTH_SPACE_ORDER Order; +}; + +struct DML_SPACE_TO_DEPTH1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT BlockSize; + DML_DEPTH_SPACE_ORDER Order; +}; + +struct DML_MEAN_VARIANCE_NORMALIZATION1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + _Maybenull_ const DML_TENSOR_DESC* ScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT AxisCount; + _Field_size_(AxisCount) const UINT* Axes; + BOOL NormalizeVariance; + FLOAT Epsilon; + _Maybenull_ const DML_OPERATOR_DESC* FusedActivation; +}; + +struct DML_RESAMPLE1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_INTERPOLATION_MODE InterpolationMode; + UINT DimensionCount; + _Field_size_(DimensionCount) const FLOAT* Scales; + _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets; + _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets; +}; + +struct DML_MATRIX_MULTIPLY_INTEGER_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + _Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor; + const DML_TENSOR_DESC* BTensor; + _Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* AScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* BScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor; + const DML_TENSOR_DESC* OutputScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_CONVOLUTION_INTEGER_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + _Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor; + const DML_TENSOR_DESC* FilterTensor; + _Maybenull_ const DML_TENSOR_DESC* FilterZeroPointTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* Dilations; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + UINT GroupCount; +}; + +struct DML_QUANTIZED_LINEAR_CONVOLUTION_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor; + const DML_TENSOR_DESC* FilterTensor; + const DML_TENSOR_DESC* FilterScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* FilterZeroPointTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + const DML_TENSOR_DESC* OutputScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* Dilations; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + UINT GroupCount; +}; + +#endif // DML_TARGET_VERSION >= 0x2100 + +#if DML_TARGET_VERSION >= 0x3000 + +struct DML_ELEMENT_WISE_BIT_AND_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_BIT_OR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_BIT_XOR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_BIT_NOT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_BIT_COUNT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_LOGICAL_GREATER_THAN_OR_EQUAL_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_LOGICAL_LESS_THAN_OR_EQUAL_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_CELU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; +}; + +struct DML_ACTIVATION_RELU_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; +}; + +struct DML_AVERAGE_POOLING_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + BOOL IncludePadding; +}; + +struct DML_MAX_POOLING_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + _Field_size_(DimensionCount) const UINT* Dilations; +}; + +struct DML_RANDOM_GENERATOR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputStateTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputStateTensor; + DML_RANDOM_GENERATOR_TYPE Type; +}; + +struct DML_NONZERO_COORDINATES_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputCountTensor; + const DML_TENSOR_DESC* OutputCoordinatesTensor; +}; + +struct DML_RESAMPLE_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + DML_INTERPOLATION_MODE InterpolationMode; + UINT DimensionCount; + _Field_size_(DimensionCount) const FLOAT* Scales; + _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets; + _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets; +}; + +struct DML_SLICE_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* InputWindowOffsets; + _Field_size_(DimensionCount) const UINT* InputWindowSizes; + _Field_size_(DimensionCount) const INT* InputWindowStrides; +}; + +struct DML_ADAM_OPTIMIZER_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputParametersTensor; + const DML_TENSOR_DESC* InputFirstMomentTensor; + const DML_TENSOR_DESC* InputSecondMomentTensor; + const DML_TENSOR_DESC* GradientTensor; + const DML_TENSOR_DESC* TrainingStepTensor; + const DML_TENSOR_DESC* OutputParametersTensor; + const DML_TENSOR_DESC* OutputFirstMomentTensor; + const DML_TENSOR_DESC* OutputSecondMomentTensor; + FLOAT LearningRate; + FLOAT Beta1; + FLOAT Beta2; + FLOAT Epsilon; +}; + +struct DML_ARGMIN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT AxisCount; + _Field_size_(AxisCount) const UINT* Axes; + DML_AXIS_DIRECTION AxisDirection; +}; + +struct DML_ARGMAX_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT AxisCount; + _Field_size_(AxisCount) const UINT* Axes; + DML_AXIS_DIRECTION AxisDirection; +}; + +struct DML_ROI_ALIGN_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* ROITensor; + const DML_TENSOR_DESC* BatchIndicesTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_REDUCE_FUNCTION ReductionFunction; + DML_INTERPOLATION_MODE InterpolationMode; + FLOAT SpatialScaleX; + FLOAT SpatialScaleY; + FLOAT OutOfBoundsInputValue; + UINT MinimumSamplesPerOutput; + UINT MaximumSamplesPerOutput; +}; + +struct DML_GATHER_ND1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* IndicesTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT InputDimensionCount; + UINT IndicesDimensionCount; + UINT BatchDimensionCount; +}; + +#endif // DML_TARGET_VERSION >= 0x3000 + +#if DML_TARGET_VERSION >= 0x3100 + +struct DML_ELEMENT_WISE_ATAN_YX_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ELEMENT_WISE_CLIP_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + FLOAT Min; + FLOAT Max; +}; + +struct DML_ELEMENT_WISE_DIFFERENCE_SQUARE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_LOCAL_RESPONSE_NORMALIZATION_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + BOOL CrossChannel; + UINT LocalSize; + FLOAT Alpha; + FLOAT Beta; + FLOAT Bias; +}; + +struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT Axis; + DML_AXIS_DIRECTION AxisDirection; + BOOL HasExclusiveProduct; +}; + +struct DML_BATCH_NORMALIZATION_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* MeanTensor; + const DML_TENSOR_DESC* VarianceTensor; + const DML_TENSOR_DESC* ScaleTensor; + + const DML_TENSOR_DESC* OutputGradientTensor; + const DML_TENSOR_DESC* OutputScaleGradientTensor; + const DML_TENSOR_DESC* OutputBiasGradientTensor; + + FLOAT Epsilon; +}; + +#endif // DML_TARGET_VERSION >= 0x3100 + +#if DML_TARGET_VERSION >= 0x4000 +struct DML_ELEMENT_WISE_QUANTIZED_LINEAR_ADD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* AScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* BScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor; + const DML_TENSOR_DESC* OutputScaleTensor; // This is an input tensor + _Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor; // This is an input tensor + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_DYNAMIC_QUANTIZE_LINEAR_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + const DML_TENSOR_DESC* OutputScaleTensor; // This is an output tensor + const DML_TENSOR_DESC* OutputZeroPointTensor; // This is an output tensor +}; + +struct DML_ROI_ALIGN1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* ROITensor; + const DML_TENSOR_DESC* BatchIndicesTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_REDUCE_FUNCTION ReductionFunction; + DML_INTERPOLATION_MODE InterpolationMode; + FLOAT SpatialScaleX; + FLOAT SpatialScaleY; + FLOAT InputPixelOffset; + FLOAT OutputPixelOffset; + FLOAT OutOfBoundsInputValue; + UINT MinimumSamplesPerOutput; + UINT MaximumSamplesPerOutput; + BOOL AlignRegionsToCorners; +}; + +#endif // DML_TARGET_VERSION >= 0x4000 + +#if DML_TARGET_VERSION >= 0x4100 + +struct DML_ROI_ALIGN_GRAD_OPERATOR_DESC +{ + _Maybenull_ const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* ROITensor; + const DML_TENSOR_DESC* BatchIndicesTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputGradientTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputROIGradientTensor; + DML_REDUCE_FUNCTION ReductionFunction; + DML_INTERPOLATION_MODE InterpolationMode; + FLOAT SpatialScaleX; + FLOAT SpatialScaleY; + FLOAT InputPixelOffset; + FLOAT OutputPixelOffset; + UINT MinimumSamplesPerOutput; + UINT MaximumSamplesPerOutput; + BOOL AlignRegionsToCorners; +}; + +struct DML_BATCH_NORMALIZATION_TRAINING_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* ScaleTensor; + const DML_TENSOR_DESC* BiasTensor; + _Maybenull_ const DML_TENSOR_DESC* FusedAddTensor; + const DML_TENSOR_DESC* OutputTensor; + const DML_TENSOR_DESC* OutputMeanTensor; + const DML_TENSOR_DESC* OutputVarianceTensor; + FLOAT Epsilon; + _Maybenull_ const DML_OPERATOR_DESC* FusedActivation; +}; + +struct DML_BATCH_NORMALIZATION_TRAINING_GRAD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* MeanTensor; + const DML_TENSOR_DESC* VarianceTensor; + const DML_TENSOR_DESC* ScaleTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + const DML_TENSOR_DESC* OutputScaleGradientTensor; + const DML_TENSOR_DESC* OutputBiasGradientTensor; + FLOAT Epsilon; +}; + +#endif // DML_TARGET_VERSION >= 0x4100 + +#if DML_TARGET_VERSION >= 0x5000 + +struct DML_ELEMENT_WISE_CLIP1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_SCALE_BIAS* ScaleBias; + DML_TENSOR_DATA_TYPE MinMaxDataType; + DML_SCALAR_UNION Min; + DML_SCALAR_UNION Max; +}; + +struct DML_ELEMENT_WISE_CLIP_GRAD1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + DML_TENSOR_DATA_TYPE MinMaxDataType; + DML_SCALAR_UNION Min; + DML_SCALAR_UNION Max; +}; + +struct DML_PADDING1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_PADDING_MODE PaddingMode; + DML_TENSOR_DATA_TYPE PaddingValueDataType; + DML_SCALAR_UNION PaddingValue; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; +}; + +struct DML_ELEMENT_WISE_NEGATE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +#endif // DML_TARGET_VERSION >= 0x5000 + +#if DML_TARGET_VERSION >= 0x5100 + +struct DML_ACTIVATION_GELU_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_ACTIVATION_SOFTMAX1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT AxisCount; + _Field_size_(AxisCount) const UINT* Axes; +}; + +struct DML_ACTIVATION_LOG_SOFTMAX1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT AxisCount; + _Field_size_(AxisCount) const UINT* Axes; +}; + +struct DML_ACTIVATION_HARDMAX1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT AxisCount; + _Field_size_(AxisCount) const UINT* Axes; +}; + +struct DML_RESAMPLE2_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_INTERPOLATION_MODE InterpolationMode; + DML_AXIS_DIRECTION RoundingDirection; + UINT DimensionCount; + _Field_size_(DimensionCount) const FLOAT* Scales; + _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets; + _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets; +}; + +struct DML_RESAMPLE_GRAD1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputGradientTensor; + const DML_TENSOR_DESC* OutputGradientTensor; + DML_INTERPOLATION_MODE InterpolationMode; + DML_AXIS_DIRECTION RoundingDirection; + UINT DimensionCount; + _Field_size_(DimensionCount) const FLOAT* Scales; + _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets; + _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets; +}; + +struct DML_DIAGONAL_MATRIX1_OPERATOR_DESC +{ + _Maybenull_ const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_TENSOR_DATA_TYPE ValueDataType; + DML_SCALAR_UNION Value; + INT DiagonalFillBegin; + INT DiagonalFillEnd; +}; + +#endif // DML_TARGET_VERSION >= 0x5100 + +#if DML_TARGET_VERSION >= 0x6100 + +struct DML_MULTIHEAD_ATTENTION_OPERATOR_DESC +{ + _Maybenull_ const DML_TENSOR_DESC* QueryTensor; + _Maybenull_ const DML_TENSOR_DESC* KeyTensor; + _Maybenull_ const DML_TENSOR_DESC* ValueTensor; + _Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor; + _Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor; + _Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + _Maybenull_ const DML_TENSOR_DESC* MaskTensor; + _Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor; + _Maybenull_ const DML_TENSOR_DESC* PastKeyTensor; + _Maybenull_ const DML_TENSOR_DESC* PastValueTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor; + FLOAT Scale; + FLOAT MaskFilterValue; + UINT HeadCount; + DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType; +}; + +#endif // DML_TARGET_VERSION >= 0x6100 + +#if DML_TARGET_VERSION >= 0x6200 + +struct DML_LP_POOLING1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + _Field_size_(DimensionCount) const UINT* Dilations; + UINT P; +}; + +struct DML_AVERAGE_POOLING1_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + _Field_size_(DimensionCount) const UINT* Dilations; + BOOL IncludePadding; +}; + +struct DML_ACTIVATION_SWISH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT SigmoidInputScale; +}; + +struct DML_ACTIVATION_HARD_SWISH_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + FLOAT Alpha; + FLOAT Beta; +}; + +struct DML_QUANTIZED_LINEAR_AVERAGE_POOLING_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* InputScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* InputZeroPointTensor; + const DML_TENSOR_DESC* OutputScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputZeroPointTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* Strides; + _Field_size_(DimensionCount) const UINT* WindowSize; + _Field_size_(DimensionCount) const UINT* StartPadding; + _Field_size_(DimensionCount) const UINT* EndPadding; + _Field_size_(DimensionCount) const UINT* Dilations; + BOOL IncludePadding; +}; + +struct DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC +{ + const DML_TENSOR_DESC* ATensor; + const DML_TENSOR_DESC* AScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor; + const DML_TENSOR_DESC* BTensor; + const DML_TENSOR_DESC* BScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + const DML_TENSOR_DESC* OutputTensor; +}; + +#endif // DML_TARGET_VERSION >= 0x6200 + +#if DML_TARGET_VERSION >= 0x6300 + +struct DML_MEAN_VARIANCE_NORMALIZATION2_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + _Maybenull_ const DML_TENSOR_DESC* ScaleTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT AxisCount; + _Field_size_(AxisCount) const UINT* Axes; + BOOL UseMean; + BOOL UseVariance; + FLOAT Epsilon; + _Maybenull_ const DML_OPERATOR_DESC* FusedActivation; +}; + +struct DML_MULTIHEAD_ATTENTION1_OPERATOR_DESC +{ + _Maybenull_ const DML_TENSOR_DESC* QueryTensor; + _Maybenull_ const DML_TENSOR_DESC* KeyTensor; + _Maybenull_ const DML_TENSOR_DESC* ValueTensor; + _Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyTensor; + _Maybenull_ const DML_TENSOR_DESC* StackedKeyValueTensor; + _Maybenull_ const DML_TENSOR_DESC* StackedQueryKeyValueTensor; + _Maybenull_ const DML_TENSOR_DESC* BiasTensor; + _Maybenull_ const DML_TENSOR_DESC* MaskTensor; + _Maybenull_ const DML_TENSOR_DESC* RelativePositionBiasTensor; + _Maybenull_ const DML_TENSOR_DESC* PastKeyTensor; + _Maybenull_ const DML_TENSOR_DESC* PastValueTensor; + _Maybenull_ const DML_TENSOR_DESC* PastSequenceLengthsTensor; + const DML_TENSOR_DESC* OutputTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputPresentKeyTensor; + _Maybenull_ const DML_TENSOR_DESC* OutputPresentValueTensor; + FLOAT Scale; + FLOAT MaskFilterValue; + UINT QueryHeadCount; + UINT KeyValueHeadCount; + DML_MULTIHEAD_ATTENTION_MASK_TYPE MaskType; +}; + +struct DML_QUANTIZE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + DML_QUANTIZATION_TYPE QuantizationType; + UINT QuantizationTensorCount; + _Field_size_(QuantizationTensorCount) const DML_TENSOR_DESC* QuantizationTensors; + const DML_TENSOR_DESC* OutputTensor; +}; + +struct DML_DEQUANTIZE_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + DML_QUANTIZATION_TYPE QuantizationType; + UINT QuantizationTensorCount; + _Field_size_(QuantizationTensorCount) const DML_TENSOR_DESC* QuantizationTensors; + const DML_TENSOR_DESC* OutputTensor; +}; + +#endif // DML_TARGET_VERSION >= 0x6300 + +#if DML_TARGET_VERSION >= 0x6400 + +struct DML_RESAMPLE3_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + DML_INTERPOLATION_MODE InterpolationMode; + DML_AXIS_DIRECTION RoundingDirection; + UINT DimensionCount; + _Field_size_(DimensionCount) const FLOAT* Scales; + _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets; + _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets; + BOOL Antialiased; +}; + +struct DML_FOLD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* WindowSizes; // Size of the extracted patch + _Field_size_(DimensionCount) const UINT* Strides; // Step size of the extracted patches + _Field_size_(DimensionCount) const UINT* Dilations; // Dialations of the extracted patch + _Field_size_(DimensionCount) const UINT* StartPadding; // Start padding of the "source tensor" + _Field_size_(DimensionCount) const UINT* EndPadding; // End padding of the "source tensor" +}; + +struct DML_UNFOLD_OPERATOR_DESC +{ + const DML_TENSOR_DESC* InputTensor; + const DML_TENSOR_DESC* OutputTensor; + UINT DimensionCount; + _Field_size_(DimensionCount) const UINT* WindowSizes; // Size of the extracted patch + _Field_size_(DimensionCount) const UINT* Strides; // Step size of the extracted patches + _Field_size_(DimensionCount) const UINT* Dilations; // Dialations of the extracted patch + _Field_size_(DimensionCount) const UINT* StartPadding; // Start padding of the "source tensor" + _Field_size_(DimensionCount) const UINT* EndPadding; // End padding of the "source tensor" +}; + +#endif // DML_TARGET_VERSION >= 0x6400 + +// =================================================================================================================== +// DML feature support queries +// =================================================================================================================== + +#if DML_TARGET_VERSION >= 0x2000 + +enum DML_FEATURE_LEVEL +{ + DML_FEATURE_LEVEL_1_0 = 0x1000, + DML_FEATURE_LEVEL_2_0 = 0x2000, + DML_FEATURE_LEVEL_2_1 = 0x2100, + DML_FEATURE_LEVEL_3_0 = 0x3000, + DML_FEATURE_LEVEL_3_1 = 0x3100, + DML_FEATURE_LEVEL_4_0 = 0x4000, + DML_FEATURE_LEVEL_4_1 = 0x4100, + DML_FEATURE_LEVEL_5_0 = 0x5000, + DML_FEATURE_LEVEL_5_1 = 0x5100, + DML_FEATURE_LEVEL_5_2 = 0x5200, + DML_FEATURE_LEVEL_6_0 = 0x6000, + DML_FEATURE_LEVEL_6_1 = 0x6100, + DML_FEATURE_LEVEL_6_2 = 0x6200, + DML_FEATURE_LEVEL_6_3 = 0x6300, + DML_FEATURE_LEVEL_6_4 = 0x6400, +}; + +#endif // DML_TARGET_VERSION >= 0x2000 + +enum DML_FEATURE +{ + DML_FEATURE_TENSOR_DATA_TYPE_SUPPORT, + +#if DML_TARGET_VERSION >= 0x2000 + DML_FEATURE_FEATURE_LEVELS, +#endif // DML_TARGET_VERSION >= 0x2000 +}; + +struct DML_FEATURE_QUERY_TENSOR_DATA_TYPE_SUPPORT +{ + DML_TENSOR_DATA_TYPE DataType; +}; + +struct DML_FEATURE_DATA_TENSOR_DATA_TYPE_SUPPORT +{ + BOOL IsSupported; +}; + +#if DML_TARGET_VERSION >= 0x2000 + +struct DML_FEATURE_QUERY_FEATURE_LEVELS +{ + UINT RequestedFeatureLevelCount; + _Field_size_(RequestedFeatureLevelCount) const DML_FEATURE_LEVEL* RequestedFeatureLevels; +}; + +struct DML_FEATURE_DATA_FEATURE_LEVELS +{ + DML_FEATURE_LEVEL MaxSupportedFeatureLevel; +}; + +#endif // DML_TARGET_VERSION >= 0x2000 + +// =================================================================================================================== +// DML device functions, enumerations, and structures +// =================================================================================================================== + +struct DML_BINDING_TABLE_DESC +{ + IDMLDispatchable* Dispatchable; + D3D12_CPU_DESCRIPTOR_HANDLE CPUDescriptorHandle; + D3D12_GPU_DESCRIPTOR_HANDLE GPUDescriptorHandle; + UINT SizeInDescriptors; +}; + +enum DML_EXECUTION_FLAGS +{ + DML_EXECUTION_FLAG_NONE = 0, + DML_EXECUTION_FLAG_ALLOW_HALF_PRECISION_COMPUTATION = 0x1, + DML_EXECUTION_FLAG_DISABLE_META_COMMANDS = 0x2, + DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE = 0x4, +}; + +DEFINE_ENUM_FLAG_OPERATORS(DML_EXECUTION_FLAGS) + +enum DML_CREATE_DEVICE_FLAGS +{ + DML_CREATE_DEVICE_FLAG_NONE = 0, + DML_CREATE_DEVICE_FLAG_DEBUG = 0x1, +}; + +DEFINE_ENUM_FLAG_OPERATORS(DML_CREATE_DEVICE_FLAGS) + +STDAPI DMLCreateDevice( + ID3D12Device* d3d12Device, + DML_CREATE_DEVICE_FLAGS flags, + REFIID riid, // Expected: IDMLDevice + _COM_Outptr_opt_ void** ppv + ); + +#if DML_TARGET_VERSION >= 0x2000 + +STDAPI DMLCreateDevice1( + ID3D12Device* d3d12Device, + DML_CREATE_DEVICE_FLAGS flags, + DML_FEATURE_LEVEL minimumFeatureLevel, + REFIID riid, // Expected: IDMLDevice + _COM_Outptr_opt_ void** ppv + ); + +#endif // DML_TARGET_VERSION >= 0x2000 + +// =================================================================================================================== +// DML object +// =================================================================================================================== + +interface DML_DECLARE_INTERFACE("c8263aac-9e0c-4a2d-9b8e-007521a3317c") IDMLObject : IUnknown +{ + IFACEMETHOD(GetPrivateData)( + REFGUID guid, + _Inout_ UINT* dataSize, + _Out_writes_bytes_opt_(*dataSize) void* data + ) = 0; + + IFACEMETHOD(SetPrivateData)( + REFGUID guid, + UINT dataSize, + _In_reads_bytes_opt_(dataSize) const void* data + ) = 0; + + IFACEMETHOD(SetPrivateDataInterface)( + REFGUID guid, + _In_opt_ IUnknown* data + ) = 0; + + IFACEMETHOD(SetName)( + PCWSTR name + ) = 0; +}; + +// =================================================================================================================== +// DML device +// =================================================================================================================== + +interface DML_DECLARE_INTERFACE("6dbd6437-96fd-423f-a98c-ae5e7c2a573f") IDMLDevice : IDMLObject +{ + IFACEMETHOD(CheckFeatureSupport)( + DML_FEATURE feature, + UINT featureQueryDataSize, + _In_reads_bytes_opt_(featureQueryDataSize) const void* featureQueryData, + UINT featureSupportDataSize, + _Out_writes_bytes_(featureSupportDataSize) void* featureSupportData + ) = 0; + + IFACEMETHOD(CreateOperator)( + const DML_OPERATOR_DESC* desc, + REFIID riid, // expected: IDMLOperator + _COM_Outptr_opt_ void** ppv + ) = 0; + + IFACEMETHOD(CompileOperator)( + IDMLOperator* op, + DML_EXECUTION_FLAGS flags, + REFIID riid, // expected: IDMLCompiledOperator + _COM_Outptr_opt_ void** ppv + ) = 0; + + IFACEMETHOD(CreateOperatorInitializer)( + UINT operatorCount, + _In_reads_opt_(operatorCount) IDMLCompiledOperator* const* operators, + REFIID riid, // expected: IDMLOperatorInitializer + _COM_Outptr_ void** ppv + ) = 0; + + IFACEMETHOD(CreateCommandRecorder)( + REFIID riid, // expected: IDMLCommandRecorder + _COM_Outptr_ void** ppv + ) = 0; + + IFACEMETHOD(CreateBindingTable)( + _In_opt_ const DML_BINDING_TABLE_DESC* desc, + REFIID riid, // expected: IDMLBindingTable + _COM_Outptr_ void** ppv + ) = 0; + + IFACEMETHOD(Evict)( + UINT count, + _In_reads_(count) IDMLPageable* const* ppObjects + ) = 0; + + IFACEMETHOD(MakeResident)( + UINT count, + _In_reads_(count) IDMLPageable* const* ppObjects + ) = 0; + + IFACEMETHOD(GetDeviceRemovedReason)( + ) = 0; + + IFACEMETHOD(GetParentDevice)( + REFIID riid, + _COM_Outptr_ void** ppv + ) = 0; +}; + + +// =================================================================================================================== +// DML device children +// =================================================================================================================== + +interface DML_DECLARE_INTERFACE("27e83142-8165-49e3-974e-2fd66e4cb69d") IDMLDeviceChild : IDMLObject +{ + IFACEMETHOD(GetDevice)( + REFIID riid, // expected: IDMLDevice + _COM_Outptr_ void** ppv + ) = 0; +}; + +interface DML_DECLARE_INTERFACE("b1ab0825-4542-4a4b-8617-6dde6e8f6201") IDMLPageable : IDMLDeviceChild +{ +}; + + +// =================================================================================================================== +// DML operator +// =================================================================================================================== + +interface DML_DECLARE_INTERFACE("26caae7a-3081-4633-9581-226fbe57695d") IDMLOperator : IDMLDeviceChild +{ +}; + + +// =================================================================================================================== +// DML dispatchable +// =================================================================================================================== + +struct DML_BINDING_PROPERTIES +{ + UINT RequiredDescriptorCount; + UINT64 TemporaryResourceSize; + UINT64 PersistentResourceSize; +}; + +interface DML_DECLARE_INTERFACE("dcb821a8-1039-441e-9f1c-b1759c2f3cec") IDMLDispatchable : IDMLPageable +{ + IFACEMETHOD_(DML_BINDING_PROPERTIES, GetBindingProperties)() = 0; +}; + + +// =================================================================================================================== +// DML compiled operator +// =================================================================================================================== + +interface DML_DECLARE_INTERFACE("6b15e56a-bf5c-4902-92d8-da3a650afea4") IDMLCompiledOperator : IDMLDispatchable +{ +}; + + +// =================================================================================================================== +// DML operator initializer +// =================================================================================================================== + +interface DML_DECLARE_INTERFACE("427c1113-435c-469c-8676-4d5dd072f813") IDMLOperatorInitializer : IDMLDispatchable +{ + IFACEMETHOD(Reset)( + UINT operatorCount, + _In_reads_opt_(operatorCount) IDMLCompiledOperator* const* operators + ) = 0; +}; + +// =================================================================================================================== +// DML binding table +// =================================================================================================================== + +enum DML_BINDING_TYPE +{ + DML_BINDING_TYPE_NONE, + DML_BINDING_TYPE_BUFFER, + DML_BINDING_TYPE_BUFFER_ARRAY, +}; + +struct DML_BINDING_DESC +{ + DML_BINDING_TYPE Type; + _Field_size_opt_(_Inexpressible_("Dependent on binding type")) const void* Desc; +}; + +struct DML_BUFFER_BINDING +{ + _Maybenull_ ID3D12Resource* Buffer; + UINT64 Offset; + UINT64 SizeInBytes; +}; + +struct DML_BUFFER_ARRAY_BINDING +{ + UINT BindingCount; + _Field_size_(BindingCount) const DML_BUFFER_BINDING* Bindings; +}; + +interface DML_DECLARE_INTERFACE("29c687dc-de74-4e3b-ab00-1168f2fc3cfc") IDMLBindingTable : IDMLDeviceChild +{ + IFACEMETHOD_(void, BindInputs)( + UINT bindingCount, + _In_reads_opt_(bindingCount) const DML_BINDING_DESC* bindings + ) = 0; + + IFACEMETHOD_(void, BindOutputs)( + UINT bindingCount, + _In_reads_opt_(bindingCount) const DML_BINDING_DESC* bindings + ) = 0; + + IFACEMETHOD_(void, BindTemporaryResource)( + _In_opt_ const DML_BINDING_DESC* binding + ) = 0; + + IFACEMETHOD_(void, BindPersistentResource)( + _In_opt_ const DML_BINDING_DESC* binding + ) = 0; + + IFACEMETHOD(Reset)( + _In_opt_ const DML_BINDING_TABLE_DESC* desc + ) = 0; +}; + + +// =================================================================================================================== +// DML command recorder +// =================================================================================================================== + +interface DML_DECLARE_INTERFACE("e6857a76-2e3e-4fdd-bff4-5d2ba10fb453") IDMLCommandRecorder : IDMLDeviceChild +{ + IFACEMETHOD_(void, RecordDispatch)( + ID3D12CommandList* commandList, + IDMLDispatchable* dispatchable, + IDMLBindingTable* bindings + ) = 0; +}; + + +// =================================================================================================================== +// DML debug +// =================================================================================================================== + +interface DML_DECLARE_INTERFACE("7d6f3ac9-394a-4ac3-92a7-390cc57a8217") IDMLDebugDevice : IUnknown +{ + IFACEMETHOD_(void, SetMuteDebugOutput)( + BOOL mute + ) = 0; +}; + + +// =================================================================================================================== +// DML graph +// =================================================================================================================== + +#if DML_TARGET_VERSION >= 0x2100 + +enum DML_GRAPH_EDGE_TYPE +{ + DML_GRAPH_EDGE_TYPE_INVALID, + DML_GRAPH_EDGE_TYPE_INPUT, + DML_GRAPH_EDGE_TYPE_OUTPUT, + DML_GRAPH_EDGE_TYPE_INTERMEDIATE, +}; + +struct DML_GRAPH_EDGE_DESC +{ + DML_GRAPH_EDGE_TYPE Type; + _Field_size_(_Inexpressible_("Dependent on edge type")) const void* Desc; +}; + +struct DML_INPUT_GRAPH_EDGE_DESC +{ + UINT GraphInputIndex; + UINT ToNodeIndex; + UINT ToNodeInputIndex; + _Field_z_ _Maybenull_ const char* Name; +}; + +struct DML_OUTPUT_GRAPH_EDGE_DESC +{ + UINT FromNodeIndex; + UINT FromNodeOutputIndex; + UINT GraphOutputIndex; + _Field_z_ _Maybenull_ const char* Name; +}; + +struct DML_INTERMEDIATE_GRAPH_EDGE_DESC +{ + UINT FromNodeIndex; + UINT FromNodeOutputIndex; + UINT ToNodeIndex; + UINT ToNodeInputIndex; + _Field_z_ _Maybenull_ const char* Name; +}; + +enum DML_GRAPH_NODE_TYPE +{ + DML_GRAPH_NODE_TYPE_INVALID, + DML_GRAPH_NODE_TYPE_OPERATOR, +#if DML_TARGET_VERSION >= 0x6200 + DML_GRAPH_NODE_TYPE_CONSTANT +#endif // DML_TARGET_VERSION >= 0x6200 +}; + +struct DML_GRAPH_NODE_DESC +{ + DML_GRAPH_NODE_TYPE Type; + _Field_size_(_Inexpressible_("Dependent on node type")) const void* Desc; +}; + +struct DML_OPERATOR_GRAPH_NODE_DESC +{ + IDMLOperator* Operator; + _Field_z_ _Maybenull_ const char* Name; +}; + +#if DML_TARGET_VERSION >= 0x6200 +struct DML_CONSTANT_DATA_GRAPH_NODE_DESC +{ + _Field_size_bytes_(DataSize) const void* Data; + SIZE_T DataSize; + _Field_z_ _Maybenull_ const char* Name; +}; +#endif // DML_TARGET_VERSION >= 0x6200 + +struct DML_GRAPH_DESC +{ + UINT InputCount; + UINT OutputCount; + + UINT NodeCount; + _Field_size_(NodeCount) const DML_GRAPH_NODE_DESC* Nodes; + + UINT InputEdgeCount; + _Field_size_opt_(InputEdgeCount) const DML_GRAPH_EDGE_DESC* InputEdges; + + UINT OutputEdgeCount; + _Field_size_(OutputEdgeCount) const DML_GRAPH_EDGE_DESC* OutputEdges; + + UINT IntermediateEdgeCount; + _Field_size_opt_(IntermediateEdgeCount) const DML_GRAPH_EDGE_DESC* IntermediateEdges; +}; + +interface DML_DECLARE_INTERFACE("a0884f9a-d2be-4355-aa5d-5901281ad1d2") IDMLDevice1 : IDMLDevice +{ + IFACEMETHOD(CompileGraph)( + const DML_GRAPH_DESC* desc, + DML_EXECUTION_FLAGS flags, + REFIID riid, // expected: IDMLCompiledOperator + _COM_Outptr_opt_ void** ppv + ) = 0; +}; + +#endif // DML_TARGET_VERSION >= 0x2100 + +#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) +#endif // DIRECTML_H diff --git a/thirdparty/directx_headers/include/directx/d3d12.h b/thirdparty/directx_headers/include/directx/d3d12.h index d57513b7f80..0d12a2b6acc 100644 --- a/thirdparty/directx_headers/include/directx/d3d12.h +++ b/thirdparty/directx_headers/include/directx/d3d12.h @@ -136,6 +136,13 @@ typedef interface ID3D12PipelineState ID3D12PipelineState; #endif /* __ID3D12PipelineState_FWD_DEFINED__ */ +#ifndef __ID3D12PipelineState1_FWD_DEFINED__ +#define __ID3D12PipelineState1_FWD_DEFINED__ +typedef interface ID3D12PipelineState1 ID3D12PipelineState1; + +#endif /* __ID3D12PipelineState1_FWD_DEFINED__ */ + + #ifndef __ID3D12DescriptorHeap_FWD_DEFINED__ #define __ID3D12DescriptorHeap_FWD_DEFINED__ typedef interface ID3D12DescriptorHeap ID3D12DescriptorHeap; @@ -192,6 +199,13 @@ typedef interface ID3D12CommandQueue ID3D12CommandQueue; #endif /* __ID3D12CommandQueue_FWD_DEFINED__ */ +#ifndef __ID3D12CommandQueue1_FWD_DEFINED__ +#define __ID3D12CommandQueue1_FWD_DEFINED__ +typedef interface ID3D12CommandQueue1 ID3D12CommandQueue1; + +#endif /* __ID3D12CommandQueue1_FWD_DEFINED__ */ + + #ifndef __ID3D12Device_FWD_DEFINED__ #define __ID3D12Device_FWD_DEFINED__ typedef interface ID3D12Device ID3D12Device; @@ -290,6 +304,27 @@ typedef interface ID3D12StateObjectProperties ID3D12StateObjectProperties; #endif /* __ID3D12StateObjectProperties_FWD_DEFINED__ */ +#ifndef __ID3D12StateObjectProperties1_FWD_DEFINED__ +#define __ID3D12StateObjectProperties1_FWD_DEFINED__ +typedef interface ID3D12StateObjectProperties1 ID3D12StateObjectProperties1; + +#endif /* __ID3D12StateObjectProperties1_FWD_DEFINED__ */ + + +#ifndef __ID3D12StateObjectProperties2_FWD_DEFINED__ +#define __ID3D12StateObjectProperties2_FWD_DEFINED__ +typedef interface ID3D12StateObjectProperties2 ID3D12StateObjectProperties2; + +#endif /* __ID3D12StateObjectProperties2_FWD_DEFINED__ */ + + +#ifndef __ID3D12WorkGraphProperties_FWD_DEFINED__ +#define __ID3D12WorkGraphProperties_FWD_DEFINED__ +typedef interface ID3D12WorkGraphProperties ID3D12WorkGraphProperties; + +#endif /* __ID3D12WorkGraphProperties_FWD_DEFINED__ */ + + #ifndef __ID3D12Device5_FWD_DEFINED__ #define __ID3D12Device5_FWD_DEFINED__ typedef interface ID3D12Device5 ID3D12Device5; @@ -451,6 +486,20 @@ typedef interface ID3D12Device13 ID3D12Device13; #endif /* __ID3D12Device13_FWD_DEFINED__ */ +#ifndef __ID3D12Device14_FWD_DEFINED__ +#define __ID3D12Device14_FWD_DEFINED__ +typedef interface ID3D12Device14 ID3D12Device14; + +#endif /* __ID3D12Device14_FWD_DEFINED__ */ + + +#ifndef __ID3D12StateObjectDatabase_FWD_DEFINED__ +#define __ID3D12StateObjectDatabase_FWD_DEFINED__ +typedef interface ID3D12StateObjectDatabase ID3D12StateObjectDatabase; + +#endif /* __ID3D12StateObjectDatabase_FWD_DEFINED__ */ + + #ifndef __ID3D12VirtualizationGuestDevice_FWD_DEFINED__ #define __ID3D12VirtualizationGuestDevice_FWD_DEFINED__ typedef interface ID3D12VirtualizationGuestDevice ID3D12VirtualizationGuestDevice; @@ -465,6 +514,41 @@ typedef interface ID3D12Tools ID3D12Tools; #endif /* __ID3D12Tools_FWD_DEFINED__ */ +#ifndef __ID3D12Tools1_FWD_DEFINED__ +#define __ID3D12Tools1_FWD_DEFINED__ +typedef interface ID3D12Tools1 ID3D12Tools1; + +#endif /* __ID3D12Tools1_FWD_DEFINED__ */ + + +#ifndef __ID3D12Tools2_FWD_DEFINED__ +#define __ID3D12Tools2_FWD_DEFINED__ +typedef interface ID3D12Tools2 ID3D12Tools2; + +#endif /* __ID3D12Tools2_FWD_DEFINED__ */ + + +#ifndef __ID3D12PageableTools_FWD_DEFINED__ +#define __ID3D12PageableTools_FWD_DEFINED__ +typedef interface ID3D12PageableTools ID3D12PageableTools; + +#endif /* __ID3D12PageableTools_FWD_DEFINED__ */ + + +#ifndef __ID3D12DeviceTools_FWD_DEFINED__ +#define __ID3D12DeviceTools_FWD_DEFINED__ +typedef interface ID3D12DeviceTools ID3D12DeviceTools; + +#endif /* __ID3D12DeviceTools_FWD_DEFINED__ */ + + +#ifndef __ID3D12DeviceTools1_FWD_DEFINED__ +#define __ID3D12DeviceTools1_FWD_DEFINED__ +typedef interface ID3D12DeviceTools1 ID3D12DeviceTools1; + +#endif /* __ID3D12DeviceTools1_FWD_DEFINED__ */ + + #ifndef __ID3D12SDKConfiguration_FWD_DEFINED__ #define __ID3D12SDKConfiguration_FWD_DEFINED__ typedef interface ID3D12SDKConfiguration ID3D12SDKConfiguration; @@ -493,6 +577,20 @@ typedef interface ID3D12DeviceConfiguration ID3D12DeviceConfiguration; #endif /* __ID3D12DeviceConfiguration_FWD_DEFINED__ */ +#ifndef __ID3D12DeviceConfiguration1_FWD_DEFINED__ +#define __ID3D12DeviceConfiguration1_FWD_DEFINED__ +typedef interface ID3D12DeviceConfiguration1 ID3D12DeviceConfiguration1; + +#endif /* __ID3D12DeviceConfiguration1_FWD_DEFINED__ */ + + +#ifndef __ID3D12StateObjectDatabaseFactory_FWD_DEFINED__ +#define __ID3D12StateObjectDatabaseFactory_FWD_DEFINED__ +typedef interface ID3D12StateObjectDatabaseFactory ID3D12StateObjectDatabaseFactory; + +#endif /* __ID3D12StateObjectDatabaseFactory_FWD_DEFINED__ */ + + #ifndef __ID3D12GraphicsCommandList5_FWD_DEFINED__ #define __ID3D12GraphicsCommandList5_FWD_DEFINED__ typedef interface ID3D12GraphicsCommandList5 ID3D12GraphicsCommandList5; @@ -528,6 +626,27 @@ typedef interface ID3D12GraphicsCommandList9 ID3D12GraphicsCommandList9; #endif /* __ID3D12GraphicsCommandList9_FWD_DEFINED__ */ +#ifndef __ID3D12GraphicsCommandList10_FWD_DEFINED__ +#define __ID3D12GraphicsCommandList10_FWD_DEFINED__ +typedef interface ID3D12GraphicsCommandList10 ID3D12GraphicsCommandList10; + +#endif /* __ID3D12GraphicsCommandList10_FWD_DEFINED__ */ + + +#ifndef __ID3D12DSRDeviceFactory_FWD_DEFINED__ +#define __ID3D12DSRDeviceFactory_FWD_DEFINED__ +typedef interface ID3D12DSRDeviceFactory ID3D12DSRDeviceFactory; + +#endif /* __ID3D12DSRDeviceFactory_FWD_DEFINED__ */ + + +#ifndef __ID3D12GBVDiagnostics_FWD_DEFINED__ +#define __ID3D12GBVDiagnostics_FWD_DEFINED__ +typedef interface ID3D12GBVDiagnostics ID3D12GBVDiagnostics; + +#endif /* __ID3D12GBVDiagnostics_FWD_DEFINED__ */ + + /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" @@ -1060,7 +1179,7 @@ extern "C"{ #define D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 15 ) -#define D3D12_PREVIEW_SDK_VERSION ( 712 ) +#define D3D12_PREVIEW_SDK_VERSION ( 717 ) #define D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT ( 16 ) @@ -1130,6 +1249,10 @@ extern "C"{ #define D3D12_RAYTRACING_MAX_SHADER_RECORD_STRIDE ( 4096 ) +#define D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_BYTE_ALIGNMENT ( 128 ) + +#define D3D12_RAYTRACING_OPACITY_MICROMAP_OC1_MAX_SUBDIVISION_LEVEL ( 12 ) + #define D3D12_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT ( 32 ) #define D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT ( 64 ) @@ -1193,7 +1316,7 @@ extern "C"{ #define D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT ( 2 ) -#define D3D12_SDK_VERSION ( 611 ) +#define D3D12_SDK_VERSION ( 618 ) #define D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES ( 32 ) @@ -1291,6 +1414,10 @@ extern "C"{ #define D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT ( 512 ) +#define D3D12_TIGHT_ALIGNMENT_MIN_COMMITTED_RESOURCE_ALIGNMENT ( 4096 ) + +#define D3D12_TIGHT_ALIGNMENT_MIN_PLACED_RESOURCE_ALIGNMENT ( 8 ) + #define D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES ( 65536 ) #define D3D12_TRACKED_WORKLOAD_MAX_INSTANCES ( 32 ) @@ -1355,6 +1482,10 @@ extern "C"{ #define D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP ( 25 ) +#define D3D12_WORK_GRAPHS_BACKING_MEMORY_ALIGNMENT_IN_BYTES ( 8 ) + +#define D3D12_WORK_GRAPHS_MAX_NODE_DEPTH ( 32 ) + #endif typedef UINT64 D3D12_GPU_VIRTUAL_ADDRESS; @@ -1376,10 +1507,11 @@ typedef enum D3D12_COMMAND_QUEUE_FLAGS { D3D12_COMMAND_QUEUE_FLAG_NONE = 0, - D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1 + D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1, + D3D12_COMMAND_QUEUE_FLAG_ALLOW_DYNAMIC_PRIORITY = 0x2 } D3D12_COMMAND_QUEUE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_QUEUE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_QUEUE_FLAGS ) typedef enum D3D12_COMMAND_QUEUE_PRIORITY { @@ -1475,6 +1607,19 @@ typedef struct D3D12_BOX UINT back; } D3D12_BOX; +#ifdef __midl +#ifndef LUID_DEFINED +#define LUID_DEFINED 1 +typedef struct __LUID + { + DWORD LowPart; + LONG HighPart; + } LUID; + +typedef struct __LUID *PLUID; + +#endif +#endif typedef enum D3D12_COMPARISON_FUNC { @@ -2117,6 +2262,13 @@ enum D3D12_INDEX_BUFFER_STRIP_CUT_VALUE D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2 } D3D12_INDEX_BUFFER_STRIP_CUT_VALUE; +typedef +enum D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS + { + D3D12_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff, + D3D12_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe + } D3D12_STANDARD_MULTISAMPLE_QUALITY_LEVELS; + typedef struct D3D12_CACHED_PIPELINE_STATE { _Field_size_bytes_full_(CachedBlobSizeInBytes) const void *pCachedBlob; @@ -2132,7 +2284,7 @@ enum D3D12_PIPELINE_STATE_FLAGS D3D12_PIPELINE_STATE_FLAG_DYNAMIC_INDEX_BUFFER_STRIP_CUT = 0x8 } D3D12_PIPELINE_STATE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_PIPELINE_STATE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_PIPELINE_STATE_FLAGS ) typedef struct D3D12_GRAPHICS_PIPELINE_STATE_DESC { ID3D12RootSignature *pRootSignature; @@ -2167,6 +2319,31 @@ typedef struct D3D12_COMPUTE_PIPELINE_STATE_DESC D3D12_PIPELINE_STATE_FLAGS Flags; } D3D12_COMPUTE_PIPELINE_STATE_DESC; +typedef +enum D3D_ROOT_SIGNATURE_VERSION + { + D3D_ROOT_SIGNATURE_VERSION_1 = 0x1, + D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1, + D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2, + D3D_ROOT_SIGNATURE_VERSION_1_2 = 0x3 + } D3D_ROOT_SIGNATURE_VERSION; + +typedef struct D3D12_SERIALIZED_ROOT_SIGNATURE_DESC + { + _Field_size_bytes_full_(SerializedBlobSizeInBytes) const void *pSerializedBlob; + SIZE_T SerializedBlobSizeInBytes; + } D3D12_SERIALIZED_ROOT_SIGNATURE_DESC; + +typedef struct D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE + { + D3D12_SERIALIZED_ROOT_SIGNATURE_DESC Desc; + } D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE; + +typedef struct D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE + { + D3D12_SERIALIZED_ROOT_SIGNATURE_DESC Desc; + } D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE; + struct D3D12_RT_FORMAT_ARRAY { DXGI_FORMAT RTFormats[ 8 ]; @@ -2209,7 +2386,8 @@ enum D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 = 26, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER1 = 27, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2 = 28, - D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER2 + 1 ) + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE = 29, + D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_MAX_VALID = ( D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE + 1 ) } D3D12_PIPELINE_STATE_SUBOBJECT_TYPE; typedef @@ -2257,7 +2435,12 @@ enum D3D12_FEATURE D3D12_FEATURE_D3D12_OPTIONS20 = 49, D3D12_FEATURE_PREDICATION = 50, D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO = 51, - D3D12_FEATURE_HARDWARE_COPY = 52 + D3D12_FEATURE_HARDWARE_COPY = 52, + D3D12_FEATURE_D3D12_OPTIONS21 = 53, + D3D12_FEATURE_D3D12_TIGHT_ALIGNMENT = 54, + D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE = 56, + D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED = 57, + D3D12_FEATURE_SHADER_CACHE_ABI_SUPPORT = 61 } D3D12_FEATURE; typedef @@ -2268,7 +2451,7 @@ enum D3D12_SHADER_MIN_PRECISION_SUPPORT D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2 } D3D12_SHADER_MIN_PRECISION_SUPPORT; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_MIN_PRECISION_SUPPORT ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_MIN_PRECISION_SUPPORT ) typedef enum D3D12_TILED_RESOURCES_TIER { @@ -2331,7 +2514,7 @@ enum D3D12_FORMAT_SUPPORT1 D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER = 0x40000000 } D3D12_FORMAT_SUPPORT1; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT1 ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT1 ) typedef enum D3D12_FORMAT_SUPPORT2 { @@ -2347,10 +2530,11 @@ enum D3D12_FORMAT_SUPPORT2 D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP = 0x100, D3D12_FORMAT_SUPPORT2_TILED = 0x200, D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY = 0x4000, - D3D12_FORMAT_SUPPORT2_SAMPLER_FEEDBACK = 0x8000 + D3D12_FORMAT_SUPPORT2_SAMPLER_FEEDBACK = 0x8000, + D3D12_FORMAT_SUPPORT2_DISPLAYABLE = 0x10000 } D3D12_FORMAT_SUPPORT2; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT2 ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_FORMAT_SUPPORT2 ) typedef enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS { @@ -2358,7 +2542,7 @@ enum D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE = 0x1 } D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS ) typedef enum D3D12_CROSS_NODE_SHARING_TIER { @@ -2393,6 +2577,13 @@ enum D3D12_VIEW_INSTANCING_TIER D3D12_VIEW_INSTANCING_TIER_3 = 3 } D3D12_VIEW_INSTANCING_TIER; +typedef +enum D3D12_WORK_GRAPHS_TIER + { + D3D12_WORK_GRAPHS_TIER_NOT_SUPPORTED = 0, + D3D12_WORK_GRAPHS_TIER_1_0 = 10 + } D3D12_WORK_GRAPHS_TIER; + typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS { _Out_ BOOL DoublePrecisionFloatShaderOps; @@ -2428,15 +2619,6 @@ typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS2 _Out_ D3D12_PROGRAMMABLE_SAMPLE_POSITIONS_TIER ProgrammableSamplePositionsTier; } D3D12_FEATURE_DATA_D3D12_OPTIONS2; -typedef -enum D3D_ROOT_SIGNATURE_VERSION - { - D3D_ROOT_SIGNATURE_VERSION_1 = 0x1, - D3D_ROOT_SIGNATURE_VERSION_1_0 = 0x1, - D3D_ROOT_SIGNATURE_VERSION_1_1 = 0x2, - D3D_ROOT_SIGNATURE_VERSION_1_2 = 0x3 - } D3D_ROOT_SIGNATURE_VERSION; - typedef struct D3D12_FEATURE_DATA_ROOT_SIGNATURE { _Inout_ D3D_ROOT_SIGNATURE_VERSION HighestVersion; @@ -2469,6 +2651,7 @@ typedef struct D3D12_FEATURE_DATA_FEATURE_LEVELS typedef enum D3D_SHADER_MODEL { + D3D_SHADER_MODEL_NONE = 0, D3D_SHADER_MODEL_5_1 = 0x51, D3D_SHADER_MODEL_6_0 = 0x60, D3D_SHADER_MODEL_6_1 = 0x61, @@ -2479,7 +2662,8 @@ enum D3D_SHADER_MODEL D3D_SHADER_MODEL_6_6 = 0x66, D3D_SHADER_MODEL_6_7 = 0x67, D3D_SHADER_MODEL_6_8 = 0x68, - D3D_HIGHEST_SHADER_MODEL = D3D_SHADER_MODEL_6_8 + D3D_SHADER_MODEL_6_9 = 0x69, + D3D_HIGHEST_SHADER_MODEL = D3D_SHADER_MODEL_6_9 } D3D_SHADER_MODEL; typedef struct D3D12_FEATURE_DATA_SHADER_MODEL @@ -2527,7 +2711,7 @@ enum D3D12_SHADER_CACHE_SUPPORT_FLAGS D3D12_SHADER_CACHE_SUPPORT_SHADER_SESSION_DELETE = 0x40 } D3D12_SHADER_CACHE_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_SUPPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_SUPPORT_FLAGS ) typedef struct D3D12_FEATURE_DATA_SHADER_CACHE { _Out_ D3D12_SHADER_CACHE_SUPPORT_FLAGS SupportFlags; @@ -2553,7 +2737,7 @@ enum D3D12_COMMAND_LIST_SUPPORT_FLAGS D3D12_COMMAND_LIST_SUPPORT_FLAG_VIDEO_ENCODE = ( 1 << D3D12_COMMAND_LIST_TYPE_VIDEO_ENCODE ) } D3D12_COMMAND_LIST_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_SUPPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_SUPPORT_FLAGS ) typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS3 { _Out_ BOOL CopyQueueTimestampQueriesSupported; @@ -2621,7 +2805,8 @@ enum D3D12_RAYTRACING_TIER { D3D12_RAYTRACING_TIER_NOT_SUPPORTED = 0, D3D12_RAYTRACING_TIER_1_0 = 10, - D3D12_RAYTRACING_TIER_1_1 = 11 + D3D12_RAYTRACING_TIER_1_1 = 11, + D3D12_RAYTRACING_TIER_1_2 = 12 } D3D12_RAYTRACING_TIER; typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS5 @@ -2794,6 +2979,33 @@ typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS20 D3D12_RECREATE_AT_TIER RecreateAtTier; } D3D12_FEATURE_DATA_D3D12_OPTIONS20; +typedef +enum D3D12_EXECUTE_INDIRECT_TIER + { + D3D12_EXECUTE_INDIRECT_TIER_1_0 = 10, + D3D12_EXECUTE_INDIRECT_TIER_1_1 = 11 + } D3D12_EXECUTE_INDIRECT_TIER; + +typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS21 + { + _Out_ D3D12_WORK_GRAPHS_TIER WorkGraphsTier; + _Out_ D3D12_EXECUTE_INDIRECT_TIER ExecuteIndirectTier; + _Out_ BOOL SampleCmpGradientAndBiasSupported; + _Out_ BOOL ExtendedCommandInfoSupported; + } D3D12_FEATURE_DATA_D3D12_OPTIONS21; + +typedef +enum D3D12_TIGHT_ALIGNMENT_TIER + { + D3D12_TIGHT_ALIGNMENT_TIER_NOT_SUPPORTED = 0, + D3D12_TIGHT_ALIGNMENT_TIER_1 = ( D3D12_TIGHT_ALIGNMENT_TIER_NOT_SUPPORTED + 1 ) + } D3D12_TIGHT_ALIGNMENT_TIER; + +typedef struct D3D12_FEATURE_DATA_TIGHT_ALIGNMENT + { + _Out_ D3D12_TIGHT_ALIGNMENT_TIER SupportTier; + } D3D12_FEATURE_DATA_TIGHT_ALIGNMENT; + typedef struct D3D12_FEATURE_DATA_PREDICATION { _Out_ BOOL Supported; @@ -2804,6 +3016,16 @@ typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY _Out_ BOOL Supported; } D3D12_FEATURE_DATA_HARDWARE_COPY; +typedef struct D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE + { + _Out_ BOOL Supported; + } D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE; + +typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED + { + _Out_ BOOL Supported; + } D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED; + typedef struct D3D12_RESOURCE_ALLOCATION_INFO { UINT64 SizeInBytes; @@ -2875,7 +3097,7 @@ enum D3D12_HEAP_FLAGS D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84 } D3D12_HEAP_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_HEAP_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_HEAP_FLAGS ) typedef struct D3D12_HEAP_DESC { UINT64 SizeInBytes; @@ -2923,10 +3145,11 @@ enum D3D12_RESOURCE_FLAGS D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20, D3D12_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY = 0x40, D3D12_RESOURCE_FLAG_VIDEO_ENCODE_REFERENCE_ONLY = 0x80, - D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE = 0x100 + D3D12_RESOURCE_FLAG_RAYTRACING_ACCELERATION_STRUCTURE = 0x100, + D3D12_RESOURCE_FLAG_USE_TIGHT_ALIGNMENT = 0x400 } D3D12_RESOURCE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_FLAGS ) typedef struct D3D12_MIP_REGION { UINT Width; @@ -3060,7 +3283,7 @@ enum D3D12_TILE_MAPPING_FLAGS D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1 } D3D12_TILE_MAPPING_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_MAPPING_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_MAPPING_FLAGS ) typedef enum D3D12_TILE_COPY_FLAGS { @@ -3070,7 +3293,7 @@ enum D3D12_TILE_COPY_FLAGS D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4 } D3D12_TILE_COPY_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_COPY_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_TILE_COPY_FLAGS ) typedef enum D3D12_RESOURCE_STATES { @@ -3108,7 +3331,7 @@ enum D3D12_RESOURCE_STATES D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE = 0x800000 } D3D12_RESOURCE_STATES; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_STATES ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_STATES ) typedef enum D3D12_RESOURCE_BARRIER_TYPE { @@ -3145,7 +3368,7 @@ enum D3D12_RESOURCE_BARRIER_FLAGS D3D12_RESOURCE_BARRIER_FLAG_END_ONLY = 0x2 } D3D12_RESOURCE_BARRIER_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_BARRIER_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESOURCE_BARRIER_FLAGS ) typedef struct D3D12_RESOURCE_BARRIER { D3D12_RESOURCE_BARRIER_TYPE Type; @@ -3221,7 +3444,7 @@ enum D3D12_VIEW_INSTANCING_FLAGS D3D12_VIEW_INSTANCING_FLAG_ENABLE_VIEW_INSTANCE_MASKING = 0x1 } D3D12_VIEW_INSTANCING_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIEW_INSTANCING_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIEW_INSTANCING_FLAGS ) typedef struct D3D12_VIEW_INSTANCING_DESC { UINT ViewInstanceCount; @@ -3257,7 +3480,7 @@ enum D3D12_BUFFER_SRV_FLAGS D3D12_BUFFER_SRV_FLAG_RAW = 0x1 } D3D12_BUFFER_SRV_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_SRV_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_SRV_FLAGS ) typedef struct D3D12_BUFFER_SRV { UINT64 FirstElement; @@ -3528,7 +3751,7 @@ enum D3D12_SAMPLER_FLAGS D3D12_SAMPLER_FLAG_NON_NORMALIZED_COORDINATES = 0x2 } D3D12_SAMPLER_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SAMPLER_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_SAMPLER_FLAGS ) typedef struct D3D12_SAMPLER_DESC2 { D3D12_FILTER Filter; @@ -3555,7 +3778,7 @@ enum D3D12_BUFFER_UAV_FLAGS D3D12_BUFFER_UAV_FLAG_RAW = 0x1 } D3D12_BUFFER_UAV_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_UAV_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_BUFFER_UAV_FLAGS ) typedef struct D3D12_BUFFER_UAV { UINT64 FirstElement; @@ -3764,7 +3987,7 @@ enum D3D12_DSV_FLAGS D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2 } D3D12_DSV_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DSV_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_DSV_FLAGS ) typedef enum D3D12_DSV_DIMENSION { @@ -3800,7 +4023,7 @@ enum D3D12_CLEAR_FLAGS D3D12_CLEAR_FLAG_STENCIL = 0x2 } D3D12_CLEAR_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_CLEAR_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_CLEAR_FLAGS ) typedef enum D3D12_FENCE_FLAGS { @@ -3810,7 +4033,7 @@ enum D3D12_FENCE_FLAGS D3D12_FENCE_FLAG_NON_MONITORED = 0x4 } D3D12_FENCE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_FENCE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_FENCE_FLAGS ) typedef enum D3D12_DESCRIPTOR_HEAP_TYPE { @@ -3828,7 +4051,7 @@ enum D3D12_DESCRIPTOR_HEAP_FLAGS D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1 } D3D12_DESCRIPTOR_HEAP_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_HEAP_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_HEAP_FLAGS ) typedef struct D3D12_DESCRIPTOR_HEAP_DESC { D3D12_DESCRIPTOR_HEAP_TYPE Type; @@ -3927,7 +4150,7 @@ enum D3D12_ROOT_SIGNATURE_FLAGS D3D12_ROOT_SIGNATURE_FLAG_SAMPLER_HEAP_DIRECTLY_INDEXED = 0x800 } D3D12_ROOT_SIGNATURE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_SIGNATURE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_SIGNATURE_FLAGS ) typedef enum D3D12_STATIC_BORDER_COLOR { @@ -3993,7 +4216,7 @@ enum D3D12_DESCRIPTOR_RANGE_FLAGS D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS = 0x10000 } D3D12_DESCRIPTOR_RANGE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_RANGE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_DESCRIPTOR_RANGE_FLAGS ) typedef struct D3D12_DESCRIPTOR_RANGE1 { D3D12_DESCRIPTOR_RANGE_TYPE RangeType; @@ -4019,7 +4242,7 @@ enum D3D12_ROOT_DESCRIPTOR_FLAGS D3D12_ROOT_DESCRIPTOR_FLAG_DATA_STATIC = 0x8 } D3D12_ROOT_DESCRIPTOR_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_DESCRIPTOR_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_ROOT_DESCRIPTOR_FLAGS ) typedef struct D3D12_ROOT_DESCRIPTOR1 { UINT ShaderRegister; @@ -4297,6 +4520,20 @@ HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializer( _In_ REFIID pRootSignatureDeserializerInterface, _Out_ void** ppRootSignatureDeserializer); +typedef HRESULT (WINAPI* PFN_D3D12_CREATE_VERSIONED_ROOT_SIGNATURE_DESERIALIZER_FROM_SUBOBJECT_IN_LIBRARY)( + _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData, + _In_ SIZE_T SrcDataSizeInBytes, + _In_ LPCWSTR RootSignatureSubobjectName, + _In_ REFIID pRootSignatureDeserializerInterface, + _Out_ void** ppRootSignatureDeserializer); + +HRESULT WINAPI D3D12CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary( + _In_reads_bytes_(SrcDataSizeInBytes) LPCVOID pSrcData, + _In_ SIZE_T SrcDataSizeInBytes, + _In_opt_ LPCWSTR RootSignatureSubobjectName, + _In_ REFIID pRootSignatureDeserializerInterface, + _Out_ void** ppRootSignatureDeserializer); + typedef struct D3D12_CPU_DESCRIPTOR_HANDLE { SIZE_T ptr; @@ -4455,7 +4692,8 @@ enum D3D12_INDIRECT_ARGUMENT_TYPE D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW = ( D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW + 1 ) , D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW = ( D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW + 1 ) , D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS = ( D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW + 1 ) , - D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH = ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS + 1 ) + D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH = ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_RAYS + 1 ) , + D3D12_INDIRECT_ARGUMENT_TYPE_INCREMENTING_CONSTANT = ( D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH + 1 ) } D3D12_INDIRECT_ARGUMENT_TYPE; typedef struct D3D12_INDIRECT_ARGUMENT_DESC @@ -4485,6 +4723,11 @@ typedef struct D3D12_INDIRECT_ARGUMENT_DESC { UINT RootParameterIndex; } UnorderedAccessView; + struct + { + UINT RootParameterIndex; + UINT DestOffsetIn32BitValues; + } IncrementingConstant; } ; } D3D12_INDIRECT_ARGUMENT_DESC; @@ -5577,6 +5820,149 @@ EXTERN_C const IID IID_ID3D12PipelineState; #endif /* __ID3D12PipelineState_INTERFACE_DEFINED__ */ +#ifndef __ID3D12PipelineState1_INTERFACE_DEFINED__ +#define __ID3D12PipelineState1_INTERFACE_DEFINED__ + +/* interface ID3D12PipelineState1 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12PipelineState1; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5646804c-9638-48f7-9182-b3ee5a6b60fb") + ID3D12PipelineState1 : public ID3D12PipelineState + { + public: + virtual HRESULT STDMETHODCALLTYPE GetRootSignature( + REFIID riid, + _COM_Outptr_ void **ppvRootSignature) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12PipelineState1Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12PipelineState1 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12PipelineState1 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12PipelineState1 * This); + + DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) + HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( + ID3D12PipelineState1 * This, + _In_ REFGUID guid, + _Inout_ UINT *pDataSize, + _Out_writes_bytes_opt_( *pDataSize ) void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) + HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( + ID3D12PipelineState1 * This, + _In_ REFGUID guid, + _In_ UINT DataSize, + _In_reads_bytes_opt_( DataSize ) const void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) + HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( + ID3D12PipelineState1 * This, + _In_ REFGUID guid, + _In_opt_ const IUnknown *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetName) + HRESULT ( STDMETHODCALLTYPE *SetName )( + ID3D12PipelineState1 * This, + _In_z_ LPCWSTR Name); + + DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) + HRESULT ( STDMETHODCALLTYPE *GetDevice )( + ID3D12PipelineState1 * This, + REFIID riid, + _COM_Outptr_opt_ void **ppvDevice); + + DECLSPEC_XFGVIRT(ID3D12PipelineState, GetCachedBlob) + HRESULT ( STDMETHODCALLTYPE *GetCachedBlob )( + ID3D12PipelineState1 * This, + _COM_Outptr_ ID3DBlob **ppBlob); + + DECLSPEC_XFGVIRT(ID3D12PipelineState1, GetRootSignature) + HRESULT ( STDMETHODCALLTYPE *GetRootSignature )( + ID3D12PipelineState1 * This, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature); + + END_INTERFACE + } ID3D12PipelineState1Vtbl; + + interface ID3D12PipelineState1 + { + CONST_VTBL struct ID3D12PipelineState1Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12PipelineState1_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12PipelineState1_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12PipelineState1_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12PipelineState1_GetPrivateData(This,guid,pDataSize,pData) \ + ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) + +#define ID3D12PipelineState1_SetPrivateData(This,guid,DataSize,pData) \ + ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) + +#define ID3D12PipelineState1_SetPrivateDataInterface(This,guid,pData) \ + ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) + +#define ID3D12PipelineState1_SetName(This,Name) \ + ( (This)->lpVtbl -> SetName(This,Name) ) + + +#define ID3D12PipelineState1_GetDevice(This,riid,ppvDevice) \ + ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) + + + +#define ID3D12PipelineState1_GetCachedBlob(This,ppBlob) \ + ( (This)->lpVtbl -> GetCachedBlob(This,ppBlob) ) + + +#define ID3D12PipelineState1_GetRootSignature(This,riid,ppvRootSignature) \ + ( (This)->lpVtbl -> GetRootSignature(This,riid,ppvRootSignature) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12PipelineState1_INTERFACE_DEFINED__ */ + + #ifndef __ID3D12DescriptorHeap_INTERFACE_DEFINED__ #define __ID3D12DescriptorHeap_INTERFACE_DEFINED__ @@ -7773,7 +8159,7 @@ EXTERN_C const IID IID_ID3D12GraphicsCommandList1; #endif /* __ID3D12GraphicsCommandList1_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0018 */ +/* interface __MIDL_itf_d3d12_0000_0019 */ /* [local] */ typedef struct D3D12_WRITEBUFFERIMMEDIATE_PARAMETER @@ -7792,8 +8178,8 @@ enum D3D12_WRITEBUFFERIMMEDIATE_MODE -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0018_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0018_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0019_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0019_v0_0_s_ifspec; #ifndef __ID3D12GraphicsCommandList2_INTERFACE_DEFINED__ #define __ID3D12GraphicsCommandList2_INTERFACE_DEFINED__ @@ -8814,26 +9200,335 @@ EXTERN_C const IID IID_ID3D12CommandQueue; #endif /* __ID3D12CommandQueue_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0020 */ +/* interface __MIDL_itf_d3d12_0000_0021 */ /* [local] */ -#ifdef __midl -#ifndef LUID_DEFINED -#define LUID_DEFINED 1 -typedef struct __LUID +typedef struct D3D12_FEATURE_DATA_HARDWARE_SCHEDULING_QUEUE_GROUPINGS { - DWORD LowPart; - LONG HighPart; - } LUID; + _Out_ UINT ComputeQueuesPer3DQueue; + } D3D12_FEATURE_DATA_HARDWARE_SCHEDULING_QUEUE_GROUPINGS; -typedef struct __LUID *PLUID; +typedef +enum D3D12_COMMAND_QUEUE_PROCESS_PRIORITY + { + D3D12_COMMAND_QUEUE_PROCESS_PRIORITY_NORMAL = 0, + D3D12_COMMAND_QUEUE_PROCESS_PRIORITY_HIGH = 1 + } D3D12_COMMAND_QUEUE_PROCESS_PRIORITY; +typedef +enum D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY + { + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_IDLE = 0, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_DEFAULT = 1, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_NORMAL_0 = 2, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_0 = 18, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_1 = 19, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_2 = 20, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_3 = 21, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_4 = 22, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_5 = 23, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_6 = 24, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_7 = 25, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_8 = 26, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_9 = 27, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_10 = 28, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_11 = 29, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_12 = 30, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_SOFT_REALTIME_13 = 31, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY_HARD_REALTIME = 32 + } D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0021_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0021_v0_0_s_ifspec; + +#ifndef __ID3D12CommandQueue1_INTERFACE_DEFINED__ +#define __ID3D12CommandQueue1_INTERFACE_DEFINED__ + +/* interface ID3D12CommandQueue1 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12CommandQueue1; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("3a3c3165-0ee7-4b8e-a0af-6356b4c3bbb9") + ID3D12CommandQueue1 : public ID3D12CommandQueue + { + public: + virtual HRESULT STDMETHODCALLTYPE SetProcessPriority( + D3D12_COMMAND_QUEUE_PROCESS_PRIORITY Priority) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetProcessPriority( + D3D12_COMMAND_QUEUE_PROCESS_PRIORITY *pOutValue) = 0; + + virtual HRESULT STDMETHODCALLTYPE SetGlobalPriority( + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY Priority) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetGlobalPriority( + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY *pOutValue) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12CommandQueue1Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12CommandQueue1 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12CommandQueue1 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12CommandQueue1 * This); + + DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) + HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( + ID3D12CommandQueue1 * This, + _In_ REFGUID guid, + _Inout_ UINT *pDataSize, + _Out_writes_bytes_opt_( *pDataSize ) void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) + HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( + ID3D12CommandQueue1 * This, + _In_ REFGUID guid, + _In_ UINT DataSize, + _In_reads_bytes_opt_( DataSize ) const void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) + HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( + ID3D12CommandQueue1 * This, + _In_ REFGUID guid, + _In_opt_ const IUnknown *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetName) + HRESULT ( STDMETHODCALLTYPE *SetName )( + ID3D12CommandQueue1 * This, + _In_z_ LPCWSTR Name); + + DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) + HRESULT ( STDMETHODCALLTYPE *GetDevice )( + ID3D12CommandQueue1 * This, + REFIID riid, + _COM_Outptr_opt_ void **ppvDevice); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, UpdateTileMappings) + void ( STDMETHODCALLTYPE *UpdateTileMappings )( + ID3D12CommandQueue1 * This, + _In_ ID3D12Resource *pResource, + UINT NumResourceRegions, + _In_reads_opt_(NumResourceRegions) const D3D12_TILED_RESOURCE_COORDINATE *pResourceRegionStartCoordinates, + _In_reads_opt_(NumResourceRegions) const D3D12_TILE_REGION_SIZE *pResourceRegionSizes, + _In_opt_ ID3D12Heap *pHeap, + UINT NumRanges, + _In_reads_opt_(NumRanges) const D3D12_TILE_RANGE_FLAGS *pRangeFlags, + _In_reads_opt_(NumRanges) const UINT *pHeapRangeStartOffsets, + _In_reads_opt_(NumRanges) const UINT *pRangeTileCounts, + D3D12_TILE_MAPPING_FLAGS Flags); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, CopyTileMappings) + void ( STDMETHODCALLTYPE *CopyTileMappings )( + ID3D12CommandQueue1 * This, + _In_ ID3D12Resource *pDstResource, + _In_ const D3D12_TILED_RESOURCE_COORDINATE *pDstRegionStartCoordinate, + _In_ ID3D12Resource *pSrcResource, + _In_ const D3D12_TILED_RESOURCE_COORDINATE *pSrcRegionStartCoordinate, + _In_ const D3D12_TILE_REGION_SIZE *pRegionSize, + D3D12_TILE_MAPPING_FLAGS Flags); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, ExecuteCommandLists) + void ( STDMETHODCALLTYPE *ExecuteCommandLists )( + ID3D12CommandQueue1 * This, + _In_ UINT NumCommandLists, + _In_reads_(NumCommandLists) ID3D12CommandList *const *ppCommandLists); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, SetMarker) + void ( STDMETHODCALLTYPE *SetMarker )( + ID3D12CommandQueue1 * This, + UINT Metadata, + _In_reads_bytes_opt_(Size) const void *pData, + UINT Size); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, BeginEvent) + void ( STDMETHODCALLTYPE *BeginEvent )( + ID3D12CommandQueue1 * This, + UINT Metadata, + _In_reads_bytes_opt_(Size) const void *pData, + UINT Size); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, EndEvent) + void ( STDMETHODCALLTYPE *EndEvent )( + ID3D12CommandQueue1 * This); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, Signal) + HRESULT ( STDMETHODCALLTYPE *Signal )( + ID3D12CommandQueue1 * This, + ID3D12Fence *pFence, + UINT64 Value); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, Wait) + HRESULT ( STDMETHODCALLTYPE *Wait )( + ID3D12CommandQueue1 * This, + ID3D12Fence *pFence, + UINT64 Value); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetTimestampFrequency) + HRESULT ( STDMETHODCALLTYPE *GetTimestampFrequency )( + ID3D12CommandQueue1 * This, + _Out_ UINT64 *pFrequency); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetClockCalibration) + HRESULT ( STDMETHODCALLTYPE *GetClockCalibration )( + ID3D12CommandQueue1 * This, + _Out_ UINT64 *pGpuTimestamp, + _Out_ UINT64 *pCpuTimestamp); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue, GetDesc) +#if !defined(_WIN32) + D3D12_COMMAND_QUEUE_DESC ( STDMETHODCALLTYPE *GetDesc )( + ID3D12CommandQueue1 * This); + +#else + D3D12_COMMAND_QUEUE_DESC *( STDMETHODCALLTYPE *GetDesc )( + ID3D12CommandQueue1 * This, + D3D12_COMMAND_QUEUE_DESC * RetVal); + #endif + + DECLSPEC_XFGVIRT(ID3D12CommandQueue1, SetProcessPriority) + HRESULT ( STDMETHODCALLTYPE *SetProcessPriority )( + ID3D12CommandQueue1 * This, + D3D12_COMMAND_QUEUE_PROCESS_PRIORITY Priority); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue1, GetProcessPriority) + HRESULT ( STDMETHODCALLTYPE *GetProcessPriority )( + ID3D12CommandQueue1 * This, + D3D12_COMMAND_QUEUE_PROCESS_PRIORITY *pOutValue); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue1, SetGlobalPriority) + HRESULT ( STDMETHODCALLTYPE *SetGlobalPriority )( + ID3D12CommandQueue1 * This, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY Priority); + + DECLSPEC_XFGVIRT(ID3D12CommandQueue1, GetGlobalPriority) + HRESULT ( STDMETHODCALLTYPE *GetGlobalPriority )( + ID3D12CommandQueue1 * This, + D3D12_COMMAND_QUEUE_GLOBAL_PRIORITY *pOutValue); + + END_INTERFACE + } ID3D12CommandQueue1Vtbl; + + interface ID3D12CommandQueue1 + { + CONST_VTBL struct ID3D12CommandQueue1Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12CommandQueue1_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12CommandQueue1_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12CommandQueue1_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12CommandQueue1_GetPrivateData(This,guid,pDataSize,pData) \ + ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) + +#define ID3D12CommandQueue1_SetPrivateData(This,guid,DataSize,pData) \ + ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) + +#define ID3D12CommandQueue1_SetPrivateDataInterface(This,guid,pData) \ + ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) + +#define ID3D12CommandQueue1_SetName(This,Name) \ + ( (This)->lpVtbl -> SetName(This,Name) ) + + +#define ID3D12CommandQueue1_GetDevice(This,riid,ppvDevice) \ + ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) + + + +#define ID3D12CommandQueue1_UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) \ + ( (This)->lpVtbl -> UpdateTileMappings(This,pResource,NumResourceRegions,pResourceRegionStartCoordinates,pResourceRegionSizes,pHeap,NumRanges,pRangeFlags,pHeapRangeStartOffsets,pRangeTileCounts,Flags) ) + +#define ID3D12CommandQueue1_CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags) \ + ( (This)->lpVtbl -> CopyTileMappings(This,pDstResource,pDstRegionStartCoordinate,pSrcResource,pSrcRegionStartCoordinate,pRegionSize,Flags) ) + +#define ID3D12CommandQueue1_ExecuteCommandLists(This,NumCommandLists,ppCommandLists) \ + ( (This)->lpVtbl -> ExecuteCommandLists(This,NumCommandLists,ppCommandLists) ) + +#define ID3D12CommandQueue1_SetMarker(This,Metadata,pData,Size) \ + ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) + +#define ID3D12CommandQueue1_BeginEvent(This,Metadata,pData,Size) \ + ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) + +#define ID3D12CommandQueue1_EndEvent(This) \ + ( (This)->lpVtbl -> EndEvent(This) ) + +#define ID3D12CommandQueue1_Signal(This,pFence,Value) \ + ( (This)->lpVtbl -> Signal(This,pFence,Value) ) + +#define ID3D12CommandQueue1_Wait(This,pFence,Value) \ + ( (This)->lpVtbl -> Wait(This,pFence,Value) ) + +#define ID3D12CommandQueue1_GetTimestampFrequency(This,pFrequency) \ + ( (This)->lpVtbl -> GetTimestampFrequency(This,pFrequency) ) + +#define ID3D12CommandQueue1_GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp) \ + ( (This)->lpVtbl -> GetClockCalibration(This,pGpuTimestamp,pCpuTimestamp) ) +#if !defined(_WIN32) + +#define ID3D12CommandQueue1_GetDesc(This) \ + ( (This)->lpVtbl -> GetDesc(This) ) +#else +#define ID3D12CommandQueue1_GetDesc(This,RetVal) \ + ( (This)->lpVtbl -> GetDesc(This,RetVal) ) #endif -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0020_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0020_v0_0_s_ifspec; +#define ID3D12CommandQueue1_SetProcessPriority(This,Priority) \ + ( (This)->lpVtbl -> SetProcessPriority(This,Priority) ) + +#define ID3D12CommandQueue1_GetProcessPriority(This,pOutValue) \ + ( (This)->lpVtbl -> GetProcessPriority(This,pOutValue) ) + +#define ID3D12CommandQueue1_SetGlobalPriority(This,Priority) \ + ( (This)->lpVtbl -> SetGlobalPriority(This,Priority) ) + +#define ID3D12CommandQueue1_GetGlobalPriority(This,pOutValue) \ + ( (This)->lpVtbl -> GetGlobalPriority(This,pOutValue) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12CommandQueue1_INTERFACE_DEFINED__ */ + #ifndef __ID3D12Device_INTERFACE_DEFINED__ #define __ID3D12Device_INTERFACE_DEFINED__ @@ -9972,7 +10667,7 @@ EXTERN_C const IID IID_ID3D12PipelineLibrary1; #endif /* __ID3D12PipelineLibrary1_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0023 */ +/* interface __MIDL_itf_d3d12_0000_0025 */ /* [local] */ typedef @@ -9983,7 +10678,7 @@ enum D3D12_MULTIPLE_FENCE_WAIT_FLAGS D3D12_MULTIPLE_FENCE_WAIT_FLAG_ALL = 0 } D3D12_MULTIPLE_FENCE_WAIT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTIPLE_FENCE_WAIT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_MULTIPLE_FENCE_WAIT_FLAGS ) typedef enum D3D12_RESIDENCY_PRIORITY { @@ -9996,8 +10691,8 @@ enum D3D12_RESIDENCY_PRIORITY -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0023_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0023_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0025_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0025_v0_0_s_ifspec; #ifndef __ID3D12Device1_INTERFACE_DEFINED__ #define __ID3D12Device1_INTERFACE_DEFINED__ @@ -11183,7 +11878,7 @@ EXTERN_C const IID IID_ID3D12Device2; #endif /* __ID3D12Device2_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0025 */ +/* interface __MIDL_itf_d3d12_0000_0027 */ /* [local] */ typedef @@ -11193,11 +11888,11 @@ enum D3D12_RESIDENCY_FLAGS D3D12_RESIDENCY_FLAG_DENY_OVERBUDGET = 0x1 } D3D12_RESIDENCY_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESIDENCY_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RESIDENCY_FLAGS ) -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0025_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0025_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0027_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0027_v0_0_s_ifspec; #ifndef __ID3D12Device3_INTERFACE_DEFINED__ #define __ID3D12Device3_INTERFACE_DEFINED__ @@ -11835,7 +12530,7 @@ EXTERN_C const IID IID_ID3D12Device3; #endif /* __ID3D12Device3_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0026 */ +/* interface __MIDL_itf_d3d12_0000_0028 */ /* [local] */ typedef @@ -11844,21 +12539,21 @@ enum D3D12_COMMAND_LIST_FLAGS D3D12_COMMAND_LIST_FLAG_NONE = 0 } D3D12_COMMAND_LIST_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_LIST_FLAGS ) typedef enum D3D12_COMMAND_POOL_FLAGS { D3D12_COMMAND_POOL_FLAG_NONE = 0 } D3D12_COMMAND_POOL_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_POOL_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_POOL_FLAGS ) typedef enum D3D12_COMMAND_RECORDER_FLAGS { D3D12_COMMAND_RECORDER_FLAG_NONE = 0 } D3D12_COMMAND_RECORDER_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_RECORDER_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMMAND_RECORDER_FLAGS ) typedef enum D3D12_PROTECTED_SESSION_STATUS { @@ -11868,8 +12563,8 @@ enum D3D12_PROTECTED_SESSION_STATUS -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0026_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0026_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0028_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0028_v0_0_s_ifspec; #ifndef __ID3D12ProtectedSession_INTERFACE_DEFINED__ #define __ID3D12ProtectedSession_INTERFACE_DEFINED__ @@ -12013,7 +12708,7 @@ EXTERN_C const IID IID_ID3D12ProtectedSession; #endif /* __ID3D12ProtectedSession_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0027 */ +/* interface __MIDL_itf_d3d12_0000_0029 */ /* [local] */ typedef @@ -12023,7 +12718,7 @@ enum D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAG_SUPPORTED = 0x1 } D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS ) typedef struct D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT { UINT NodeIndex; @@ -12036,7 +12731,7 @@ enum D3D12_PROTECTED_RESOURCE_SESSION_FLAGS D3D12_PROTECTED_RESOURCE_SESSION_FLAG_NONE = 0 } D3D12_PROTECTED_RESOURCE_SESSION_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_PROTECTED_RESOURCE_SESSION_FLAGS ) typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC { UINT NodeMask; @@ -12045,8 +12740,8 @@ typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0027_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0027_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0029_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0029_v0_0_s_ifspec; #ifndef __ID3D12ProtectedResourceSession_INTERFACE_DEFINED__ #define __ID3D12ProtectedResourceSession_INTERFACE_DEFINED__ @@ -12972,7 +13667,7 @@ EXTERN_C const IID IID_ID3D12Device4; #endif /* __ID3D12Device4_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0029 */ +/* interface __MIDL_itf_d3d12_0000_0031 */ /* [local] */ typedef @@ -12985,8 +13680,8 @@ enum D3D12_LIFETIME_STATE -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0029_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0029_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0031_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0031_v0_0_s_ifspec; #ifndef __ID3D12LifetimeOwner_INTERFACE_DEFINED__ #define __ID3D12LifetimeOwner_INTERFACE_DEFINED__ @@ -13340,7 +14035,7 @@ EXTERN_C const IID IID_ID3D12LifetimeTracker; #endif /* __ID3D12LifetimeTracker_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0032 */ +/* interface __MIDL_itf_d3d12_0000_0034 */ /* [local] */ typedef @@ -13360,7 +14055,7 @@ enum D3D12_META_COMMAND_PARAMETER_FLAGS D3D12_META_COMMAND_PARAMETER_FLAG_OUTPUT = 0x2 } D3D12_META_COMMAND_PARAMETER_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_META_COMMAND_PARAMETER_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_META_COMMAND_PARAMETER_FLAGS ) typedef enum D3D12_META_COMMAND_PARAMETER_STAGE { @@ -13401,7 +14096,7 @@ enum D3D12_GRAPHICS_STATES D3D12_GRAPHICS_STATE_VIEW_INSTANCE_MASK = ( 1 << 16 ) } D3D12_GRAPHICS_STATES; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_GRAPHICS_STATES ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_GRAPHICS_STATES ) typedef struct D3D12_META_COMMAND_DESC { GUID Id; @@ -13412,8 +14107,8 @@ typedef struct D3D12_META_COMMAND_DESC -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0032_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0032_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0034_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0034_v0_0_s_ifspec; #ifndef __ID3D12StateObject_INTERFACE_DEFINED__ #define __ID3D12StateObject_INTERFACE_DEFINED__ @@ -13650,7 +14345,606 @@ EXTERN_C const IID IID_ID3D12StateObjectProperties; #endif /* __ID3D12StateObjectProperties_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0034 */ +/* interface __MIDL_itf_d3d12_0000_0036 */ +/* [local] */ + +typedef struct D3D12_PROGRAM_IDENTIFIER + { + UINT64 OpaqueData[ 4 ]; + } D3D12_PROGRAM_IDENTIFIER; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0036_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0036_v0_0_s_ifspec; + +#ifndef __ID3D12StateObjectProperties1_INTERFACE_DEFINED__ +#define __ID3D12StateObjectProperties1_INTERFACE_DEFINED__ + +/* interface ID3D12StateObjectProperties1 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12StateObjectProperties1; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("460caac7-1d24-446a-a184-ca67db494138") + ID3D12StateObjectProperties1 : public ID3D12StateObjectProperties + { + public: +#if defined(_MSC_VER) || !defined(_WIN32) + virtual D3D12_PROGRAM_IDENTIFIER STDMETHODCALLTYPE GetProgramIdentifier( + LPCWSTR pProgramName) = 0; +#else + virtual D3D12_PROGRAM_IDENTIFIER *STDMETHODCALLTYPE GetProgramIdentifier( + D3D12_PROGRAM_IDENTIFIER * RetVal, + LPCWSTR pProgramName) = 0; +#endif + + }; + + +#else /* C style interface */ + + typedef struct ID3D12StateObjectProperties1Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12StateObjectProperties1 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12StateObjectProperties1 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12StateObjectProperties1 * This); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderIdentifier) + void *( STDMETHODCALLTYPE *GetShaderIdentifier )( + ID3D12StateObjectProperties1 * This, + _In_ LPCWSTR pExportName); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderStackSize) + UINT64 ( STDMETHODCALLTYPE *GetShaderStackSize )( + ID3D12StateObjectProperties1 * This, + _In_ LPCWSTR pExportName); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetPipelineStackSize) + UINT64 ( STDMETHODCALLTYPE *GetPipelineStackSize )( + ID3D12StateObjectProperties1 * This); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, SetPipelineStackSize) + void ( STDMETHODCALLTYPE *SetPipelineStackSize )( + ID3D12StateObjectProperties1 * This, + UINT64 PipelineStackSizeInBytes); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties1, GetProgramIdentifier) +#if !defined(_WIN32) + D3D12_PROGRAM_IDENTIFIER ( STDMETHODCALLTYPE *GetProgramIdentifier )( + ID3D12StateObjectProperties1 * This, + LPCWSTR pProgramName); + +#else + D3D12_PROGRAM_IDENTIFIER *( STDMETHODCALLTYPE *GetProgramIdentifier )( + ID3D12StateObjectProperties1 * This, + D3D12_PROGRAM_IDENTIFIER * RetVal, + LPCWSTR pProgramName); + +#endif + + END_INTERFACE + } ID3D12StateObjectProperties1Vtbl; + + interface ID3D12StateObjectProperties1 + { + CONST_VTBL struct ID3D12StateObjectProperties1Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12StateObjectProperties1_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12StateObjectProperties1_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12StateObjectProperties1_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12StateObjectProperties1_GetShaderIdentifier(This,pExportName) \ + ( (This)->lpVtbl -> GetShaderIdentifier(This,pExportName) ) + +#define ID3D12StateObjectProperties1_GetShaderStackSize(This,pExportName) \ + ( (This)->lpVtbl -> GetShaderStackSize(This,pExportName) ) + +#define ID3D12StateObjectProperties1_GetPipelineStackSize(This) \ + ( (This)->lpVtbl -> GetPipelineStackSize(This) ) + +#define ID3D12StateObjectProperties1_SetPipelineStackSize(This,PipelineStackSizeInBytes) \ + ( (This)->lpVtbl -> SetPipelineStackSize(This,PipelineStackSizeInBytes) ) + +#if !defined(_WIN32) + +#define ID3D12StateObjectProperties1_GetProgramIdentifier(This,pProgramName) \ + ( (This)->lpVtbl -> GetProgramIdentifier(This,pProgramName) ) +#else +#define ID3D12StateObjectProperties1_GetProgramIdentifier(This,RetVal,pProgramName) \ + ( (This)->lpVtbl -> GetProgramIdentifier(This,RetVal,pProgramName) ) +#endif + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12StateObjectProperties1_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12StateObjectProperties2_INTERFACE_DEFINED__ +#define __ID3D12StateObjectProperties2_INTERFACE_DEFINED__ + +/* interface ID3D12StateObjectProperties2 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12StateObjectProperties2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("d5e82917-f0f1-44cf-ae5e-ce222dd0b884") + ID3D12StateObjectProperties2 : public ID3D12StateObjectProperties1 + { + public: + virtual HRESULT STDMETHODCALLTYPE GetGlobalRootSignatureForProgram( + LPCWSTR pProgramName, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetGlobalRootSignatureForShader( + LPCWSTR pExportName, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12StateObjectProperties2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12StateObjectProperties2 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12StateObjectProperties2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12StateObjectProperties2 * This); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderIdentifier) + void *( STDMETHODCALLTYPE *GetShaderIdentifier )( + ID3D12StateObjectProperties2 * This, + _In_ LPCWSTR pExportName); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetShaderStackSize) + UINT64 ( STDMETHODCALLTYPE *GetShaderStackSize )( + ID3D12StateObjectProperties2 * This, + _In_ LPCWSTR pExportName); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, GetPipelineStackSize) + UINT64 ( STDMETHODCALLTYPE *GetPipelineStackSize )( + ID3D12StateObjectProperties2 * This); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties, SetPipelineStackSize) + void ( STDMETHODCALLTYPE *SetPipelineStackSize )( + ID3D12StateObjectProperties2 * This, + UINT64 PipelineStackSizeInBytes); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties1, GetProgramIdentifier) +#if !defined(_WIN32) + D3D12_PROGRAM_IDENTIFIER ( STDMETHODCALLTYPE *GetProgramIdentifier )( + ID3D12StateObjectProperties2 * This, + LPCWSTR pProgramName); + +#else + D3D12_PROGRAM_IDENTIFIER *( STDMETHODCALLTYPE *GetProgramIdentifier )( + ID3D12StateObjectProperties2 * This, + D3D12_PROGRAM_IDENTIFIER * RetVal, + LPCWSTR pProgramName); + +#endif + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties2, GetGlobalRootSignatureForProgram) + HRESULT ( STDMETHODCALLTYPE *GetGlobalRootSignatureForProgram )( + ID3D12StateObjectProperties2 * This, + LPCWSTR pProgramName, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature); + + DECLSPEC_XFGVIRT(ID3D12StateObjectProperties2, GetGlobalRootSignatureForShader) + HRESULT ( STDMETHODCALLTYPE *GetGlobalRootSignatureForShader )( + ID3D12StateObjectProperties2 * This, + LPCWSTR pExportName, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature); + + END_INTERFACE + } ID3D12StateObjectProperties2Vtbl; + + interface ID3D12StateObjectProperties2 + { + CONST_VTBL struct ID3D12StateObjectProperties2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12StateObjectProperties2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12StateObjectProperties2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12StateObjectProperties2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12StateObjectProperties2_GetShaderIdentifier(This,pExportName) \ + ( (This)->lpVtbl -> GetShaderIdentifier(This,pExportName) ) + +#define ID3D12StateObjectProperties2_GetShaderStackSize(This,pExportName) \ + ( (This)->lpVtbl -> GetShaderStackSize(This,pExportName) ) + +#define ID3D12StateObjectProperties2_GetPipelineStackSize(This) \ + ( (This)->lpVtbl -> GetPipelineStackSize(This) ) + +#define ID3D12StateObjectProperties2_SetPipelineStackSize(This,PipelineStackSizeInBytes) \ + ( (This)->lpVtbl -> SetPipelineStackSize(This,PipelineStackSizeInBytes) ) + +#if !defined(_WIN32) + +#define ID3D12StateObjectProperties2_GetProgramIdentifier(This,pProgramName) \ + ( (This)->lpVtbl -> GetProgramIdentifier(This,pProgramName) ) +#else +#define ID3D12StateObjectProperties2_GetProgramIdentifier(This,RetVal,pProgramName) \ + ( (This)->lpVtbl -> GetProgramIdentifier(This,RetVal,pProgramName) ) +#endif + + +#define ID3D12StateObjectProperties2_GetGlobalRootSignatureForProgram(This,pProgramName,riid,ppvRootSignature) \ + ( (This)->lpVtbl -> GetGlobalRootSignatureForProgram(This,pProgramName,riid,ppvRootSignature) ) + +#define ID3D12StateObjectProperties2_GetGlobalRootSignatureForShader(This,pExportName,riid,ppvRootSignature) \ + ( (This)->lpVtbl -> GetGlobalRootSignatureForShader(This,pExportName,riid,ppvRootSignature) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12StateObjectProperties2_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0038 */ +/* [local] */ + +typedef struct D3D12_NODE_ID + { + LPCWSTR Name; + UINT ArrayIndex; + } D3D12_NODE_ID; + +typedef struct D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS + { + UINT64 MinSizeInBytes; + UINT64 MaxSizeInBytes; + UINT SizeGranularityInBytes; + } D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0038_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0038_v0_0_s_ifspec; + +#ifndef __ID3D12WorkGraphProperties_INTERFACE_DEFINED__ +#define __ID3D12WorkGraphProperties_INTERFACE_DEFINED__ + +/* interface ID3D12WorkGraphProperties */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12WorkGraphProperties; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("065acf71-f863-4b89-82f4-02e4d5886757") + ID3D12WorkGraphProperties : public IUnknown + { + public: + virtual UINT STDMETHODCALLTYPE GetNumWorkGraphs( void) = 0; + + virtual LPCWSTR STDMETHODCALLTYPE GetProgramName( + UINT WorkGraphIndex) = 0; + + virtual UINT STDMETHODCALLTYPE GetWorkGraphIndex( + LPCWSTR pProgramName) = 0; + + virtual UINT STDMETHODCALLTYPE GetNumNodes( + UINT WorkGraphIndex) = 0; + +#if defined(_MSC_VER) || !defined(_WIN32) + virtual D3D12_NODE_ID STDMETHODCALLTYPE GetNodeID( + UINT WorkGraphIndex, + UINT NodeIndex) = 0; +#else + virtual D3D12_NODE_ID *STDMETHODCALLTYPE GetNodeID( + D3D12_NODE_ID * RetVal, + UINT WorkGraphIndex, + UINT NodeIndex) = 0; +#endif + + virtual UINT STDMETHODCALLTYPE GetNodeIndex( + UINT WorkGraphIndex, + D3D12_NODE_ID NodeID) = 0; + + virtual UINT STDMETHODCALLTYPE GetNodeLocalRootArgumentsTableIndex( + UINT WorkGraphIndex, + UINT NodeIndex) = 0; + + virtual UINT STDMETHODCALLTYPE GetNumEntrypoints( + UINT WorkGraphIndex) = 0; + +#if defined(_MSC_VER) || !defined(_WIN32) + virtual D3D12_NODE_ID STDMETHODCALLTYPE GetEntrypointID( + UINT WorkGraphIndex, + UINT EntrypointIndex) = 0; +#else + virtual D3D12_NODE_ID *STDMETHODCALLTYPE GetEntrypointID( + D3D12_NODE_ID * RetVal, + UINT WorkGraphIndex, + UINT EntrypointIndex) = 0; +#endif + + virtual UINT STDMETHODCALLTYPE GetEntrypointIndex( + UINT WorkGraphIndex, + D3D12_NODE_ID NodeID) = 0; + + virtual UINT STDMETHODCALLTYPE GetEntrypointRecordSizeInBytes( + UINT WorkGraphIndex, + UINT EntrypointIndex) = 0; + + virtual void STDMETHODCALLTYPE GetWorkGraphMemoryRequirements( + UINT WorkGraphIndex, + _Out_ D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS *pWorkGraphMemoryRequirements) = 0; + + virtual UINT STDMETHODCALLTYPE GetEntrypointRecordAlignmentInBytes( + UINT WorkGraphIndex, + UINT EntrypointIndex) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12WorkGraphPropertiesVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12WorkGraphProperties * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12WorkGraphProperties * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12WorkGraphProperties * This); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumWorkGraphs) + UINT ( STDMETHODCALLTYPE *GetNumWorkGraphs )( + ID3D12WorkGraphProperties * This); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetProgramName) + LPCWSTR ( STDMETHODCALLTYPE *GetProgramName )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetWorkGraphIndex) + UINT ( STDMETHODCALLTYPE *GetWorkGraphIndex )( + ID3D12WorkGraphProperties * This, + LPCWSTR pProgramName); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumNodes) + UINT ( STDMETHODCALLTYPE *GetNumNodes )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeID) +#if !defined(_WIN32) + D3D12_NODE_ID ( STDMETHODCALLTYPE *GetNodeID )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex, + UINT NodeIndex); + +#else + D3D12_NODE_ID *( STDMETHODCALLTYPE *GetNodeID )( + ID3D12WorkGraphProperties * This, + D3D12_NODE_ID * RetVal, + UINT WorkGraphIndex, + UINT NodeIndex); + +#endif + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeIndex) + UINT ( STDMETHODCALLTYPE *GetNodeIndex )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex, + D3D12_NODE_ID NodeID); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNodeLocalRootArgumentsTableIndex) + UINT ( STDMETHODCALLTYPE *GetNodeLocalRootArgumentsTableIndex )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex, + UINT NodeIndex); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetNumEntrypoints) + UINT ( STDMETHODCALLTYPE *GetNumEntrypoints )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointID) +#if !defined(_WIN32) + D3D12_NODE_ID ( STDMETHODCALLTYPE *GetEntrypointID )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex, + UINT EntrypointIndex); + +#else + D3D12_NODE_ID *( STDMETHODCALLTYPE *GetEntrypointID )( + ID3D12WorkGraphProperties * This, + D3D12_NODE_ID * RetVal, + UINT WorkGraphIndex, + UINT EntrypointIndex); + +#endif + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointIndex) + UINT ( STDMETHODCALLTYPE *GetEntrypointIndex )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex, + D3D12_NODE_ID NodeID); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointRecordSizeInBytes) + UINT ( STDMETHODCALLTYPE *GetEntrypointRecordSizeInBytes )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex, + UINT EntrypointIndex); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetWorkGraphMemoryRequirements) + void ( STDMETHODCALLTYPE *GetWorkGraphMemoryRequirements )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex, + _Out_ D3D12_WORK_GRAPH_MEMORY_REQUIREMENTS *pWorkGraphMemoryRequirements); + + DECLSPEC_XFGVIRT(ID3D12WorkGraphProperties, GetEntrypointRecordAlignmentInBytes) + UINT ( STDMETHODCALLTYPE *GetEntrypointRecordAlignmentInBytes )( + ID3D12WorkGraphProperties * This, + UINT WorkGraphIndex, + UINT EntrypointIndex); + + END_INTERFACE + } ID3D12WorkGraphPropertiesVtbl; + + interface ID3D12WorkGraphProperties + { + CONST_VTBL struct ID3D12WorkGraphPropertiesVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12WorkGraphProperties_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12WorkGraphProperties_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12WorkGraphProperties_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12WorkGraphProperties_GetNumWorkGraphs(This) \ + ( (This)->lpVtbl -> GetNumWorkGraphs(This) ) + +#define ID3D12WorkGraphProperties_GetProgramName(This,WorkGraphIndex) \ + ( (This)->lpVtbl -> GetProgramName(This,WorkGraphIndex) ) + +#define ID3D12WorkGraphProperties_GetWorkGraphIndex(This,pProgramName) \ + ( (This)->lpVtbl -> GetWorkGraphIndex(This,pProgramName) ) + +#define ID3D12WorkGraphProperties_GetNumNodes(This,WorkGraphIndex) \ + ( (This)->lpVtbl -> GetNumNodes(This,WorkGraphIndex) ) +#if !defined(_WIN32) + +#define ID3D12WorkGraphProperties_GetNodeID(This,WorkGraphIndex,NodeIndex) \ + ( (This)->lpVtbl -> GetNodeID(This,WorkGraphIndex,NodeIndex) ) +#else +#define ID3D12WorkGraphProperties_GetNodeID(This,RetVal,WorkGraphIndex,NodeIndex) \ + ( (This)->lpVtbl -> GetNodeID(This,RetVal,WorkGraphIndex,NodeIndex) ) +#endif + +#define ID3D12WorkGraphProperties_GetNodeIndex(This,WorkGraphIndex,NodeID) \ + ( (This)->lpVtbl -> GetNodeIndex(This,WorkGraphIndex,NodeID) ) + +#define ID3D12WorkGraphProperties_GetNodeLocalRootArgumentsTableIndex(This,WorkGraphIndex,NodeIndex) \ + ( (This)->lpVtbl -> GetNodeLocalRootArgumentsTableIndex(This,WorkGraphIndex,NodeIndex) ) + +#define ID3D12WorkGraphProperties_GetNumEntrypoints(This,WorkGraphIndex) \ + ( (This)->lpVtbl -> GetNumEntrypoints(This,WorkGraphIndex) ) +#if !defined(_WIN32) + +#define ID3D12WorkGraphProperties_GetEntrypointID(This,WorkGraphIndex,EntrypointIndex) \ + ( (This)->lpVtbl -> GetEntrypointID(This,WorkGraphIndex,EntrypointIndex) ) +#else +#define ID3D12WorkGraphProperties_GetEntrypointID(This,RetVal,WorkGraphIndex,EntrypointIndex) \ + ( (This)->lpVtbl -> GetEntrypointID(This,RetVal,WorkGraphIndex,EntrypointIndex) ) +#endif + +#define ID3D12WorkGraphProperties_GetEntrypointIndex(This,WorkGraphIndex,NodeID) \ + ( (This)->lpVtbl -> GetEntrypointIndex(This,WorkGraphIndex,NodeID) ) + +#define ID3D12WorkGraphProperties_GetEntrypointRecordSizeInBytes(This,WorkGraphIndex,EntrypointIndex) \ + ( (This)->lpVtbl -> GetEntrypointRecordSizeInBytes(This,WorkGraphIndex,EntrypointIndex) ) + +#define ID3D12WorkGraphProperties_GetWorkGraphMemoryRequirements(This,WorkGraphIndex,pWorkGraphMemoryRequirements) \ + ( (This)->lpVtbl -> GetWorkGraphMemoryRequirements(This,WorkGraphIndex,pWorkGraphMemoryRequirements) ) + +#define ID3D12WorkGraphProperties_GetEntrypointRecordAlignmentInBytes(This,WorkGraphIndex,EntrypointIndex) \ + ( (This)->lpVtbl -> GetEntrypointRecordAlignmentInBytes(This,WorkGraphIndex,EntrypointIndex) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12WorkGraphProperties_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0039 */ /* [local] */ typedef @@ -13668,7 +14962,28 @@ enum D3D12_STATE_SUBOBJECT_TYPE D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG = 10, D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP = 11, D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1 = 12, - D3D12_STATE_SUBOBJECT_TYPE_MAX_VALID = ( D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1 + 1 ) + D3D12_STATE_SUBOBJECT_TYPE_WORK_GRAPH = 13, + D3D12_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT = 14, + D3D12_STATE_SUBOBJECT_TYPE_BLEND = 15, + D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK = 16, + D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER = 17, + D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL = 18, + D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT = 19, + D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE = 20, + D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY = 21, + D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS = 22, + D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT = 23, + D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC = 24, + D3D12_STATE_SUBOBJECT_TYPE_FLAGS = 26, + D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1 = 27, + D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING = 28, + D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM = 29, + D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2 = 30, + D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_SERIALIZED_ROOT_SIGNATURE = 31, + D3D12_STATE_SUBOBJECT_TYPE_LOCAL_SERIALIZED_ROOT_SIGNATURE = 32, + D3D12_STATE_SUBOBJECT_TYPE_COMPILER_EXISITING_COLLECTION = 33, + D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION_BY_KEY = 36, + D3D12_STATE_SUBOBJECT_TYPE_MAX_VALID = ( D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION_BY_KEY + 1 ) } D3D12_STATE_SUBOBJECT_TYPE; typedef struct D3D12_STATE_SUBOBJECT @@ -13686,7 +15001,7 @@ enum D3D12_STATE_OBJECT_FLAGS D3D12_STATE_OBJECT_FLAG_ALLOW_STATE_OBJECT_ADDITIONS = 0x4 } D3D12_STATE_OBJECT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_STATE_OBJECT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_STATE_OBJECT_FLAGS ) typedef struct D3D12_STATE_OBJECT_CONFIG { D3D12_STATE_OBJECT_FLAGS Flags; @@ -13707,13 +15022,33 @@ typedef struct D3D12_NODE_MASK UINT NodeMask; } D3D12_NODE_MASK; +typedef struct D3D12_SAMPLE_MASK + { + UINT SampleMask; + } D3D12_SAMPLE_MASK; + +typedef struct D3D12_IB_STRIP_CUT_VALUE + { + D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IndexBufferStripCutValue; + } D3D12_IB_STRIP_CUT_VALUE; + +typedef struct D3D12_PRIMITIVE_TOPOLOGY_DESC + { + D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopology; + } D3D12_PRIMITIVE_TOPOLOGY_DESC; + +typedef struct D3D12_DEPTH_STENCIL_FORMAT + { + DXGI_FORMAT DepthStencilFormat; + } D3D12_DEPTH_STENCIL_FORMAT; + typedef enum D3D12_EXPORT_FLAGS { D3D12_EXPORT_FLAG_NONE = 0 } D3D12_EXPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_EXPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_EXPORT_FLAGS ) typedef struct D3D12_EXPORT_DESC { LPCWSTR Name; @@ -13781,21 +15116,139 @@ enum D3D12_RAYTRACING_PIPELINE_FLAGS { D3D12_RAYTRACING_PIPELINE_FLAG_NONE = 0, D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES = 0x100, - D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200 + D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200, + D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS = 0x400 } D3D12_RAYTRACING_PIPELINE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS ) typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG1 { UINT MaxTraceRecursionDepth; D3D12_RAYTRACING_PIPELINE_FLAGS Flags; } D3D12_RAYTRACING_PIPELINE_CONFIG1; +typedef struct D3D12_NODE_OUTPUT_OVERRIDES + { + UINT OutputIndex; + _In_opt_ const D3D12_NODE_ID *pNewName; + _In_opt_ const BOOL *pAllowSparseNodes; + _In_opt_ const UINT *pMaxRecords; + _In_opt_ const UINT *pMaxRecordsSharedWithOutputIndex; + } D3D12_NODE_OUTPUT_OVERRIDES; + +typedef struct D3D12_BROADCASTING_LAUNCH_OVERRIDES + { + _In_opt_ const UINT *pLocalRootArgumentsTableIndex; + _In_opt_ const BOOL *pProgramEntry; + _In_opt_ const D3D12_NODE_ID *pNewName; + _In_opt_ const D3D12_NODE_ID *pShareInputOf; + _In_reads_opt_(3) const UINT *pDispatchGrid; + _In_reads_opt_(3) const UINT *pMaxDispatchGrid; + UINT NumOutputOverrides; + _In_reads_opt_(NumOutputOverrides) const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides; + } D3D12_BROADCASTING_LAUNCH_OVERRIDES; + +typedef struct D3D12_COALESCING_LAUNCH_OVERRIDES + { + _In_opt_ const UINT *pLocalRootArgumentsTableIndex; + _In_opt_ const BOOL *pProgramEntry; + _In_opt_ const D3D12_NODE_ID *pNewName; + _In_opt_ const D3D12_NODE_ID *pShareInputOf; + UINT NumOutputOverrides; + _In_reads_opt_(NumOutputOverrides) const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides; + } D3D12_COALESCING_LAUNCH_OVERRIDES; + +typedef struct D3D12_THREAD_LAUNCH_OVERRIDES + { + _In_opt_ const UINT *pLocalRootArgumentsTableIndex; + _In_opt_ const BOOL *pProgramEntry; + _In_opt_ const D3D12_NODE_ID *pNewName; + _In_opt_ const D3D12_NODE_ID *pShareInputOf; + UINT NumOutputOverrides; + _In_reads_opt_(NumOutputOverrides) const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides; + } D3D12_THREAD_LAUNCH_OVERRIDES; + +typedef struct D3D12_COMMON_COMPUTE_NODE_OVERRIDES + { + _In_opt_ const UINT *pLocalRootArgumentsTableIndex; + _In_opt_ const BOOL *pProgramEntry; + _In_opt_ const D3D12_NODE_ID *pNewName; + _In_opt_ const D3D12_NODE_ID *pShareInputOf; + UINT NumOutputOverrides; + _In_reads_opt_(NumOutputOverrides) const D3D12_NODE_OUTPUT_OVERRIDES *pOutputOverrides; + } D3D12_COMMON_COMPUTE_NODE_OVERRIDES; + +typedef +enum D3D12_NODE_OVERRIDES_TYPE + { + D3D12_NODE_OVERRIDES_TYPE_NONE = 0, + D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH = 1, + D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH = 2, + D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH = 3, + D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE = 4 + } D3D12_NODE_OVERRIDES_TYPE; + +typedef struct D3D12_SHADER_NODE + { + LPCWSTR Shader; + D3D12_NODE_OVERRIDES_TYPE OverridesType; + union + { + const D3D12_BROADCASTING_LAUNCH_OVERRIDES *pBroadcastingLaunchOverrides; + const D3D12_COALESCING_LAUNCH_OVERRIDES *pCoalescingLaunchOverrides; + const D3D12_THREAD_LAUNCH_OVERRIDES *pThreadLaunchOverrides; + const D3D12_COMMON_COMPUTE_NODE_OVERRIDES *pCommonComputeNodeOverrides; + } ; + } D3D12_SHADER_NODE; + +typedef +enum D3D12_NODE_TYPE + { + D3D12_NODE_TYPE_SHADER = 0 + } D3D12_NODE_TYPE; + +typedef struct D3D12_NODE + { + D3D12_NODE_TYPE NodeType; + union + { + D3D12_SHADER_NODE Shader; + } ; + } D3D12_NODE; + +typedef +enum D3D12_WORK_GRAPH_FLAGS + { + D3D12_WORK_GRAPH_FLAG_NONE = 0, + D3D12_WORK_GRAPH_FLAG_INCLUDE_ALL_AVAILABLE_NODES = 0x1 + } D3D12_WORK_GRAPH_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D12_WORK_GRAPH_FLAGS ) +typedef struct D3D12_WORK_GRAPH_DESC + { + LPCWSTR ProgramName; + D3D12_WORK_GRAPH_FLAGS Flags; + UINT NumEntrypoints; + _In_reads_opt_(NumEntrypoints) const D3D12_NODE_ID *pEntrypoints; + UINT NumExplicitlyDefinedNodes; + _In_reads_opt_(NumExplicitlyDefinedNodes) const D3D12_NODE *pExplicitlyDefinedNodes; + } D3D12_WORK_GRAPH_DESC; + +typedef struct D3D12_GENERIC_PROGRAM_DESC + { + LPCWSTR ProgramName; + UINT NumExports; + _In_reads_(NumExports) LPCWSTR *pExports; + UINT NumSubobjects; + _In_reads_opt_(NumSubobjects) const D3D12_STATE_SUBOBJECT *const *ppSubobjects; + } D3D12_GENERIC_PROGRAM_DESC; + typedef enum D3D12_STATE_OBJECT_TYPE { D3D12_STATE_OBJECT_TYPE_COLLECTION = 0, - D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE = 3 + D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE = 3, + D3D12_STATE_OBJECT_TYPE_EXECUTABLE = 4 } D3D12_STATE_OBJECT_TYPE; typedef struct D3D12_STATE_OBJECT_DESC @@ -13813,12 +15266,13 @@ enum D3D12_RAYTRACING_GEOMETRY_FLAGS D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION = 0x2 } D3D12_RAYTRACING_GEOMETRY_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_GEOMETRY_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_GEOMETRY_FLAGS ) typedef enum D3D12_RAYTRACING_GEOMETRY_TYPE { D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES = 0, - D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS = ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) + D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS = ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) , + D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES = ( D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS + 1 ) } D3D12_RAYTRACING_GEOMETRY_TYPE; typedef @@ -13828,10 +15282,12 @@ enum D3D12_RAYTRACING_INSTANCE_FLAGS D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE = 0x1, D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2, D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE = 0x4, - D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8 + D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8, + D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE = 0x10, + D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS = 0x20 } D3D12_RAYTRACING_INSTANCE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS ) typedef struct D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE { D3D12_GPU_VIRTUAL_ADDRESS StartAddress; @@ -13878,6 +15334,51 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs; } D3D12_RAYTRACING_GEOMETRY_AABBS_DESC; +typedef +enum D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX + { + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT = -1, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE = -2, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT = -3, + D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE = -4 + } D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX; + +typedef +enum D3D12_RAYTRACING_OPACITY_MICROMAP_STATE + { + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT = 0, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE = 1, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT = 2, + D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE = 3 + } D3D12_RAYTRACING_OPACITY_MICROMAP_STATE; + +typedef +enum D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT + { + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE = 0x1, + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE = 0x2 + } D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_DESC +{ + UINT ByteOffset; + UINT SubdivisionLevel : 16; + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format : 16; +} D3D12_RAYTRACING_OPACITY_MICROMAP_DESC; +typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC + { + D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE OpacityMicromapIndexBuffer; + DXGI_FORMAT OpacityMicromapIndexFormat; + UINT OpacityMicromapBaseLocation; + D3D12_GPU_VIRTUAL_ADDRESS OpacityMicromapArray; + } D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC; + +typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC + { + const D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC *pTriangles; + const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC *pOmmLinkage; + } D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC; + typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS { @@ -13887,10 +15388,12 @@ enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE = 0x4, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD = 0x8, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY = 0x10, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20 + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE = 0x40, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS = 0x80 } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS ) typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE { @@ -13905,7 +15408,8 @@ typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE { D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL = 0, - D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1 + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1, + D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY = 0x2 } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE; typedef @@ -13950,12 +15454,20 @@ typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION // depending on Type field, NumDescs above is followed by either: // D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs] // or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs]. +// or D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC (NumDescs == 1 in this case). +// +// For D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC, the pOmmHistogram pointer becomes a GPUVA instead of CPU pointer +// // There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU. typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC { UINT64 SerializedSizeInBytes; - UINT64 NumBottomLevelAccelerationStructurePointers; + union + { + UINT64 NumBottomLevelAccelerationStructurePointers; + UINT64 NumBottomLevelAccelerationStructureHeaderAndPointerListPairs; + } ; } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC; typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER @@ -13967,7 +15479,8 @@ typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER typedef enum D3D12_SERIALIZED_DATA_TYPE { - D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0 + D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0, + D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE = 0x1 } D3D12_SERIALIZED_DATA_TYPE; typedef @@ -13988,6 +15501,39 @@ typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader; } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER; +typedef +enum D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE + { + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE = 0, + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS = 0, + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS = 0xffffffff + } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE; + +typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1 + { + D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier; + UINT64 SerializedSizeInBytesIncludingHeader; + UINT64 DeserializedSizeInBytes; + union + { + UINT NumBottomLevelAccelerationStructurePointersAfterHeader; + UINT NumBlocks; + } ; + D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE HeaderPostambleType; + } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1; + +typedef +enum D3D12_SERIALIZED_BLOCK_TYPE + { + D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS = 0 + } D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE; + +typedef struct D3D12_RAYTRACING_SERIALIZED_BLOCK + { + D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE Type; + UINT64 NumBlockPointersAfterHeader; + } D3D12_RAYTRACING_SERIALIZED_BLOCK; + typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC { UINT64 CurrentSizeInBytes; @@ -14011,9 +15557,25 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_DESC { D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles; D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs; + D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC OmmTriangles; } ; } D3D12_RAYTRACING_GEOMETRY_DESC; +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY + { + UINT Count; + UINT SubdivisionLevel; + D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format; + } D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC + { + UINT NumOmmHistogramEntries; + const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY *pOmmHistogram; + D3D12_GPU_VIRTUAL_ADDRESS InputBuffer; + D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE PerOmmDescs; + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC; + typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS { D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type; @@ -14025,6 +15587,7 @@ typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs; const D3D12_RAYTRACING_GEOMETRY_DESC *pGeometryDescs; const D3D12_RAYTRACING_GEOMETRY_DESC *const *ppGeometryDescs; + const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC *pOpacityMicromapArrayDesc; } ; } D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS; @@ -14043,6 +15606,29 @@ typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO UINT64 UpdateScratchDataSizeInBytes; } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO; +typedef +enum D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE + { + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE = 0, + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1 + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC + { + D3D12_GPU_VIRTUAL_ADDRESS DestBuffer; + D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE InfoType; + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC + { + UINT64 CurrentSizeInBytes; + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC; + +typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC + { + UINT64 DecodedSizeInBytes; + } D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC; + typedef enum D3D12_RAY_FLAGS { @@ -14056,10 +15642,11 @@ enum D3D12_RAY_FLAGS D3D12_RAY_FLAG_CULL_OPAQUE = 0x40, D3D12_RAY_FLAG_CULL_NON_OPAQUE = 0x80, D3D12_RAY_FLAG_SKIP_TRIANGLES = 0x100, - D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200 + D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES = 0x200, + D3D12_RAY_FLAG_FORCE_OMM_2_STATE = 0x400 } D3D12_RAY_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS ) typedef enum D3D12_HIT_KIND { @@ -14069,8 +15656,8 @@ enum D3D12_HIT_KIND -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0034_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0034_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0039_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0039_v0_0_s_ifspec; #ifndef __ID3D12Device5_INTERFACE_DEFINED__ #define __ID3D12Device5_INTERFACE_DEFINED__ @@ -14900,59 +16487,125 @@ EXTERN_C const IID IID_ID3D12Device5; #endif /* __ID3D12Device5_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0035 */ +/* interface __MIDL_itf_d3d12_0000_0040 */ /* [local] */ +typedef +enum D3D12_MARKER_API + { + D3D12_MARKER_API_SETMARKER = 0, + D3D12_MARKER_API_BEGINEVENT = 1, + D3D12_MARKER_API_ENDEVENT = 2, + D3D12_MARKER_API_DRAWINSTANCED = 3, + D3D12_MARKER_API_DRAWINDEXEDINSTANCED = 4, + D3D12_MARKER_API_EXECUTEINDIRECT = 5, + D3D12_MARKER_API_DISPATCH = 6, + D3D12_MARKER_API_COPYBUFFERREGION = 7, + D3D12_MARKER_API_COPYTEXTUREREGION = 8, + D3D12_MARKER_API_COPYRESOURCE = 9, + D3D12_MARKER_API_COPYTILES = 10, + D3D12_MARKER_API_RESOLVESUBRESOURCE = 11, + D3D12_MARKER_API_CLEARRENDERTARGETVIEW = 12, + D3D12_MARKER_API_CLEARUNORDEREDACCESSVIEW = 13, + D3D12_MARKER_API_CLEARDEPTHSTENCILVIEW = 14, + D3D12_MARKER_API_RESOURCEBARRIER = 15, + D3D12_MARKER_API_EXECUTEBUNDLE = 16, + D3D12_MARKER_API_PRESENT = 17, + D3D12_MARKER_API_RESOLVEQUERYDATA = 18, + D3D12_MARKER_API_BEGINSUBMISSION = 19, + D3D12_MARKER_API_ENDSUBMISSION = 20, + D3D12_MARKER_API_DECODEFRAME = 21, + D3D12_MARKER_API_PROCESSFRAMES = 22, + D3D12_MARKER_API_ATOMICCOPYBUFFERUINT = 23, + D3D12_MARKER_API_ATOMICCOPYBUFFERUINT64 = 24, + D3D12_MARKER_API_RESOLVESUBRESOURCEREGION = 25, + D3D12_MARKER_API_WRITEBUFFERIMMEDIATE = 26, + D3D12_MARKER_API_DECODEFRAME1 = 27, + D3D12_MARKER_API_SETPROTECTEDRESOURCESESSION = 28, + D3D12_MARKER_API_DECODEFRAME2 = 29, + D3D12_MARKER_API_PROCESSFRAMES1 = 30, + D3D12_MARKER_API_BUILDRAYTRACINGACCELERATIONSTRUCTURE = 31, + D3D12_MARKER_API_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO = 32, + D3D12_MARKER_API_COPYRAYTRACINGACCELERATIONSTRUCTURE = 33, + D3D12_MARKER_API_DISPATCHRAYS = 34, + D3D12_MARKER_API_INITIALIZEMETACOMMAND = 35, + D3D12_MARKER_API_EXECUTEMETACOMMAND = 36, + D3D12_MARKER_API_ESTIMATEMOTION = 37, + D3D12_MARKER_API_RESOLVEMOTIONVECTORHEAP = 38, + D3D12_MARKER_API_SETPIPELINESTATE1 = 39, + D3D12_MARKER_API_INITIALIZEEXTENSIONCOMMAND = 40, + D3D12_MARKER_API_EXECUTEEXTENSIONCOMMAND = 41, + D3D12_MARKER_API_DISPATCHMESH = 42, + D3D12_MARKER_API_ENCODEFRAME = 43, + D3D12_MARKER_API_RESOLVEENCODEROUTPUTMETADATA = 44, + D3D12_MARKER_API_BARRIER = 45, + D3D12_MARKER_API_BEGIN_COMMAND_LIST = 46, + D3D12_MARKER_API_DISPATCHGRAPH = 47, + D3D12_MARKER_API_SETPROGRAM = 48, + D3D12_MARKER_API_ENCODEFRAME1 = 49, + D3D12_MARKER_API_RESOLVEENCODEROUTPUTMETADATA1 = 50, + D3D12_MARKER_API_RESOLVEINPUTPARAMLAYOUT = 51, + D3D12_MARKER_API_PROCESSFRAMES2 = 52, + D3D12_MARKER_API_SET_WORK_GRAPH_MAXIMUM_GPU_INPUT_RECORDS = 53 + } D3D12_MARKER_API; + typedef enum D3D12_AUTO_BREADCRUMB_OP { - D3D12_AUTO_BREADCRUMB_OP_SETMARKER = 0, - D3D12_AUTO_BREADCRUMB_OP_BEGINEVENT = 1, - D3D12_AUTO_BREADCRUMB_OP_ENDEVENT = 2, - D3D12_AUTO_BREADCRUMB_OP_DRAWINSTANCED = 3, - D3D12_AUTO_BREADCRUMB_OP_DRAWINDEXEDINSTANCED = 4, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEINDIRECT = 5, - D3D12_AUTO_BREADCRUMB_OP_DISPATCH = 6, - D3D12_AUTO_BREADCRUMB_OP_COPYBUFFERREGION = 7, - D3D12_AUTO_BREADCRUMB_OP_COPYTEXTUREREGION = 8, - D3D12_AUTO_BREADCRUMB_OP_COPYRESOURCE = 9, - D3D12_AUTO_BREADCRUMB_OP_COPYTILES = 10, - D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCE = 11, - D3D12_AUTO_BREADCRUMB_OP_CLEARRENDERTARGETVIEW = 12, - D3D12_AUTO_BREADCRUMB_OP_CLEARUNORDEREDACCESSVIEW = 13, - D3D12_AUTO_BREADCRUMB_OP_CLEARDEPTHSTENCILVIEW = 14, - D3D12_AUTO_BREADCRUMB_OP_RESOURCEBARRIER = 15, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEBUNDLE = 16, - D3D12_AUTO_BREADCRUMB_OP_PRESENT = 17, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEQUERYDATA = 18, - D3D12_AUTO_BREADCRUMB_OP_BEGINSUBMISSION = 19, - D3D12_AUTO_BREADCRUMB_OP_ENDSUBMISSION = 20, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME = 21, - D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES = 22, - D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT = 23, - D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT64 = 24, - D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCEREGION = 25, - D3D12_AUTO_BREADCRUMB_OP_WRITEBUFFERIMMEDIATE = 26, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME1 = 27, - D3D12_AUTO_BREADCRUMB_OP_SETPROTECTEDRESOURCESESSION = 28, - D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME2 = 29, - D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES1 = 30, - D3D12_AUTO_BREADCRUMB_OP_BUILDRAYTRACINGACCELERATIONSTRUCTURE = 31, - D3D12_AUTO_BREADCRUMB_OP_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO = 32, - D3D12_AUTO_BREADCRUMB_OP_COPYRAYTRACINGACCELERATIONSTRUCTURE = 33, - D3D12_AUTO_BREADCRUMB_OP_DISPATCHRAYS = 34, - D3D12_AUTO_BREADCRUMB_OP_INITIALIZEMETACOMMAND = 35, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEMETACOMMAND = 36, - D3D12_AUTO_BREADCRUMB_OP_ESTIMATEMOTION = 37, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEMOTIONVECTORHEAP = 38, - D3D12_AUTO_BREADCRUMB_OP_SETPIPELINESTATE1 = 39, - D3D12_AUTO_BREADCRUMB_OP_INITIALIZEEXTENSIONCOMMAND = 40, - D3D12_AUTO_BREADCRUMB_OP_EXECUTEEXTENSIONCOMMAND = 41, - D3D12_AUTO_BREADCRUMB_OP_DISPATCHMESH = 42, - D3D12_AUTO_BREADCRUMB_OP_ENCODEFRAME = 43, - D3D12_AUTO_BREADCRUMB_OP_RESOLVEENCODEROUTPUTMETADATA = 44, - D3D12_AUTO_BREADCRUMB_OP_BARRIER = 45, - D3D12_AUTO_BREADCRUMB_OP_BEGIN_COMMAND_LIST = 46 + D3D12_AUTO_BREADCRUMB_OP_SETMARKER = D3D12_MARKER_API_SETMARKER, + D3D12_AUTO_BREADCRUMB_OP_BEGINEVENT = D3D12_MARKER_API_BEGINEVENT, + D3D12_AUTO_BREADCRUMB_OP_ENDEVENT = D3D12_MARKER_API_ENDEVENT, + D3D12_AUTO_BREADCRUMB_OP_DRAWINSTANCED = D3D12_MARKER_API_DRAWINSTANCED, + D3D12_AUTO_BREADCRUMB_OP_DRAWINDEXEDINSTANCED = D3D12_MARKER_API_DRAWINDEXEDINSTANCED, + D3D12_AUTO_BREADCRUMB_OP_EXECUTEINDIRECT = D3D12_MARKER_API_EXECUTEINDIRECT, + D3D12_AUTO_BREADCRUMB_OP_DISPATCH = D3D12_MARKER_API_DISPATCH, + D3D12_AUTO_BREADCRUMB_OP_COPYBUFFERREGION = D3D12_MARKER_API_COPYBUFFERREGION, + D3D12_AUTO_BREADCRUMB_OP_COPYTEXTUREREGION = D3D12_MARKER_API_COPYTEXTUREREGION, + D3D12_AUTO_BREADCRUMB_OP_COPYRESOURCE = D3D12_MARKER_API_COPYRESOURCE, + D3D12_AUTO_BREADCRUMB_OP_COPYTILES = D3D12_MARKER_API_COPYTILES, + D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCE = D3D12_MARKER_API_RESOLVESUBRESOURCE, + D3D12_AUTO_BREADCRUMB_OP_CLEARRENDERTARGETVIEW = D3D12_MARKER_API_CLEARRENDERTARGETVIEW, + D3D12_AUTO_BREADCRUMB_OP_CLEARUNORDEREDACCESSVIEW = D3D12_MARKER_API_CLEARUNORDEREDACCESSVIEW, + D3D12_AUTO_BREADCRUMB_OP_CLEARDEPTHSTENCILVIEW = D3D12_MARKER_API_CLEARDEPTHSTENCILVIEW, + D3D12_AUTO_BREADCRUMB_OP_RESOURCEBARRIER = D3D12_MARKER_API_RESOURCEBARRIER, + D3D12_AUTO_BREADCRUMB_OP_EXECUTEBUNDLE = D3D12_MARKER_API_EXECUTEBUNDLE, + D3D12_AUTO_BREADCRUMB_OP_PRESENT = D3D12_MARKER_API_PRESENT, + D3D12_AUTO_BREADCRUMB_OP_RESOLVEQUERYDATA = D3D12_MARKER_API_RESOLVEQUERYDATA, + D3D12_AUTO_BREADCRUMB_OP_BEGINSUBMISSION = D3D12_MARKER_API_BEGINSUBMISSION, + D3D12_AUTO_BREADCRUMB_OP_ENDSUBMISSION = D3D12_MARKER_API_ENDSUBMISSION, + D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME = D3D12_MARKER_API_DECODEFRAME, + D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES = D3D12_MARKER_API_PROCESSFRAMES, + D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT = D3D12_MARKER_API_ATOMICCOPYBUFFERUINT, + D3D12_AUTO_BREADCRUMB_OP_ATOMICCOPYBUFFERUINT64 = D3D12_MARKER_API_ATOMICCOPYBUFFERUINT64, + D3D12_AUTO_BREADCRUMB_OP_RESOLVESUBRESOURCEREGION = D3D12_MARKER_API_RESOLVESUBRESOURCEREGION, + D3D12_AUTO_BREADCRUMB_OP_WRITEBUFFERIMMEDIATE = D3D12_MARKER_API_WRITEBUFFERIMMEDIATE, + D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME1 = D3D12_MARKER_API_DECODEFRAME1, + D3D12_AUTO_BREADCRUMB_OP_SETPROTECTEDRESOURCESESSION = D3D12_MARKER_API_SETPROTECTEDRESOURCESESSION, + D3D12_AUTO_BREADCRUMB_OP_DECODEFRAME2 = D3D12_MARKER_API_DECODEFRAME2, + D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES1 = D3D12_MARKER_API_PROCESSFRAMES1, + D3D12_AUTO_BREADCRUMB_OP_BUILDRAYTRACINGACCELERATIONSTRUCTURE = D3D12_MARKER_API_BUILDRAYTRACINGACCELERATIONSTRUCTURE, + D3D12_AUTO_BREADCRUMB_OP_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO = D3D12_MARKER_API_EMITRAYTRACINGACCELERATIONSTRUCTUREPOSTBUILDINFO, + D3D12_AUTO_BREADCRUMB_OP_COPYRAYTRACINGACCELERATIONSTRUCTURE = D3D12_MARKER_API_COPYRAYTRACINGACCELERATIONSTRUCTURE, + D3D12_AUTO_BREADCRUMB_OP_DISPATCHRAYS = D3D12_MARKER_API_DISPATCHRAYS, + D3D12_AUTO_BREADCRUMB_OP_INITIALIZEMETACOMMAND = D3D12_MARKER_API_INITIALIZEMETACOMMAND, + D3D12_AUTO_BREADCRUMB_OP_EXECUTEMETACOMMAND = D3D12_MARKER_API_EXECUTEMETACOMMAND, + D3D12_AUTO_BREADCRUMB_OP_ESTIMATEMOTION = D3D12_MARKER_API_ESTIMATEMOTION, + D3D12_AUTO_BREADCRUMB_OP_RESOLVEMOTIONVECTORHEAP = D3D12_MARKER_API_RESOLVEMOTIONVECTORHEAP, + D3D12_AUTO_BREADCRUMB_OP_SETPIPELINESTATE1 = D3D12_MARKER_API_SETPIPELINESTATE1, + D3D12_AUTO_BREADCRUMB_OP_INITIALIZEEXTENSIONCOMMAND = D3D12_MARKER_API_INITIALIZEEXTENSIONCOMMAND, + D3D12_AUTO_BREADCRUMB_OP_EXECUTEEXTENSIONCOMMAND = D3D12_MARKER_API_EXECUTEEXTENSIONCOMMAND, + D3D12_AUTO_BREADCRUMB_OP_DISPATCHMESH = D3D12_MARKER_API_DISPATCHMESH, + D3D12_AUTO_BREADCRUMB_OP_ENCODEFRAME = D3D12_MARKER_API_ENCODEFRAME, + D3D12_AUTO_BREADCRUMB_OP_RESOLVEENCODEROUTPUTMETADATA = D3D12_MARKER_API_RESOLVEENCODEROUTPUTMETADATA, + D3D12_AUTO_BREADCRUMB_OP_BARRIER = D3D12_MARKER_API_BARRIER, + D3D12_AUTO_BREADCRUMB_OP_BEGIN_COMMAND_LIST = D3D12_MARKER_API_BEGIN_COMMAND_LIST, + D3D12_AUTO_BREADCRUMB_OP_DISPATCHGRAPH = D3D12_MARKER_API_DISPATCHGRAPH, + D3D12_AUTO_BREADCRUMB_OP_SETPROGRAM = D3D12_MARKER_API_SETPROGRAM, + D3D12_AUTO_BREADCRUMB_OP_ENCODEFRAME1 = D3D12_MARKER_API_ENCODEFRAME1, + D3D12_AUTO_BREADCRUMB_OP_RESOLVEENCODEROUTPUTMETADATA1 = D3D12_MARKER_API_RESOLVEENCODEROUTPUTMETADATA1, + D3D12_AUTO_BREADCRUMB_OP_RESOLVEINPUTPARAMLAYOUT = D3D12_MARKER_API_RESOLVEINPUTPARAMLAYOUT, + D3D12_AUTO_BREADCRUMB_OP_PROCESSFRAMES2 = D3D12_MARKER_API_PROCESSFRAMES2, + D3D12_AUTO_BREADCRUMB_OP_SET_WORK_GRAPH_MAXIMUM_GPU_INPUT_RECORDS = D3D12_MARKER_API_SET_WORK_GRAPH_MAXIMUM_GPU_INPUT_RECORDS } D3D12_AUTO_BREADCRUMB_OP; typedef struct D3D12_AUTO_BREADCRUMB_NODE @@ -15008,7 +16661,7 @@ enum D3D12_DRED_FLAGS D3D12_DRED_FLAG_DISABLE_AUTOBREADCRUMBS = 2 } D3D12_DRED_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_FLAGS ) typedef enum D3D12_DRED_ENABLEMENT { @@ -15104,7 +16757,7 @@ enum D3D12_DRED_PAGE_FAULT_FLAGS D3D12_DRED_PAGE_FAULT_FLAGS_NONE = 0 } D3D12_DRED_PAGE_FAULT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_PAGE_FAULT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_DRED_PAGE_FAULT_FLAGS ) typedef enum D3D12_DRED_DEVICE_STATE { @@ -15158,8 +16811,8 @@ typedef struct D3D12_VERSIONED_DEVICE_REMOVED_EXTENDED_DATA -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0035_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0035_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0040_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0040_v0_0_s_ifspec; #ifndef __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ #define __ID3D12DeviceRemovedExtendedDataSettings_INTERFACE_DEFINED__ @@ -15822,7 +17475,7 @@ EXTERN_C const IID IID_ID3D12DeviceRemovedExtendedData2; #endif /* __ID3D12DeviceRemovedExtendedData2_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0041 */ +/* interface __MIDL_itf_d3d12_0000_0046 */ /* [local] */ typedef @@ -15845,8 +17498,8 @@ enum D3D12_MEASUREMENTS_ACTION -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0041_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0041_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0046_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0046_v0_0_s_ifspec; #ifndef __ID3D12Device6_INTERFACE_DEFINED__ #define __ID3D12Device6_INTERFACE_DEFINED__ @@ -16655,7 +18308,7 @@ EXTERN_C const IID IID_ID3D12Device6; #endif /* __ID3D12Device6_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0042 */ +/* interface __MIDL_itf_d3d12_0000_0047 */ /* [local] */ DEFINE_GUID(D3D12_PROTECTED_RESOURCES_SESSION_HARDWARE_PROTECTED, 0x62B0084E, 0xC70E, 0x4DAA, 0xA1, 0x09, 0x30, 0xFF, 0x8D, 0x5A, 0x04, 0x82); @@ -16681,8 +18334,8 @@ typedef struct D3D12_PROTECTED_RESOURCE_SESSION_DESC1 -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0042_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0042_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0047_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0047_v0_0_s_ifspec; #ifndef __ID3D12ProtectedResourceSession1_INTERFACE_DEFINED__ #define __ID3D12ProtectedResourceSession1_INTERFACE_DEFINED__ @@ -19991,7 +21644,7 @@ EXTERN_C const IID IID_ID3D12GraphicsCommandList3; #endif /* __ID3D12GraphicsCommandList3_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0049 */ +/* interface __MIDL_itf_d3d12_0000_0054 */ /* [local] */ typedef @@ -20102,11 +21755,11 @@ enum D3D12_RENDER_PASS_FLAGS D3D12_RENDER_PASS_FLAG_BIND_READ_ONLY_STENCIL = 0x10 } D3D12_RENDER_PASS_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_RENDER_PASS_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_RENDER_PASS_FLAGS ) -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0049_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0049_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0054_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0054_v0_0_s_ifspec; #ifndef __ID3D12MetaCommand_INTERFACE_DEFINED__ #define __ID3D12MetaCommand_INTERFACE_DEFINED__ @@ -20242,7 +21895,7 @@ EXTERN_C const IID IID_ID3D12MetaCommand; #endif /* __ID3D12MetaCommand_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0050 */ +/* interface __MIDL_itf_d3d12_0000_0055 */ /* [local] */ typedef struct D3D12_DISPATCH_RAYS_DESC @@ -20256,10 +21909,104 @@ typedef struct D3D12_DISPATCH_RAYS_DESC UINT Depth; } D3D12_DISPATCH_RAYS_DESC; +typedef +enum D3D12_SET_WORK_GRAPH_FLAGS + { + D3D12_SET_WORK_GRAPH_FLAG_NONE = 0, + D3D12_SET_WORK_GRAPH_FLAG_INITIALIZE = 0x1 + } D3D12_SET_WORK_GRAPH_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D12_SET_WORK_GRAPH_FLAGS ) +typedef struct D3D12_SET_WORK_GRAPH_DESC + { + D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; + D3D12_SET_WORK_GRAPH_FLAGS Flags; + D3D12_GPU_VIRTUAL_ADDRESS_RANGE BackingMemory; + D3D12_GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE NodeLocalRootArgumentsTable; + } D3D12_SET_WORK_GRAPH_DESC; + +typedef struct D3D12_SET_RAYTRACING_PIPELINE_DESC + { + D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; + } D3D12_SET_RAYTRACING_PIPELINE_DESC; + +typedef struct D3D12_SET_GENERIC_PIPELINE_DESC + { + D3D12_PROGRAM_IDENTIFIER ProgramIdentifier; + } D3D12_SET_GENERIC_PIPELINE_DESC; + +typedef +enum D3D12_PROGRAM_TYPE + { + D3D12_PROGRAM_TYPE_GENERIC_PIPELINE = 1, + D3D12_PROGRAM_TYPE_RAYTRACING_PIPELINE = 4, + D3D12_PROGRAM_TYPE_WORK_GRAPH = 5 + } D3D12_PROGRAM_TYPE; + +typedef struct D3D12_SET_PROGRAM_DESC + { + D3D12_PROGRAM_TYPE Type; + union + { + D3D12_SET_GENERIC_PIPELINE_DESC GenericPipeline; + D3D12_SET_RAYTRACING_PIPELINE_DESC RaytracingPipeline; + D3D12_SET_WORK_GRAPH_DESC WorkGraph; + } ; + } D3D12_SET_PROGRAM_DESC; + +typedef +enum D3D12_DISPATCH_MODE + { + D3D12_DISPATCH_MODE_NODE_CPU_INPUT = 0, + D3D12_DISPATCH_MODE_NODE_GPU_INPUT = 1, + D3D12_DISPATCH_MODE_MULTI_NODE_CPU_INPUT = 2, + D3D12_DISPATCH_MODE_MULTI_NODE_GPU_INPUT = 3 + } D3D12_DISPATCH_MODE; + +typedef struct D3D12_NODE_CPU_INPUT + { + UINT EntrypointIndex; + UINT NumRecords; + const void *pRecords; + UINT64 RecordStrideInBytes; + } D3D12_NODE_CPU_INPUT; + +typedef struct D3D12_NODE_GPU_INPUT + { + UINT EntrypointIndex; + UINT NumRecords; + D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE Records; + } D3D12_NODE_GPU_INPUT; + +typedef struct D3D12_MULTI_NODE_CPU_INPUT + { + UINT NumNodeInputs; + const D3D12_NODE_CPU_INPUT *pNodeInputs; + UINT64 NodeInputStrideInBytes; + } D3D12_MULTI_NODE_CPU_INPUT; + +typedef struct D3D12_MULTI_NODE_GPU_INPUT + { + UINT NumNodeInputs; + D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE NodeInputs; + } D3D12_MULTI_NODE_GPU_INPUT; + +typedef struct D3D12_DISPATCH_GRAPH_DESC + { + D3D12_DISPATCH_MODE Mode; + union + { + D3D12_NODE_CPU_INPUT NodeCPUInput; + D3D12_GPU_VIRTUAL_ADDRESS NodeGPUInput; + D3D12_MULTI_NODE_CPU_INPUT MultiNodeCPUInput; + D3D12_GPU_VIRTUAL_ADDRESS MultiNodeGPUInput; + } ; + } D3D12_DISPATCH_GRAPH_DESC; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0050_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0050_v0_0_s_ifspec; + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0055_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0055_v0_0_s_ifspec; #ifndef __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ #define __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ @@ -21108,7 +22855,7 @@ EXTERN_C const IID IID_ID3D12GraphicsCommandList4; #endif /* __ID3D12GraphicsCommandList4_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0051 */ +/* interface __MIDL_itf_d3d12_0000_0056 */ /* [local] */ typedef @@ -21126,7 +22873,7 @@ enum D3D12_SHADER_CACHE_FLAGS D3D12_SHADER_CACHE_FLAG_USE_WORKING_DIR = 0x2 } D3D12_SHADER_CACHE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_FLAGS ) typedef struct D3D12_SHADER_CACHE_SESSION_DESC { GUID Identifier; @@ -21144,36 +22891,36 @@ enum D3D12_BARRIER_LAYOUT D3D12_BARRIER_LAYOUT_UNDEFINED = 0xffffffff, D3D12_BARRIER_LAYOUT_COMMON = 0, D3D12_BARRIER_LAYOUT_PRESENT = 0, - D3D12_BARRIER_LAYOUT_GENERIC_READ = ( D3D12_BARRIER_LAYOUT_PRESENT + 1 ) , - D3D12_BARRIER_LAYOUT_RENDER_TARGET = ( D3D12_BARRIER_LAYOUT_GENERIC_READ + 1 ) , - D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS = ( D3D12_BARRIER_LAYOUT_RENDER_TARGET + 1 ) , - D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE = ( D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS + 1 ) , - D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_READ = ( D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE + 1 ) , - D3D12_BARRIER_LAYOUT_SHADER_RESOURCE = ( D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_READ + 1 ) , - D3D12_BARRIER_LAYOUT_COPY_SOURCE = ( D3D12_BARRIER_LAYOUT_SHADER_RESOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_COPY_DEST = ( D3D12_BARRIER_LAYOUT_COPY_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_RESOLVE_SOURCE = ( D3D12_BARRIER_LAYOUT_COPY_DEST + 1 ) , - D3D12_BARRIER_LAYOUT_RESOLVE_DEST = ( D3D12_BARRIER_LAYOUT_RESOLVE_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_SHADING_RATE_SOURCE = ( D3D12_BARRIER_LAYOUT_RESOLVE_DEST + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_DECODE_READ = ( D3D12_BARRIER_LAYOUT_SHADING_RATE_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_DECODE_WRITE = ( D3D12_BARRIER_LAYOUT_VIDEO_DECODE_READ + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_READ = ( D3D12_BARRIER_LAYOUT_VIDEO_DECODE_WRITE + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_WRITE = ( D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_READ + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_READ = ( D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_WRITE + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_WRITE = ( D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_READ + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COMMON = ( D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_WRITE + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COMMON + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_UNORDERED_ACCESS = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_UNORDERED_ACCESS + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_SOURCE = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_DEST = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COMMON = ( D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_DEST + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_GENERIC_READ = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COMMON + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_UNORDERED_ACCESS = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_GENERIC_READ + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_SHADER_RESOURCE = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_UNORDERED_ACCESS + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_SOURCE = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_SHADER_RESOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_DEST = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_SOURCE + 1 ) , - D3D12_BARRIER_LAYOUT_VIDEO_QUEUE_COMMON = ( D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_DEST + 1 ) + D3D12_BARRIER_LAYOUT_GENERIC_READ = 1, + D3D12_BARRIER_LAYOUT_RENDER_TARGET = 2, + D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS = 3, + D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_WRITE = 4, + D3D12_BARRIER_LAYOUT_DEPTH_STENCIL_READ = 5, + D3D12_BARRIER_LAYOUT_SHADER_RESOURCE = 6, + D3D12_BARRIER_LAYOUT_COPY_SOURCE = 7, + D3D12_BARRIER_LAYOUT_COPY_DEST = 8, + D3D12_BARRIER_LAYOUT_RESOLVE_SOURCE = 9, + D3D12_BARRIER_LAYOUT_RESOLVE_DEST = 10, + D3D12_BARRIER_LAYOUT_SHADING_RATE_SOURCE = 11, + D3D12_BARRIER_LAYOUT_VIDEO_DECODE_READ = 12, + D3D12_BARRIER_LAYOUT_VIDEO_DECODE_WRITE = 13, + D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_READ = 14, + D3D12_BARRIER_LAYOUT_VIDEO_PROCESS_WRITE = 15, + D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_READ = 16, + D3D12_BARRIER_LAYOUT_VIDEO_ENCODE_WRITE = 17, + D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COMMON = 18, + D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ = 19, + D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_UNORDERED_ACCESS = 20, + D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE = 21, + D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_SOURCE = 22, + D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_COPY_DEST = 23, + D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COMMON = 24, + D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_GENERIC_READ = 25, + D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_UNORDERED_ACCESS = 26, + D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_SHADER_RESOURCE = 27, + D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_SOURCE = 28, + D3D12_BARRIER_LAYOUT_COMPUTE_QUEUE_COPY_DEST = 29, + D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_GENERIC_READ_COMPUTE_QUEUE_ACCESSIBLE = 31 } D3D12_BARRIER_LAYOUT; typedef @@ -21205,7 +22952,7 @@ enum D3D12_BARRIER_SYNC D3D12_BARRIER_SYNC_SPLIT = 0x80000000 } D3D12_BARRIER_SYNC; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_SYNC ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_SYNC ) typedef enum D3D12_BARRIER_ACCESS { @@ -21237,7 +22984,7 @@ enum D3D12_BARRIER_ACCESS D3D12_BARRIER_ACCESS_NO_ACCESS = 0x80000000 } D3D12_BARRIER_ACCESS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_ACCESS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_BARRIER_ACCESS ) typedef enum D3D12_BARRIER_TYPE { @@ -21253,7 +23000,7 @@ enum D3D12_TEXTURE_BARRIER_FLAGS D3D12_TEXTURE_BARRIER_FLAG_DISCARD = 0x1 } D3D12_TEXTURE_BARRIER_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_TEXTURE_BARRIER_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_TEXTURE_BARRIER_FLAGS ) typedef struct D3D12_BARRIER_SUBRESOURCE_RANGE { UINT IndexOrFirstMipLevel; @@ -21310,8 +23057,8 @@ typedef struct D3D12_BARRIER_GROUP -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0051_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0051_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0056_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0056_v0_0_s_ifspec; #ifndef __ID3D12ShaderCacheSession_INTERFACE_DEFINED__ #define __ID3D12ShaderCacheSession_INTERFACE_DEFINED__ @@ -21511,7 +23258,7 @@ EXTERN_C const IID IID_ID3D12ShaderCacheSession; #endif /* __ID3D12ShaderCacheSession_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0052 */ +/* interface __MIDL_itf_d3d12_0000_0057 */ /* [local] */ typedef @@ -21523,7 +23270,7 @@ enum D3D12_SHADER_CACHE_KIND_FLAGS D3D12_SHADER_CACHE_KIND_FLAG_APPLICATION_MANAGED = 0x8 } D3D12_SHADER_CACHE_KIND_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_KIND_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_KIND_FLAGS ) typedef enum D3D12_SHADER_CACHE_CONTROL_FLAGS { @@ -21532,11 +23279,11 @@ enum D3D12_SHADER_CACHE_CONTROL_FLAGS D3D12_SHADER_CACHE_CONTROL_FLAG_CLEAR = 0x4 } D3D12_SHADER_CACHE_CONTROL_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_CONTROL_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_SHADER_CACHE_CONTROL_FLAGS ) -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0052_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0052_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0057_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0057_v0_0_s_ifspec; #ifndef __ID3D12Device9_INTERFACE_DEFINED__ #define __ID3D12Device9_INTERFACE_DEFINED__ @@ -26604,6 +28351,1312 @@ EXTERN_C const IID IID_ID3D12Device13; #endif /* __ID3D12Device13_INTERFACE_DEFINED__ */ +#ifndef __ID3D12Device14_INTERFACE_DEFINED__ +#define __ID3D12Device14_INTERFACE_DEFINED__ + +/* interface ID3D12Device14 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12Device14; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5f6e592d-d895-44c2-8e4a-88ad4926d323") + ID3D12Device14 : public ID3D12Device13 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateRootSignatureFromSubobjectInLibrary( + _In_ UINT nodeMask, + _In_reads_(blobLengthInBytes) const void *pLibraryBlob, + _In_ SIZE_T blobLengthInBytes, + _In_opt_ LPCWSTR subobjectName, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12Device14Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12Device14 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12Device14 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12Device14 * This); + + DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) + HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( + ID3D12Device14 * This, + _In_ REFGUID guid, + _Inout_ UINT *pDataSize, + _Out_writes_bytes_opt_( *pDataSize ) void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) + HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( + ID3D12Device14 * This, + _In_ REFGUID guid, + _In_ UINT DataSize, + _In_reads_bytes_opt_( DataSize ) const void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) + HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( + ID3D12Device14 * This, + _In_ REFGUID guid, + _In_opt_ const IUnknown *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetName) + HRESULT ( STDMETHODCALLTYPE *SetName )( + ID3D12Device14 * This, + _In_z_ LPCWSTR Name); + + DECLSPEC_XFGVIRT(ID3D12Device, GetNodeCount) + UINT ( STDMETHODCALLTYPE *GetNodeCount )( + ID3D12Device14 * This); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandQueue) + HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue )( + ID3D12Device14 * This, + _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppCommandQueue); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandAllocator) + HRESULT ( STDMETHODCALLTYPE *CreateCommandAllocator )( + ID3D12Device14 * This, + _In_ D3D12_COMMAND_LIST_TYPE type, + REFIID riid, + _COM_Outptr_ void **ppCommandAllocator); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateGraphicsPipelineState) + HRESULT ( STDMETHODCALLTYPE *CreateGraphicsPipelineState )( + ID3D12Device14 * This, + _In_ const D3D12_GRAPHICS_PIPELINE_STATE_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppPipelineState); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateComputePipelineState) + HRESULT ( STDMETHODCALLTYPE *CreateComputePipelineState )( + ID3D12Device14 * This, + _In_ const D3D12_COMPUTE_PIPELINE_STATE_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppPipelineState); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandList) + HRESULT ( STDMETHODCALLTYPE *CreateCommandList )( + ID3D12Device14 * This, + _In_ UINT nodeMask, + _In_ D3D12_COMMAND_LIST_TYPE type, + _In_ ID3D12CommandAllocator *pCommandAllocator, + _In_opt_ ID3D12PipelineState *pInitialState, + REFIID riid, + _COM_Outptr_ void **ppCommandList); + + DECLSPEC_XFGVIRT(ID3D12Device, CheckFeatureSupport) + HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( + ID3D12Device14 * This, + D3D12_FEATURE Feature, + _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, + UINT FeatureSupportDataSize); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateDescriptorHeap) + HRESULT ( STDMETHODCALLTYPE *CreateDescriptorHeap )( + ID3D12Device14 * This, + _In_ const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc, + REFIID riid, + _COM_Outptr_ void **ppvHeap); + + DECLSPEC_XFGVIRT(ID3D12Device, GetDescriptorHandleIncrementSize) + UINT ( STDMETHODCALLTYPE *GetDescriptorHandleIncrementSize )( + ID3D12Device14 * This, + _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateRootSignature) + HRESULT ( STDMETHODCALLTYPE *CreateRootSignature )( + ID3D12Device14 * This, + _In_ UINT nodeMask, + _In_reads_(blobLengthInBytes) const void *pBlobWithRootSignature, + _In_ SIZE_T blobLengthInBytes, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateConstantBufferView) + void ( STDMETHODCALLTYPE *CreateConstantBufferView )( + ID3D12Device14 * This, + _In_opt_ const D3D12_CONSTANT_BUFFER_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateShaderResourceView) + void ( STDMETHODCALLTYPE *CreateShaderResourceView )( + ID3D12Device14 * This, + _In_opt_ ID3D12Resource *pResource, + _In_opt_ const D3D12_SHADER_RESOURCE_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateUnorderedAccessView) + void ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( + ID3D12Device14 * This, + _In_opt_ ID3D12Resource *pResource, + _In_opt_ ID3D12Resource *pCounterResource, + _In_opt_ const D3D12_UNORDERED_ACCESS_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateRenderTargetView) + void ( STDMETHODCALLTYPE *CreateRenderTargetView )( + ID3D12Device14 * This, + _In_opt_ ID3D12Resource *pResource, + _In_opt_ const D3D12_RENDER_TARGET_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateDepthStencilView) + void ( STDMETHODCALLTYPE *CreateDepthStencilView )( + ID3D12Device14 * This, + _In_opt_ ID3D12Resource *pResource, + _In_opt_ const D3D12_DEPTH_STENCIL_VIEW_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateSampler) + void ( STDMETHODCALLTYPE *CreateSampler )( + ID3D12Device14 * This, + _In_ const D3D12_SAMPLER_DESC *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptors) + void ( STDMETHODCALLTYPE *CopyDescriptors )( + ID3D12Device14 * This, + _In_ UINT NumDestDescriptorRanges, + _In_reads_(NumDestDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pDestDescriptorRangeStarts, + _In_reads_opt_(NumDestDescriptorRanges) const UINT *pDestDescriptorRangeSizes, + _In_ UINT NumSrcDescriptorRanges, + _In_reads_(NumSrcDescriptorRanges) const D3D12_CPU_DESCRIPTOR_HANDLE *pSrcDescriptorRangeStarts, + _In_reads_opt_(NumSrcDescriptorRanges) const UINT *pSrcDescriptorRangeSizes, + _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); + + DECLSPEC_XFGVIRT(ID3D12Device, CopyDescriptorsSimple) + void ( STDMETHODCALLTYPE *CopyDescriptorsSimple )( + ID3D12Device14 * This, + _In_ UINT NumDescriptors, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart, + _In_ D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType); + + DECLSPEC_XFGVIRT(ID3D12Device, GetResourceAllocationInfo) +#if !defined(_WIN32) + D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo )( + ID3D12Device14 * This, + _In_ UINT visibleMask, + _In_ UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); + +#else + D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo )( + ID3D12Device14 * This, + D3D12_RESOURCE_ALLOCATION_INFO * RetVal, + _In_ UINT visibleMask, + _In_ UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs); + +#endif + + DECLSPEC_XFGVIRT(ID3D12Device, GetCustomHeapProperties) +#if !defined(_WIN32) + D3D12_HEAP_PROPERTIES ( STDMETHODCALLTYPE *GetCustomHeapProperties )( + ID3D12Device14 * This, + _In_ UINT nodeMask, + D3D12_HEAP_TYPE heapType); + +#else + D3D12_HEAP_PROPERTIES *( STDMETHODCALLTYPE *GetCustomHeapProperties )( + ID3D12Device14 * This, + D3D12_HEAP_PROPERTIES * RetVal, + _In_ UINT nodeMask, + D3D12_HEAP_TYPE heapType); + +#endif + + DECLSPEC_XFGVIRT(ID3D12Device, CreateCommittedResource) + HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource )( + ID3D12Device14 * This, + _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, + D3D12_HEAP_FLAGS HeapFlags, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialResourceState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + REFIID riidResource, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateHeap) + HRESULT ( STDMETHODCALLTYPE *CreateHeap )( + ID3D12Device14 * This, + _In_ const D3D12_HEAP_DESC *pDesc, + REFIID riid, + _COM_Outptr_opt_ void **ppvHeap); + + DECLSPEC_XFGVIRT(ID3D12Device, CreatePlacedResource) + HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource )( + ID3D12Device14 * This, + _In_ ID3D12Heap *pHeap, + UINT64 HeapOffset, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateReservedResource) + HRESULT ( STDMETHODCALLTYPE *CreateReservedResource )( + ID3D12Device14 * This, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateSharedHandle) + HRESULT ( STDMETHODCALLTYPE *CreateSharedHandle )( + ID3D12Device14 * This, + _In_ ID3D12DeviceChild *pObject, + _In_opt_ const SECURITY_ATTRIBUTES *pAttributes, + DWORD Access, + _In_opt_ LPCWSTR Name, + _Out_ HANDLE *pHandle); + + DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandle) + HRESULT ( STDMETHODCALLTYPE *OpenSharedHandle )( + ID3D12Device14 * This, + _In_ HANDLE NTHandle, + REFIID riid, + _COM_Outptr_opt_ void **ppvObj); + + DECLSPEC_XFGVIRT(ID3D12Device, OpenSharedHandleByName) + HRESULT ( STDMETHODCALLTYPE *OpenSharedHandleByName )( + ID3D12Device14 * This, + _In_ LPCWSTR Name, + DWORD Access, + /* [annotation][out] */ + _Out_ HANDLE *pNTHandle); + + DECLSPEC_XFGVIRT(ID3D12Device, MakeResident) + HRESULT ( STDMETHODCALLTYPE *MakeResident )( + ID3D12Device14 * This, + UINT NumObjects, + _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); + + DECLSPEC_XFGVIRT(ID3D12Device, Evict) + HRESULT ( STDMETHODCALLTYPE *Evict )( + ID3D12Device14 * This, + UINT NumObjects, + _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateFence) + HRESULT ( STDMETHODCALLTYPE *CreateFence )( + ID3D12Device14 * This, + UINT64 InitialValue, + D3D12_FENCE_FLAGS Flags, + REFIID riid, + _COM_Outptr_ void **ppFence); + + DECLSPEC_XFGVIRT(ID3D12Device, GetDeviceRemovedReason) + HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( + ID3D12Device14 * This); + + DECLSPEC_XFGVIRT(ID3D12Device, GetCopyableFootprints) + void ( STDMETHODCALLTYPE *GetCopyableFootprints )( + ID3D12Device14 * This, + _In_ const D3D12_RESOURCE_DESC *pResourceDesc, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 BaseOffset, + _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, + _Out_writes_opt_(NumSubresources) UINT *pNumRows, + _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, + _Out_opt_ UINT64 *pTotalBytes); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateQueryHeap) + HRESULT ( STDMETHODCALLTYPE *CreateQueryHeap )( + ID3D12Device14 * This, + _In_ const D3D12_QUERY_HEAP_DESC *pDesc, + REFIID riid, + _COM_Outptr_opt_ void **ppvHeap); + + DECLSPEC_XFGVIRT(ID3D12Device, SetStablePowerState) + HRESULT ( STDMETHODCALLTYPE *SetStablePowerState )( + ID3D12Device14 * This, + BOOL Enable); + + DECLSPEC_XFGVIRT(ID3D12Device, CreateCommandSignature) + HRESULT ( STDMETHODCALLTYPE *CreateCommandSignature )( + ID3D12Device14 * This, + _In_ const D3D12_COMMAND_SIGNATURE_DESC *pDesc, + _In_opt_ ID3D12RootSignature *pRootSignature, + REFIID riid, + _COM_Outptr_opt_ void **ppvCommandSignature); + + DECLSPEC_XFGVIRT(ID3D12Device, GetResourceTiling) + void ( STDMETHODCALLTYPE *GetResourceTiling )( + ID3D12Device14 * This, + _In_ ID3D12Resource *pTiledResource, + _Out_opt_ UINT *pNumTilesForEntireResource, + _Out_opt_ D3D12_PACKED_MIP_INFO *pPackedMipDesc, + _Out_opt_ D3D12_TILE_SHAPE *pStandardTileShapeForNonPackedMips, + _Inout_opt_ UINT *pNumSubresourceTilings, + _In_ UINT FirstSubresourceTilingToGet, + _Out_writes_(*pNumSubresourceTilings) D3D12_SUBRESOURCE_TILING *pSubresourceTilingsForNonPackedMips); + + DECLSPEC_XFGVIRT(ID3D12Device, GetAdapterLuid) +#if !defined(_WIN32) + LUID ( STDMETHODCALLTYPE *GetAdapterLuid )( + ID3D12Device14 * This); + +#else + LUID *( STDMETHODCALLTYPE *GetAdapterLuid )( + ID3D12Device14 * This, + LUID * RetVal); + +#endif + + DECLSPEC_XFGVIRT(ID3D12Device1, CreatePipelineLibrary) + HRESULT ( STDMETHODCALLTYPE *CreatePipelineLibrary )( + ID3D12Device14 * This, + _In_reads_(BlobLength) const void *pLibraryBlob, + SIZE_T BlobLength, + REFIID riid, + _COM_Outptr_ void **ppPipelineLibrary); + + DECLSPEC_XFGVIRT(ID3D12Device1, SetEventOnMultipleFenceCompletion) + HRESULT ( STDMETHODCALLTYPE *SetEventOnMultipleFenceCompletion )( + ID3D12Device14 * This, + _In_reads_(NumFences) ID3D12Fence *const *ppFences, + _In_reads_(NumFences) const UINT64 *pFenceValues, + UINT NumFences, + D3D12_MULTIPLE_FENCE_WAIT_FLAGS Flags, + HANDLE hEvent); + + DECLSPEC_XFGVIRT(ID3D12Device1, SetResidencyPriority) + HRESULT ( STDMETHODCALLTYPE *SetResidencyPriority )( + ID3D12Device14 * This, + UINT NumObjects, + _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, + _In_reads_(NumObjects) const D3D12_RESIDENCY_PRIORITY *pPriorities); + + DECLSPEC_XFGVIRT(ID3D12Device2, CreatePipelineState) + HRESULT ( STDMETHODCALLTYPE *CreatePipelineState )( + ID3D12Device14 * This, + const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppPipelineState); + + DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromAddress) + HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress )( + ID3D12Device14 * This, + _In_ const void *pAddress, + REFIID riid, + _COM_Outptr_ void **ppvHeap); + + DECLSPEC_XFGVIRT(ID3D12Device3, OpenExistingHeapFromFileMapping) + HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromFileMapping )( + ID3D12Device14 * This, + _In_ HANDLE hFileMapping, + REFIID riid, + _COM_Outptr_ void **ppvHeap); + + DECLSPEC_XFGVIRT(ID3D12Device3, EnqueueMakeResident) + HRESULT ( STDMETHODCALLTYPE *EnqueueMakeResident )( + ID3D12Device14 * This, + D3D12_RESIDENCY_FLAGS Flags, + UINT NumObjects, + _In_reads_(NumObjects) ID3D12Pageable *const *ppObjects, + _In_ ID3D12Fence *pFenceToSignal, + UINT64 FenceValueToSignal); + + DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommandList1) + HRESULT ( STDMETHODCALLTYPE *CreateCommandList1 )( + ID3D12Device14 * This, + _In_ UINT nodeMask, + _In_ D3D12_COMMAND_LIST_TYPE type, + _In_ D3D12_COMMAND_LIST_FLAGS flags, + REFIID riid, + _COM_Outptr_ void **ppCommandList); + + DECLSPEC_XFGVIRT(ID3D12Device4, CreateProtectedResourceSession) + HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession )( + ID3D12Device14 * This, + _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppSession); + + DECLSPEC_XFGVIRT(ID3D12Device4, CreateCommittedResource1) + HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource1 )( + ID3D12Device14 * This, + _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, + D3D12_HEAP_FLAGS HeapFlags, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialResourceState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + REFIID riidResource, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device4, CreateHeap1) + HRESULT ( STDMETHODCALLTYPE *CreateHeap1 )( + ID3D12Device14 * This, + _In_ const D3D12_HEAP_DESC *pDesc, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + REFIID riid, + _COM_Outptr_opt_ void **ppvHeap); + + DECLSPEC_XFGVIRT(ID3D12Device4, CreateReservedResource1) + HRESULT ( STDMETHODCALLTYPE *CreateReservedResource1 )( + ID3D12Device14 * This, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_RESOURCE_STATES InitialState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device4, GetResourceAllocationInfo1) +#if !defined(_WIN32) + D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( + ID3D12Device14 * This, + UINT visibleMask, + UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, + _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); + +#else + D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo1 )( + ID3D12Device14 * This, + D3D12_RESOURCE_ALLOCATION_INFO * RetVal, + UINT visibleMask, + UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC *pResourceDescs, + _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); + +#endif + + DECLSPEC_XFGVIRT(ID3D12Device5, CreateLifetimeTracker) + HRESULT ( STDMETHODCALLTYPE *CreateLifetimeTracker )( + ID3D12Device14 * This, + _In_ ID3D12LifetimeOwner *pOwner, + REFIID riid, + _COM_Outptr_ void **ppvTracker); + + DECLSPEC_XFGVIRT(ID3D12Device5, RemoveDevice) + void ( STDMETHODCALLTYPE *RemoveDevice )( + ID3D12Device14 * This); + + DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommands) + HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommands )( + ID3D12Device14 * This, + _Inout_ UINT *pNumMetaCommands, + _Out_writes_opt_(*pNumMetaCommands) D3D12_META_COMMAND_DESC *pDescs); + + DECLSPEC_XFGVIRT(ID3D12Device5, EnumerateMetaCommandParameters) + HRESULT ( STDMETHODCALLTYPE *EnumerateMetaCommandParameters )( + ID3D12Device14 * This, + _In_ REFGUID CommandId, + _In_ D3D12_META_COMMAND_PARAMETER_STAGE Stage, + _Out_opt_ UINT *pTotalStructureSizeInBytes, + _Inout_ UINT *pParameterCount, + _Out_writes_opt_(*pParameterCount) D3D12_META_COMMAND_PARAMETER_DESC *pParameterDescs); + + DECLSPEC_XFGVIRT(ID3D12Device5, CreateMetaCommand) + HRESULT ( STDMETHODCALLTYPE *CreateMetaCommand )( + ID3D12Device14 * This, + _In_ REFGUID CommandId, + _In_ UINT NodeMask, + _In_reads_bytes_opt_(CreationParametersDataSizeInBytes) const void *pCreationParametersData, + _In_ SIZE_T CreationParametersDataSizeInBytes, + REFIID riid, + _COM_Outptr_ void **ppMetaCommand); + + DECLSPEC_XFGVIRT(ID3D12Device5, CreateStateObject) + HRESULT ( STDMETHODCALLTYPE *CreateStateObject )( + ID3D12Device14 * This, + const D3D12_STATE_OBJECT_DESC *pDesc, + REFIID riid, + _COM_Outptr_ void **ppStateObject); + + DECLSPEC_XFGVIRT(ID3D12Device5, GetRaytracingAccelerationStructurePrebuildInfo) + void ( STDMETHODCALLTYPE *GetRaytracingAccelerationStructurePrebuildInfo )( + ID3D12Device14 * This, + _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS *pDesc, + _Out_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO *pInfo); + + DECLSPEC_XFGVIRT(ID3D12Device5, CheckDriverMatchingIdentifier) + D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS ( STDMETHODCALLTYPE *CheckDriverMatchingIdentifier )( + ID3D12Device14 * This, + _In_ D3D12_SERIALIZED_DATA_TYPE SerializedDataType, + _In_ const D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER *pIdentifierToCheck); + + DECLSPEC_XFGVIRT(ID3D12Device6, SetBackgroundProcessingMode) + HRESULT ( STDMETHODCALLTYPE *SetBackgroundProcessingMode )( + ID3D12Device14 * This, + D3D12_BACKGROUND_PROCESSING_MODE Mode, + D3D12_MEASUREMENTS_ACTION MeasurementsAction, + _In_opt_ HANDLE hEventToSignalUponCompletion, + _Out_opt_ BOOL *pbFurtherMeasurementsDesired); + + DECLSPEC_XFGVIRT(ID3D12Device7, AddToStateObject) + HRESULT ( STDMETHODCALLTYPE *AddToStateObject )( + ID3D12Device14 * This, + const D3D12_STATE_OBJECT_DESC *pAddition, + ID3D12StateObject *pStateObjectToGrowFrom, + REFIID riid, + _COM_Outptr_ void **ppNewStateObject); + + DECLSPEC_XFGVIRT(ID3D12Device7, CreateProtectedResourceSession1) + HRESULT ( STDMETHODCALLTYPE *CreateProtectedResourceSession1 )( + ID3D12Device14 * This, + _In_ const D3D12_PROTECTED_RESOURCE_SESSION_DESC1 *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppSession); + + DECLSPEC_XFGVIRT(ID3D12Device8, GetResourceAllocationInfo2) +#if !defined(_WIN32) + D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( + ID3D12Device14 * This, + UINT visibleMask, + UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, + _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); + +#else + D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo2 )( + ID3D12Device14 * This, + D3D12_RESOURCE_ALLOCATION_INFO * RetVal, + UINT visibleMask, + UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, + _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); + +#endif + + DECLSPEC_XFGVIRT(ID3D12Device8, CreateCommittedResource2) + HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource2 )( + ID3D12Device14 * This, + _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, + D3D12_HEAP_FLAGS HeapFlags, + _In_ const D3D12_RESOURCE_DESC1 *pDesc, + D3D12_RESOURCE_STATES InitialResourceState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + REFIID riidResource, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device8, CreatePlacedResource1) + HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource1 )( + ID3D12Device14 * This, + _In_ ID3D12Heap *pHeap, + UINT64 HeapOffset, + _In_ const D3D12_RESOURCE_DESC1 *pDesc, + D3D12_RESOURCE_STATES InitialState, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device8, CreateSamplerFeedbackUnorderedAccessView) + void ( STDMETHODCALLTYPE *CreateSamplerFeedbackUnorderedAccessView )( + ID3D12Device14 * This, + _In_opt_ ID3D12Resource *pTargetedResource, + _In_opt_ ID3D12Resource *pFeedbackResource, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + DECLSPEC_XFGVIRT(ID3D12Device8, GetCopyableFootprints1) + void ( STDMETHODCALLTYPE *GetCopyableFootprints1 )( + ID3D12Device14 * This, + _In_ const D3D12_RESOURCE_DESC1 *pResourceDesc, + _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource, + _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources, + UINT64 BaseOffset, + _Out_writes_opt_(NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts, + _Out_writes_opt_(NumSubresources) UINT *pNumRows, + _Out_writes_opt_(NumSubresources) UINT64 *pRowSizeInBytes, + _Out_opt_ UINT64 *pTotalBytes); + + DECLSPEC_XFGVIRT(ID3D12Device9, CreateShaderCacheSession) + HRESULT ( STDMETHODCALLTYPE *CreateShaderCacheSession )( + ID3D12Device14 * This, + _In_ const D3D12_SHADER_CACHE_SESSION_DESC *pDesc, + REFIID riid, + _COM_Outptr_opt_ void **ppvSession); + + DECLSPEC_XFGVIRT(ID3D12Device9, ShaderCacheControl) + HRESULT ( STDMETHODCALLTYPE *ShaderCacheControl )( + ID3D12Device14 * This, + D3D12_SHADER_CACHE_KIND_FLAGS Kinds, + D3D12_SHADER_CACHE_CONTROL_FLAGS Control); + + DECLSPEC_XFGVIRT(ID3D12Device9, CreateCommandQueue1) + HRESULT ( STDMETHODCALLTYPE *CreateCommandQueue1 )( + ID3D12Device14 * This, + _In_ const D3D12_COMMAND_QUEUE_DESC *pDesc, + REFIID CreatorID, + REFIID riid, + _COM_Outptr_ void **ppCommandQueue); + + DECLSPEC_XFGVIRT(ID3D12Device10, CreateCommittedResource3) + HRESULT ( STDMETHODCALLTYPE *CreateCommittedResource3 )( + ID3D12Device14 * This, + _In_ const D3D12_HEAP_PROPERTIES *pHeapProperties, + D3D12_HEAP_FLAGS HeapFlags, + _In_ const D3D12_RESOURCE_DESC1 *pDesc, + D3D12_BARRIER_LAYOUT InitialLayout, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + UINT32 NumCastableFormats, + _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, + REFIID riidResource, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device10, CreatePlacedResource2) + HRESULT ( STDMETHODCALLTYPE *CreatePlacedResource2 )( + ID3D12Device14 * This, + _In_ ID3D12Heap *pHeap, + UINT64 HeapOffset, + _In_ const D3D12_RESOURCE_DESC1 *pDesc, + D3D12_BARRIER_LAYOUT InitialLayout, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + UINT32 NumCastableFormats, + _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device10, CreateReservedResource2) + HRESULT ( STDMETHODCALLTYPE *CreateReservedResource2 )( + ID3D12Device14 * This, + _In_ const D3D12_RESOURCE_DESC *pDesc, + D3D12_BARRIER_LAYOUT InitialLayout, + _In_opt_ const D3D12_CLEAR_VALUE *pOptimizedClearValue, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedSession, + UINT32 NumCastableFormats, + _In_opt_count_(NumCastableFormats) const DXGI_FORMAT *pCastableFormats, + REFIID riid, + _COM_Outptr_opt_ void **ppvResource); + + DECLSPEC_XFGVIRT(ID3D12Device11, CreateSampler2) + void ( STDMETHODCALLTYPE *CreateSampler2 )( + ID3D12Device14 * This, + _In_ const D3D12_SAMPLER_DESC2 *pDesc, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor); + + DECLSPEC_XFGVIRT(ID3D12Device12, GetResourceAllocationInfo3) +#if !defined(_WIN32) + D3D12_RESOURCE_ALLOCATION_INFO ( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( + ID3D12Device14 * This, + UINT visibleMask, + UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, + _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, + _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, + _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); + +#else + D3D12_RESOURCE_ALLOCATION_INFO *( STDMETHODCALLTYPE *GetResourceAllocationInfo3 )( + ID3D12Device14 * This, + D3D12_RESOURCE_ALLOCATION_INFO * RetVal, + UINT visibleMask, + UINT numResourceDescs, + _In_reads_(numResourceDescs) const D3D12_RESOURCE_DESC1 *pResourceDescs, + _In_opt_count_(numResourceDescs) const UINT32 *pNumCastableFormats, + _In_opt_count_(numResourceDescs) const DXGI_FORMAT *const *ppCastableFormats, + _Out_writes_opt_(numResourceDescs) D3D12_RESOURCE_ALLOCATION_INFO1 *pResourceAllocationInfo1); + +#endif + + DECLSPEC_XFGVIRT(ID3D12Device13, OpenExistingHeapFromAddress1) + HRESULT ( STDMETHODCALLTYPE *OpenExistingHeapFromAddress1 )( + ID3D12Device14 * This, + _In_ const void *pAddress, + SIZE_T size, + REFIID riid, + _COM_Outptr_ void **ppvHeap); + + DECLSPEC_XFGVIRT(ID3D12Device14, CreateRootSignatureFromSubobjectInLibrary) + HRESULT ( STDMETHODCALLTYPE *CreateRootSignatureFromSubobjectInLibrary )( + ID3D12Device14 * This, + _In_ UINT nodeMask, + _In_reads_(blobLengthInBytes) const void *pLibraryBlob, + _In_ SIZE_T blobLengthInBytes, + _In_opt_ LPCWSTR subobjectName, + REFIID riid, + _COM_Outptr_ void **ppvRootSignature); + + END_INTERFACE + } ID3D12Device14Vtbl; + + interface ID3D12Device14 + { + CONST_VTBL struct ID3D12Device14Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12Device14_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12Device14_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12Device14_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12Device14_GetPrivateData(This,guid,pDataSize,pData) \ + ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) + +#define ID3D12Device14_SetPrivateData(This,guid,DataSize,pData) \ + ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) + +#define ID3D12Device14_SetPrivateDataInterface(This,guid,pData) \ + ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) + +#define ID3D12Device14_SetName(This,Name) \ + ( (This)->lpVtbl -> SetName(This,Name) ) + + +#define ID3D12Device14_GetNodeCount(This) \ + ( (This)->lpVtbl -> GetNodeCount(This) ) + +#define ID3D12Device14_CreateCommandQueue(This,pDesc,riid,ppCommandQueue) \ + ( (This)->lpVtbl -> CreateCommandQueue(This,pDesc,riid,ppCommandQueue) ) + +#define ID3D12Device14_CreateCommandAllocator(This,type,riid,ppCommandAllocator) \ + ( (This)->lpVtbl -> CreateCommandAllocator(This,type,riid,ppCommandAllocator) ) + +#define ID3D12Device14_CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) \ + ( (This)->lpVtbl -> CreateGraphicsPipelineState(This,pDesc,riid,ppPipelineState) ) + +#define ID3D12Device14_CreateComputePipelineState(This,pDesc,riid,ppPipelineState) \ + ( (This)->lpVtbl -> CreateComputePipelineState(This,pDesc,riid,ppPipelineState) ) + +#define ID3D12Device14_CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) \ + ( (This)->lpVtbl -> CreateCommandList(This,nodeMask,type,pCommandAllocator,pInitialState,riid,ppCommandList) ) + +#define ID3D12Device14_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) \ + ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) + +#define ID3D12Device14_CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) \ + ( (This)->lpVtbl -> CreateDescriptorHeap(This,pDescriptorHeapDesc,riid,ppvHeap) ) + +#define ID3D12Device14_GetDescriptorHandleIncrementSize(This,DescriptorHeapType) \ + ( (This)->lpVtbl -> GetDescriptorHandleIncrementSize(This,DescriptorHeapType) ) + +#define ID3D12Device14_CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) \ + ( (This)->lpVtbl -> CreateRootSignature(This,nodeMask,pBlobWithRootSignature,blobLengthInBytes,riid,ppvRootSignature) ) + +#define ID3D12Device14_CreateConstantBufferView(This,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateConstantBufferView(This,pDesc,DestDescriptor) ) + +#define ID3D12Device14_CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,DestDescriptor) ) + +#define ID3D12Device14_CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pCounterResource,pDesc,DestDescriptor) ) + +#define ID3D12Device14_CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,DestDescriptor) ) + +#define ID3D12Device14_CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,DestDescriptor) ) + +#define ID3D12Device14_CreateSampler(This,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateSampler(This,pDesc,DestDescriptor) ) + +#define ID3D12Device14_CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) \ + ( (This)->lpVtbl -> CopyDescriptors(This,NumDestDescriptorRanges,pDestDescriptorRangeStarts,pDestDescriptorRangeSizes,NumSrcDescriptorRanges,pSrcDescriptorRangeStarts,pSrcDescriptorRangeSizes,DescriptorHeapsType) ) + +#define ID3D12Device14_CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) \ + ( (This)->lpVtbl -> CopyDescriptorsSimple(This,NumDescriptors,DestDescriptorRangeStart,SrcDescriptorRangeStart,DescriptorHeapsType) ) +#if !defined(_WIN32) + +#define ID3D12Device14_GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo(This,visibleMask,numResourceDescs,pResourceDescs) ) +#else +#define ID3D12Device14_GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo(This,RetVal,visibleMask,numResourceDescs,pResourceDescs) ) +#endif +#if !defined(_WIN32) + +#define ID3D12Device14_GetCustomHeapProperties(This,nodeMask,heapType) \ + ( (This)->lpVtbl -> GetCustomHeapProperties(This,nodeMask,heapType) ) +#else +#define ID3D12Device14_GetCustomHeapProperties(This,RetVal,nodeMask,heapType) \ + ( (This)->lpVtbl -> GetCustomHeapProperties(This,RetVal,nodeMask,heapType) ) +#endif + +#define ID3D12Device14_CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) \ + ( (This)->lpVtbl -> CreateCommittedResource(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,riidResource,ppvResource) ) + +#define ID3D12Device14_CreateHeap(This,pDesc,riid,ppvHeap) \ + ( (This)->lpVtbl -> CreateHeap(This,pDesc,riid,ppvHeap) ) + +#define ID3D12Device14_CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ + ( (This)->lpVtbl -> CreatePlacedResource(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) + +#define ID3D12Device14_CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ + ( (This)->lpVtbl -> CreateReservedResource(This,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) + +#define ID3D12Device14_CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) \ + ( (This)->lpVtbl -> CreateSharedHandle(This,pObject,pAttributes,Access,Name,pHandle) ) + +#define ID3D12Device14_OpenSharedHandle(This,NTHandle,riid,ppvObj) \ + ( (This)->lpVtbl -> OpenSharedHandle(This,NTHandle,riid,ppvObj) ) + +#define ID3D12Device14_OpenSharedHandleByName(This,Name,Access,pNTHandle) \ + ( (This)->lpVtbl -> OpenSharedHandleByName(This,Name,Access,pNTHandle) ) + +#define ID3D12Device14_MakeResident(This,NumObjects,ppObjects) \ + ( (This)->lpVtbl -> MakeResident(This,NumObjects,ppObjects) ) + +#define ID3D12Device14_Evict(This,NumObjects,ppObjects) \ + ( (This)->lpVtbl -> Evict(This,NumObjects,ppObjects) ) + +#define ID3D12Device14_CreateFence(This,InitialValue,Flags,riid,ppFence) \ + ( (This)->lpVtbl -> CreateFence(This,InitialValue,Flags,riid,ppFence) ) + +#define ID3D12Device14_GetDeviceRemovedReason(This) \ + ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) + +#define ID3D12Device14_GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ + ( (This)->lpVtbl -> GetCopyableFootprints(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) + +#define ID3D12Device14_CreateQueryHeap(This,pDesc,riid,ppvHeap) \ + ( (This)->lpVtbl -> CreateQueryHeap(This,pDesc,riid,ppvHeap) ) + +#define ID3D12Device14_SetStablePowerState(This,Enable) \ + ( (This)->lpVtbl -> SetStablePowerState(This,Enable) ) + +#define ID3D12Device14_CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) \ + ( (This)->lpVtbl -> CreateCommandSignature(This,pDesc,pRootSignature,riid,ppvCommandSignature) ) + +#define ID3D12Device14_GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) \ + ( (This)->lpVtbl -> GetResourceTiling(This,pTiledResource,pNumTilesForEntireResource,pPackedMipDesc,pStandardTileShapeForNonPackedMips,pNumSubresourceTilings,FirstSubresourceTilingToGet,pSubresourceTilingsForNonPackedMips) ) +#if !defined(_WIN32) + +#define ID3D12Device14_GetAdapterLuid(This) \ + ( (This)->lpVtbl -> GetAdapterLuid(This) ) +#else +#define ID3D12Device14_GetAdapterLuid(This,RetVal) \ + ( (This)->lpVtbl -> GetAdapterLuid(This,RetVal) ) +#endif + + +#define ID3D12Device14_CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) \ + ( (This)->lpVtbl -> CreatePipelineLibrary(This,pLibraryBlob,BlobLength,riid,ppPipelineLibrary) ) + +#define ID3D12Device14_SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) \ + ( (This)->lpVtbl -> SetEventOnMultipleFenceCompletion(This,ppFences,pFenceValues,NumFences,Flags,hEvent) ) + +#define ID3D12Device14_SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) \ + ( (This)->lpVtbl -> SetResidencyPriority(This,NumObjects,ppObjects,pPriorities) ) + + +#define ID3D12Device14_CreatePipelineState(This,pDesc,riid,ppPipelineState) \ + ( (This)->lpVtbl -> CreatePipelineState(This,pDesc,riid,ppPipelineState) ) + + +#define ID3D12Device14_OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) \ + ( (This)->lpVtbl -> OpenExistingHeapFromAddress(This,pAddress,riid,ppvHeap) ) + +#define ID3D12Device14_OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) \ + ( (This)->lpVtbl -> OpenExistingHeapFromFileMapping(This,hFileMapping,riid,ppvHeap) ) + +#define ID3D12Device14_EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) \ + ( (This)->lpVtbl -> EnqueueMakeResident(This,Flags,NumObjects,ppObjects,pFenceToSignal,FenceValueToSignal) ) + + +#define ID3D12Device14_CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) \ + ( (This)->lpVtbl -> CreateCommandList1(This,nodeMask,type,flags,riid,ppCommandList) ) + +#define ID3D12Device14_CreateProtectedResourceSession(This,pDesc,riid,ppSession) \ + ( (This)->lpVtbl -> CreateProtectedResourceSession(This,pDesc,riid,ppSession) ) + +#define ID3D12Device14_CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ + ( (This)->lpVtbl -> CreateCommittedResource1(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) + +#define ID3D12Device14_CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) \ + ( (This)->lpVtbl -> CreateHeap1(This,pDesc,pProtectedSession,riid,ppvHeap) ) + +#define ID3D12Device14_CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) \ + ( (This)->lpVtbl -> CreateReservedResource1(This,pDesc,InitialState,pOptimizedClearValue,pProtectedSession,riid,ppvResource) ) +#if !defined(_WIN32) + +#define ID3D12Device14_GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) +#else +#define ID3D12Device14_GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo1(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) +#endif + + +#define ID3D12Device14_CreateLifetimeTracker(This,pOwner,riid,ppvTracker) \ + ( (This)->lpVtbl -> CreateLifetimeTracker(This,pOwner,riid,ppvTracker) ) + +#define ID3D12Device14_RemoveDevice(This) \ + ( (This)->lpVtbl -> RemoveDevice(This) ) + +#define ID3D12Device14_EnumerateMetaCommands(This,pNumMetaCommands,pDescs) \ + ( (This)->lpVtbl -> EnumerateMetaCommands(This,pNumMetaCommands,pDescs) ) + +#define ID3D12Device14_EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) \ + ( (This)->lpVtbl -> EnumerateMetaCommandParameters(This,CommandId,Stage,pTotalStructureSizeInBytes,pParameterCount,pParameterDescs) ) + +#define ID3D12Device14_CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) \ + ( (This)->lpVtbl -> CreateMetaCommand(This,CommandId,NodeMask,pCreationParametersData,CreationParametersDataSizeInBytes,riid,ppMetaCommand) ) + +#define ID3D12Device14_CreateStateObject(This,pDesc,riid,ppStateObject) \ + ( (This)->lpVtbl -> CreateStateObject(This,pDesc,riid,ppStateObject) ) + +#define ID3D12Device14_GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) \ + ( (This)->lpVtbl -> GetRaytracingAccelerationStructurePrebuildInfo(This,pDesc,pInfo) ) + +#define ID3D12Device14_CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) \ + ( (This)->lpVtbl -> CheckDriverMatchingIdentifier(This,SerializedDataType,pIdentifierToCheck) ) + + +#define ID3D12Device14_SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) \ + ( (This)->lpVtbl -> SetBackgroundProcessingMode(This,Mode,MeasurementsAction,hEventToSignalUponCompletion,pbFurtherMeasurementsDesired) ) + + +#define ID3D12Device14_AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) \ + ( (This)->lpVtbl -> AddToStateObject(This,pAddition,pStateObjectToGrowFrom,riid,ppNewStateObject) ) + +#define ID3D12Device14_CreateProtectedResourceSession1(This,pDesc,riid,ppSession) \ + ( (This)->lpVtbl -> CreateProtectedResourceSession1(This,pDesc,riid,ppSession) ) + +#if !defined(_WIN32) + +#define ID3D12Device14_GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) +#else +#define ID3D12Device14_GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo2(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pResourceAllocationInfo1) ) +#endif + +#define ID3D12Device14_CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) \ + ( (This)->lpVtbl -> CreateCommittedResource2(This,pHeapProperties,HeapFlags,pDesc,InitialResourceState,pOptimizedClearValue,pProtectedSession,riidResource,ppvResource) ) + +#define ID3D12Device14_CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) \ + ( (This)->lpVtbl -> CreatePlacedResource1(This,pHeap,HeapOffset,pDesc,InitialState,pOptimizedClearValue,riid,ppvResource) ) + +#define ID3D12Device14_CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) \ + ( (This)->lpVtbl -> CreateSamplerFeedbackUnorderedAccessView(This,pTargetedResource,pFeedbackResource,DestDescriptor) ) + +#define ID3D12Device14_GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) \ + ( (This)->lpVtbl -> GetCopyableFootprints1(This,pResourceDesc,FirstSubresource,NumSubresources,BaseOffset,pLayouts,pNumRows,pRowSizeInBytes,pTotalBytes) ) + + +#define ID3D12Device14_CreateShaderCacheSession(This,pDesc,riid,ppvSession) \ + ( (This)->lpVtbl -> CreateShaderCacheSession(This,pDesc,riid,ppvSession) ) + +#define ID3D12Device14_ShaderCacheControl(This,Kinds,Control) \ + ( (This)->lpVtbl -> ShaderCacheControl(This,Kinds,Control) ) + +#define ID3D12Device14_CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) \ + ( (This)->lpVtbl -> CreateCommandQueue1(This,pDesc,CreatorID,riid,ppCommandQueue) ) + + +#define ID3D12Device14_CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) \ + ( (This)->lpVtbl -> CreateCommittedResource3(This,pHeapProperties,HeapFlags,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riidResource,ppvResource) ) + +#define ID3D12Device14_CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) \ + ( (This)->lpVtbl -> CreatePlacedResource2(This,pHeap,HeapOffset,pDesc,InitialLayout,pOptimizedClearValue,NumCastableFormats,pCastableFormats,riid,ppvResource) ) + +#define ID3D12Device14_CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) \ + ( (This)->lpVtbl -> CreateReservedResource2(This,pDesc,InitialLayout,pOptimizedClearValue,pProtectedSession,NumCastableFormats,pCastableFormats,riid,ppvResource) ) + + +#define ID3D12Device14_CreateSampler2(This,pDesc,DestDescriptor) \ + ( (This)->lpVtbl -> CreateSampler2(This,pDesc,DestDescriptor) ) + +#if !defined(_WIN32) + +#define ID3D12Device14_GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) +#else +#define ID3D12Device14_GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) \ + ( (This)->lpVtbl -> GetResourceAllocationInfo3(This,RetVal,visibleMask,numResourceDescs,pResourceDescs,pNumCastableFormats,ppCastableFormats,pResourceAllocationInfo1) ) +#endif + + +#define ID3D12Device14_OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap) \ + ( (This)->lpVtbl -> OpenExistingHeapFromAddress1(This,pAddress,size,riid,ppvHeap) ) + + +#define ID3D12Device14_CreateRootSignatureFromSubobjectInLibrary(This,nodeMask,pLibraryBlob,blobLengthInBytes,subobjectName,riid,ppvRootSignature) \ + ( (This)->lpVtbl -> CreateRootSignatureFromSubobjectInLibrary(This,nodeMask,pLibraryBlob,blobLengthInBytes,subobjectName,riid,ppvRootSignature) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12Device14_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0063 */ +/* [local] */ + +typedef union D3D12_VERSION_NUMBER + { + UINT64 Version; + UINT16 VersionParts[ 4 ]; + } D3D12_VERSION_NUMBER; + +typedef struct D3D12_FEATURE_DATA_SHADERCACHE_ABI_SUPPORT + { + WCHAR szAdapterFamily[ 128 ]; + UINT64 MinimumABISupportVersion; + UINT64 MaximumABISupportVersion; + D3D12_VERSION_NUMBER CompilerVersion; + D3D12_VERSION_NUMBER ApplicationProfileVersion; + } D3D12_FEATURE_DATA_SHADERCACHE_ABI_SUPPORT; + +typedef void ( __stdcall *D3D12PipelineStateFunc )( + _In_reads_bytes_(KeySize) const void *pKey, + UINT KeySize, + UINT Version, + const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc, + _Inout_opt_ void *pContext); + +typedef void ( __stdcall *D3D12StateObjectFunc )( + _In_reads_bytes_(KeySize) const void *pKey, + UINT KeySize, + UINT Version, + const D3D12_STATE_OBJECT_DESC *pDesc, + _In_reads_bytes_(ParentKeySize) const void *pParentKey, + UINT ParentKeySize, + _Inout_opt_ void *pContext); + +typedef struct D3D12_APPLICATION_DESC + { + LPCWSTR pExeFilename; + LPCWSTR pName; + D3D12_VERSION_NUMBER Version; + LPCWSTR pEngineName; + D3D12_VERSION_NUMBER EngineVersion; + } D3D12_APPLICATION_DESC; + +typedef void ( __stdcall *D3D12ApplicationDescFunc )( + _In_ const D3D12_APPLICATION_DESC *pApplicationDesc, + _Inout_opt_ void *pContext); + +typedef struct D3D12_EXISTING_COLLECTION_BY_KEY_DESC + { + _Field_size_bytes_full_(KeySize) const void *pKey; + UINT KeySize; + UINT NumExports; + _In_reads_(NumExports) const D3D12_EXPORT_DESC *pExports; + } D3D12_EXISTING_COLLECTION_BY_KEY_DESC; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0063_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0063_v0_0_s_ifspec; + +#ifndef __ID3D12StateObjectDatabase_INTERFACE_DEFINED__ +#define __ID3D12StateObjectDatabase_INTERFACE_DEFINED__ + +/* interface ID3D12StateObjectDatabase */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12StateObjectDatabase; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c56060b7-b5fc-4135-98e0-a1e9997eace0") + ID3D12StateObjectDatabase : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE SetApplicationDesc( + _In_ const D3D12_APPLICATION_DESC *pApplicationDesc) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetApplicationDesc( + _In_ D3D12ApplicationDescFunc CallbackFunc, + _Inout_opt_ void *pContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE StorePipelineStateDesc( + _In_reads_(KeySize) const void *pKey, + UINT KeySize, + UINT Version, + _In_ const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindPipelineStateDesc( + _In_reads_(KeySize) const void *pKey, + UINT KeySize, + _In_ D3D12PipelineStateFunc CallbackFunc, + _Inout_opt_ void *pContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE StoreStateObjectDesc( + _In_reads_(KeySize) const void *pKey, + UINT KeySize, + UINT Version, + _In_ const D3D12_STATE_OBJECT_DESC *pDesc, + _In_reads_opt_(StateObjectToGrowFromKeySize) const void *pStateObjectToGrowFromKey, + UINT StateObjectToGrowFromKeySize) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindStateObjectDesc( + _In_reads_(keySize) const void *pKey, + UINT KeySize, + D3D12StateObjectFunc CallbackFunc, + _Inout_opt_ void *pContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindObjectVersion( + _In_reads_(keySize) const void *pKey, + UINT KeySize, + _Out_ UINT *pVersion) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12StateObjectDatabaseVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12StateObjectDatabase * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12StateObjectDatabase * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12StateObjectDatabase * This); + + DECLSPEC_XFGVIRT(ID3D12StateObjectDatabase, SetApplicationDesc) + HRESULT ( STDMETHODCALLTYPE *SetApplicationDesc )( + ID3D12StateObjectDatabase * This, + _In_ const D3D12_APPLICATION_DESC *pApplicationDesc); + + DECLSPEC_XFGVIRT(ID3D12StateObjectDatabase, GetApplicationDesc) + HRESULT ( STDMETHODCALLTYPE *GetApplicationDesc )( + ID3D12StateObjectDatabase * This, + _In_ D3D12ApplicationDescFunc CallbackFunc, + _Inout_opt_ void *pContext); + + DECLSPEC_XFGVIRT(ID3D12StateObjectDatabase, StorePipelineStateDesc) + HRESULT ( STDMETHODCALLTYPE *StorePipelineStateDesc )( + ID3D12StateObjectDatabase * This, + _In_reads_(KeySize) const void *pKey, + UINT KeySize, + UINT Version, + _In_ const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc); + + DECLSPEC_XFGVIRT(ID3D12StateObjectDatabase, FindPipelineStateDesc) + HRESULT ( STDMETHODCALLTYPE *FindPipelineStateDesc )( + ID3D12StateObjectDatabase * This, + _In_reads_(KeySize) const void *pKey, + UINT KeySize, + _In_ D3D12PipelineStateFunc CallbackFunc, + _Inout_opt_ void *pContext); + + DECLSPEC_XFGVIRT(ID3D12StateObjectDatabase, StoreStateObjectDesc) + HRESULT ( STDMETHODCALLTYPE *StoreStateObjectDesc )( + ID3D12StateObjectDatabase * This, + _In_reads_(KeySize) const void *pKey, + UINT KeySize, + UINT Version, + _In_ const D3D12_STATE_OBJECT_DESC *pDesc, + _In_reads_opt_(StateObjectToGrowFromKeySize) const void *pStateObjectToGrowFromKey, + UINT StateObjectToGrowFromKeySize); + + DECLSPEC_XFGVIRT(ID3D12StateObjectDatabase, FindStateObjectDesc) + HRESULT ( STDMETHODCALLTYPE *FindStateObjectDesc )( + ID3D12StateObjectDatabase * This, + _In_reads_(keySize) const void *pKey, + UINT KeySize, + D3D12StateObjectFunc CallbackFunc, + _Inout_opt_ void *pContext); + + DECLSPEC_XFGVIRT(ID3D12StateObjectDatabase, FindObjectVersion) + HRESULT ( STDMETHODCALLTYPE *FindObjectVersion )( + ID3D12StateObjectDatabase * This, + _In_reads_(keySize) const void *pKey, + UINT KeySize, + _Out_ UINT *pVersion); + + END_INTERFACE + } ID3D12StateObjectDatabaseVtbl; + + interface ID3D12StateObjectDatabase + { + CONST_VTBL struct ID3D12StateObjectDatabaseVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12StateObjectDatabase_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12StateObjectDatabase_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12StateObjectDatabase_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12StateObjectDatabase_SetApplicationDesc(This,pApplicationDesc) \ + ( (This)->lpVtbl -> SetApplicationDesc(This,pApplicationDesc) ) + +#define ID3D12StateObjectDatabase_GetApplicationDesc(This,CallbackFunc,pContext) \ + ( (This)->lpVtbl -> GetApplicationDesc(This,CallbackFunc,pContext) ) + +#define ID3D12StateObjectDatabase_StorePipelineStateDesc(This,pKey,KeySize,Version,pDesc) \ + ( (This)->lpVtbl -> StorePipelineStateDesc(This,pKey,KeySize,Version,pDesc) ) + +#define ID3D12StateObjectDatabase_FindPipelineStateDesc(This,pKey,KeySize,CallbackFunc,pContext) \ + ( (This)->lpVtbl -> FindPipelineStateDesc(This,pKey,KeySize,CallbackFunc,pContext) ) + +#define ID3D12StateObjectDatabase_StoreStateObjectDesc(This,pKey,KeySize,Version,pDesc,pStateObjectToGrowFromKey,StateObjectToGrowFromKeySize) \ + ( (This)->lpVtbl -> StoreStateObjectDesc(This,pKey,KeySize,Version,pDesc,pStateObjectToGrowFromKey,StateObjectToGrowFromKeySize) ) + +#define ID3D12StateObjectDatabase_FindStateObjectDesc(This,pKey,KeySize,CallbackFunc,pContext) \ + ( (This)->lpVtbl -> FindStateObjectDesc(This,pKey,KeySize,CallbackFunc,pContext) ) + +#define ID3D12StateObjectDatabase_FindObjectVersion(This,pKey,KeySize,pVersion) \ + ( (This)->lpVtbl -> FindObjectVersion(This,pKey,KeySize,pVersion) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12StateObjectDatabase_INTERFACE_DEFINED__ */ + + #ifndef __ID3D12VirtualizationGuestDevice_INTERFACE_DEFINED__ #define __ID3D12VirtualizationGuestDevice_INTERFACE_DEFINED__ @@ -26796,7 +29849,519 @@ EXTERN_C const IID IID_ID3D12Tools; #endif /* __ID3D12Tools_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0059 */ +#ifndef __ID3D12Tools1_INTERFACE_DEFINED__ +#define __ID3D12Tools1_INTERFACE_DEFINED__ + +/* interface ID3D12Tools1 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12Tools1; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e4fbc019-dd3c-43e1-8f32-7f649575f0a0") + ID3D12Tools1 : public ID3D12Tools + { + public: + virtual HRESULT STDMETHODCALLTYPE ReserveGPUVARangesAtCreate( + _In_reads_(uiNumRanges) D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges, + _In_ UINT uiNumRanges) = 0; + + virtual void STDMETHODCALLTYPE ClearReservedGPUVARangesList( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12Tools1Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12Tools1 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12Tools1 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12Tools1 * This); + + DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation) + void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( + ID3D12Tools1 * This, + BOOL bEnable); + + DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled) + BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( + ID3D12Tools1 * This); + + DECLSPEC_XFGVIRT(ID3D12Tools1, ReserveGPUVARangesAtCreate) + HRESULT ( STDMETHODCALLTYPE *ReserveGPUVARangesAtCreate )( + ID3D12Tools1 * This, + _In_reads_(uiNumRanges) D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges, + _In_ UINT uiNumRanges); + + DECLSPEC_XFGVIRT(ID3D12Tools1, ClearReservedGPUVARangesList) + void ( STDMETHODCALLTYPE *ClearReservedGPUVARangesList )( + ID3D12Tools1 * This); + + END_INTERFACE + } ID3D12Tools1Vtbl; + + interface ID3D12Tools1 + { + CONST_VTBL struct ID3D12Tools1Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12Tools1_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12Tools1_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12Tools1_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12Tools1_EnableShaderInstrumentation(This,bEnable) \ + ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) + +#define ID3D12Tools1_ShaderInstrumentationEnabled(This) \ + ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) + + +#define ID3D12Tools1_ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) \ + ( (This)->lpVtbl -> ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) ) + +#define ID3D12Tools1_ClearReservedGPUVARangesList(This) \ + ( (This)->lpVtbl -> ClearReservedGPUVARangesList(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12Tools1_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12Tools2_INTERFACE_DEFINED__ +#define __ID3D12Tools2_INTERFACE_DEFINED__ + +/* interface ID3D12Tools2 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12Tools2; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("01d393c5-c9b0-42a1-958c-c26b02d4d097") + ID3D12Tools2 : public ID3D12Tools1 + { + public: + virtual HRESULT STDMETHODCALLTYPE SetApplicationSpecificDriverState( + _In_ IUnknown *pAdapter, + _In_opt_ ID3DBlob *pBlob) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12Tools2Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12Tools2 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12Tools2 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12Tools2 * This); + + DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation) + void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( + ID3D12Tools2 * This, + BOOL bEnable); + + DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled) + BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( + ID3D12Tools2 * This); + + DECLSPEC_XFGVIRT(ID3D12Tools1, ReserveGPUVARangesAtCreate) + HRESULT ( STDMETHODCALLTYPE *ReserveGPUVARangesAtCreate )( + ID3D12Tools2 * This, + _In_reads_(uiNumRanges) D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges, + _In_ UINT uiNumRanges); + + DECLSPEC_XFGVIRT(ID3D12Tools1, ClearReservedGPUVARangesList) + void ( STDMETHODCALLTYPE *ClearReservedGPUVARangesList )( + ID3D12Tools2 * This); + + DECLSPEC_XFGVIRT(ID3D12Tools2, SetApplicationSpecificDriverState) + HRESULT ( STDMETHODCALLTYPE *SetApplicationSpecificDriverState )( + ID3D12Tools2 * This, + _In_ IUnknown *pAdapter, + _In_opt_ ID3DBlob *pBlob); + + END_INTERFACE + } ID3D12Tools2Vtbl; + + interface ID3D12Tools2 + { + CONST_VTBL struct ID3D12Tools2Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12Tools2_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12Tools2_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12Tools2_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12Tools2_EnableShaderInstrumentation(This,bEnable) \ + ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) + +#define ID3D12Tools2_ShaderInstrumentationEnabled(This) \ + ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) + + +#define ID3D12Tools2_ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) \ + ( (This)->lpVtbl -> ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) ) + +#define ID3D12Tools2_ClearReservedGPUVARangesList(This) \ + ( (This)->lpVtbl -> ClearReservedGPUVARangesList(This) ) + + +#define ID3D12Tools2_SetApplicationSpecificDriverState(This,pAdapter,pBlob) \ + ( (This)->lpVtbl -> SetApplicationSpecificDriverState(This,pAdapter,pBlob) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12Tools2_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12PageableTools_INTERFACE_DEFINED__ +#define __ID3D12PageableTools_INTERFACE_DEFINED__ + +/* interface ID3D12PageableTools */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12PageableTools; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8f1359db-d8d1-42f9-b5cf-79f4cbad0d3d") + ID3D12PageableTools : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetAllocation( + _Inout_ D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pAllocation) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12PageableToolsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12PageableTools * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12PageableTools * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12PageableTools * This); + + DECLSPEC_XFGVIRT(ID3D12PageableTools, GetAllocation) + HRESULT ( STDMETHODCALLTYPE *GetAllocation )( + ID3D12PageableTools * This, + _Inout_ D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pAllocation); + + END_INTERFACE + } ID3D12PageableToolsVtbl; + + interface ID3D12PageableTools + { + CONST_VTBL struct ID3D12PageableToolsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12PageableTools_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12PageableTools_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12PageableTools_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12PageableTools_GetAllocation(This,pAllocation) \ + ( (This)->lpVtbl -> GetAllocation(This,pAllocation) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12PageableTools_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12DeviceTools_INTERFACE_DEFINED__ +#define __ID3D12DeviceTools_INTERFACE_DEFINED__ + +/* interface ID3D12DeviceTools */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12DeviceTools; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("2ea68e9c-19c3-4e47-a109-6cdadff0aca9") + ID3D12DeviceTools : public IUnknown + { + public: + virtual void STDMETHODCALLTYPE SetNextAllocationAddress( + _In_ D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12DeviceToolsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12DeviceTools * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12DeviceTools * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12DeviceTools * This); + + DECLSPEC_XFGVIRT(ID3D12DeviceTools, SetNextAllocationAddress) + void ( STDMETHODCALLTYPE *SetNextAllocationAddress )( + ID3D12DeviceTools * This, + _In_ D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress); + + END_INTERFACE + } ID3D12DeviceToolsVtbl; + + interface ID3D12DeviceTools + { + CONST_VTBL struct ID3D12DeviceToolsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12DeviceTools_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12DeviceTools_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12DeviceTools_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12DeviceTools_SetNextAllocationAddress(This,nextAllocationVirtualAddress) \ + ( (This)->lpVtbl -> SetNextAllocationAddress(This,nextAllocationVirtualAddress) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12DeviceTools_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0070 */ +/* [local] */ + +typedef +enum D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS + { + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN = 1, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED = 2, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED = 3, + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED = 4 + } D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_s_ifspec; + +#ifndef __ID3D12DeviceTools1_INTERFACE_DEFINED__ +#define __ID3D12DeviceTools1_INTERFACE_DEFINED__ + +/* interface ID3D12DeviceTools1 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12DeviceTools1; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e30e9fc7-e641-4d6e-8a81-9dd9206ec47a") + ID3D12DeviceTools1 : public ID3D12DeviceTools + { + public: + virtual HRESULT STDMETHODCALLTYPE GetApplicationSpecificDriverState( + _COM_Outptr_ ID3DBlob **ppBlob) = 0; + + virtual D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS STDMETHODCALLTYPE GetApplicationSpecificDriverBlobStatus( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12DeviceTools1Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12DeviceTools1 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12DeviceTools1 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12DeviceTools1 * This); + + DECLSPEC_XFGVIRT(ID3D12DeviceTools, SetNextAllocationAddress) + void ( STDMETHODCALLTYPE *SetNextAllocationAddress )( + ID3D12DeviceTools1 * This, + _In_ D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress); + + DECLSPEC_XFGVIRT(ID3D12DeviceTools1, GetApplicationSpecificDriverState) + HRESULT ( STDMETHODCALLTYPE *GetApplicationSpecificDriverState )( + ID3D12DeviceTools1 * This, + _COM_Outptr_ ID3DBlob **ppBlob); + + DECLSPEC_XFGVIRT(ID3D12DeviceTools1, GetApplicationSpecificDriverBlobStatus) + D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS ( STDMETHODCALLTYPE *GetApplicationSpecificDriverBlobStatus )( + ID3D12DeviceTools1 * This); + + END_INTERFACE + } ID3D12DeviceTools1Vtbl; + + interface ID3D12DeviceTools1 + { + CONST_VTBL struct ID3D12DeviceTools1Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12DeviceTools1_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12DeviceTools1_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12DeviceTools1_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12DeviceTools1_SetNextAllocationAddress(This,nextAllocationVirtualAddress) \ + ( (This)->lpVtbl -> SetNextAllocationAddress(This,nextAllocationVirtualAddress) ) + + +#define ID3D12DeviceTools1_GetApplicationSpecificDriverState(This,ppBlob) \ + ( (This)->lpVtbl -> GetApplicationSpecificDriverState(This,ppBlob) ) + +#define ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus(This) \ + ( (This)->lpVtbl -> GetApplicationSpecificDriverBlobStatus(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12DeviceTools1_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0071 */ /* [local] */ typedef struct D3D12_SUBRESOURCE_DATA @@ -26914,6 +30479,21 @@ static const UUID D3D12TiledResourceTier4 = { /* c9c4725f-a81a-4f56-8c5b-c51039d { 0x8c, 0x5b, 0xc5, 0x10, 0x39, 0xd6, 0x94, 0xfb } }; // -------------------------------------------------------------------------------------------------------------------------------- +// Experimental Feature: D3D12GPUUploadHeapsOnUnsupportedOS +// +// Use with D3D12EnableExperimentalFeatures to enable GPU upload heaps support on an unsupported OS, +// driver support is still required for this feature. +// +// Enabling D3D12GPUUploadHeapsOnUnsupportedOS needs no configuration struct, pass NULL in the pConfigurationStructs array. +// +// -------------------------------------------------------------------------------------------------------------------------------- +static const UUID D3D12GPUUploadHeapsOnUnsupportedOS = { /* 45dc51f3-767f-4588-b206-0baa2b16fbae */ + 0x45dc51f3, + 0x767f, + 0x4588, + { 0xb2, 0x06, 0x0b, 0xaa, 0x2b, 0x16, 0xfb, 0xae } +}; +// -------------------------------------------------------------------------------------------------------------------------------- // D3D12GetInterface // // Retrieve Global D3D12 Interface. @@ -26924,6 +30504,8 @@ DEFINE_GUID(CLSID_D3D12Tools, 0xe38216b1, 0x3c8c, 0x4833, DEFINE_GUID(CLSID_D3D12DeviceRemovedExtendedData, 0x4a75bbc4, 0x9ff4, 0x4ad8, 0x9f, 0x18, 0xab, 0xae, 0x84, 0xdc, 0x5f, 0xf2); DEFINE_GUID(CLSID_D3D12SDKConfiguration, 0x7cda6aca, 0xa03e, 0x49c8, 0x94, 0x58, 0x03, 0x34, 0xd2, 0x0e, 0x07, 0xce); DEFINE_GUID(CLSID_D3D12DeviceFactory, 0x114863bf, 0xc386, 0x4aee, 0xb3, 0x9d, 0x8f, 0x0b, 0xbb, 0x06, 0x29, 0x55); +DEFINE_GUID(CLSID_D3D12DSRDeviceFactory, 0xbb6dd27e, 0x94a9, 0x41a6, 0x9f, 0x1b, 0x13, 0x37, 0x72, 0x17, 0x24, 0x28); +DEFINE_GUID(CLSID_D3D12StateObjectFactory, 0x54e1c9f3, 0x1303, 0x4112, 0xbf, 0x8e, 0x7b, 0xf2, 0xbb, 0x60, 0x6a, 0x73); typedef HRESULT (WINAPI* PFN_D3D12_GET_INTERFACE)( _In_ REFCLSID, _In_ REFIID, _COM_Outptr_opt_ void** ); @@ -26931,8 +30513,8 @@ HRESULT WINAPI D3D12GetInterface( _In_ REFCLSID rclsid, _In_ REFIID riid, _COM_O -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0059_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0059_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0071_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0071_v0_0_s_ifspec; #ifndef __ID3D12SDKConfiguration_INTERFACE_DEFINED__ #define __ID3D12SDKConfiguration_INTERFACE_DEFINED__ @@ -27127,7 +30709,7 @@ EXTERN_C const IID IID_ID3D12SDKConfiguration1; #endif /* __ID3D12SDKConfiguration1_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0061 */ +/* interface __MIDL_itf_d3d12_0000_0073 */ /* [local] */ typedef @@ -27139,11 +30721,11 @@ enum D3D12_DEVICE_FACTORY_FLAGS D3D12_DEVICE_FACTORY_FLAG_DISALLOW_STORING_NEW_DEVICE_AS_SINGLETON = 0x4 } D3D12_DEVICE_FACTORY_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FACTORY_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FACTORY_FLAGS ) -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0061_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0061_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0073_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0073_v0_0_s_ifspec; #ifndef __ID3D12DeviceFactory_INTERFACE_DEFINED__ #define __ID3D12DeviceFactory_INTERFACE_DEFINED__ @@ -27304,7 +30886,7 @@ EXTERN_C const IID IID_ID3D12DeviceFactory; #endif /* __ID3D12DeviceFactory_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0062 */ +/* interface __MIDL_itf_d3d12_0000_0074 */ /* [local] */ typedef @@ -27324,7 +30906,7 @@ enum D3D12_DEVICE_FLAGS D3D12_DEVICE_FLAG_FORCE_LEGACY_STATE_VALIDATION = 0x400 } D3D12_DEVICE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FLAGS ) typedef struct D3D12_DEVICE_CONFIGURATION_DESC { D3D12_DEVICE_FLAGS Flags; @@ -27335,8 +30917,8 @@ typedef struct D3D12_DEVICE_CONFIGURATION_DESC -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0062_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0062_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0074_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0074_v0_0_s_ifspec; #ifndef __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ #define __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ @@ -27482,7 +31064,254 @@ EXTERN_C const IID IID_ID3D12DeviceConfiguration; #endif /* __ID3D12DeviceConfiguration_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0063 */ +#ifndef __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ +#define __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ + +/* interface ID3D12DeviceConfiguration1 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12DeviceConfiguration1; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ed342442-6343-4e16-bb82-a3a577874e56") + ID3D12DeviceConfiguration1 : public ID3D12DeviceConfiguration + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary( + _In_reads_bytes_(Size) const void *pLibraryBlob, + SIZE_T Size, + LPCWSTR RootSignatureSubobjectName, + REFIID riid, + _COM_Outptr_ void **ppvDeserializer) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12DeviceConfiguration1Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12DeviceConfiguration1 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12DeviceConfiguration1 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12DeviceConfiguration1 * This); + + DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetDesc) +#if !defined(_WIN32) + D3D12_DEVICE_CONFIGURATION_DESC ( STDMETHODCALLTYPE *GetDesc )( + ID3D12DeviceConfiguration1 * This); + +#else + D3D12_DEVICE_CONFIGURATION_DESC *( STDMETHODCALLTYPE *GetDesc )( + ID3D12DeviceConfiguration1 * This, + D3D12_DEVICE_CONFIGURATION_DESC * RetVal); + +#endif + + DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, GetEnabledExperimentalFeatures) + HRESULT ( STDMETHODCALLTYPE *GetEnabledExperimentalFeatures )( + ID3D12DeviceConfiguration1 * This, + _Out_writes_(NumGuids) GUID *pGuids, + UINT NumGuids); + + DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, SerializeVersionedRootSignature) + HRESULT ( STDMETHODCALLTYPE *SerializeVersionedRootSignature )( + ID3D12DeviceConfiguration1 * This, + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC *pDesc, + _COM_Outptr_ ID3DBlob **ppResult, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob **ppError); + + DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration, CreateVersionedRootSignatureDeserializer) + HRESULT ( STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializer )( + ID3D12DeviceConfiguration1 * This, + _In_reads_bytes_(Size) const void *pBlob, + SIZE_T Size, + REFIID riid, + _COM_Outptr_ void **ppvDeserializer); + + DECLSPEC_XFGVIRT(ID3D12DeviceConfiguration1, CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary) + HRESULT ( STDMETHODCALLTYPE *CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary )( + ID3D12DeviceConfiguration1 * This, + _In_reads_bytes_(Size) const void *pLibraryBlob, + SIZE_T Size, + LPCWSTR RootSignatureSubobjectName, + REFIID riid, + _COM_Outptr_ void **ppvDeserializer); + + END_INTERFACE + } ID3D12DeviceConfiguration1Vtbl; + + interface ID3D12DeviceConfiguration1 + { + CONST_VTBL struct ID3D12DeviceConfiguration1Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12DeviceConfiguration1_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12DeviceConfiguration1_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12DeviceConfiguration1_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + +#if !defined(_WIN32) + +#define ID3D12DeviceConfiguration1_GetDesc(This) \ + ( (This)->lpVtbl -> GetDesc(This) ) +#else +#define ID3D12DeviceConfiguration1_GetDesc(This,RetVal) \ + ( (This)->lpVtbl -> GetDesc(This,RetVal) ) +#endif + +#define ID3D12DeviceConfiguration1_GetEnabledExperimentalFeatures(This,pGuids,NumGuids) \ + ( (This)->lpVtbl -> GetEnabledExperimentalFeatures(This,pGuids,NumGuids) ) + +#define ID3D12DeviceConfiguration1_SerializeVersionedRootSignature(This,pDesc,ppResult,ppError) \ + ( (This)->lpVtbl -> SerializeVersionedRootSignature(This,pDesc,ppResult,ppError) ) + +#define ID3D12DeviceConfiguration1_CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer) \ + ( (This)->lpVtbl -> CreateVersionedRootSignatureDeserializer(This,pBlob,Size,riid,ppvDeserializer) ) + + +#define ID3D12DeviceConfiguration1_CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(This,pLibraryBlob,Size,RootSignatureSubobjectName,riid,ppvDeserializer) \ + ( (This)->lpVtbl -> CreateVersionedRootSignatureDeserializerFromSubobjectInLibrary(This,pLibraryBlob,Size,RootSignatureSubobjectName,riid,ppvDeserializer) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0076 */ +/* [local] */ + +typedef +enum D3D12_STATE_OBJECT_DATABASE_FLAGS + { + D3D12_STATE_OBJECT_DATABASE_FLAG_NONE = 0, + D3D12_STATE_OBJECT_DATABASE_FLAG_READ_ONLY = 0x1 + } D3D12_STATE_OBJECT_DATABASE_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D12_STATE_OBJECT_DATABASE_FLAGS ) + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0076_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0076_v0_0_s_ifspec; + +#ifndef __ID3D12StateObjectDatabaseFactory_INTERFACE_DEFINED__ +#define __ID3D12StateObjectDatabaseFactory_INTERFACE_DEFINED__ + +/* interface ID3D12StateObjectDatabaseFactory */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12StateObjectDatabaseFactory; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f5b066f0-648a-4611-bd41-27fd0948b9eb") + ID3D12StateObjectDatabaseFactory : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateStateObjectDatabaseFromFile( + LPCWSTR pDatabaseFile, + D3D12_STATE_OBJECT_DATABASE_FLAGS flags, + REFIID riid, + _COM_Outptr_ void **ppvStateObjectDatabase) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12StateObjectDatabaseFactoryVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12StateObjectDatabaseFactory * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12StateObjectDatabaseFactory * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12StateObjectDatabaseFactory * This); + + DECLSPEC_XFGVIRT(ID3D12StateObjectDatabaseFactory, CreateStateObjectDatabaseFromFile) + HRESULT ( STDMETHODCALLTYPE *CreateStateObjectDatabaseFromFile )( + ID3D12StateObjectDatabaseFactory * This, + LPCWSTR pDatabaseFile, + D3D12_STATE_OBJECT_DATABASE_FLAGS flags, + REFIID riid, + _COM_Outptr_ void **ppvStateObjectDatabase); + + END_INTERFACE + } ID3D12StateObjectDatabaseFactoryVtbl; + + interface ID3D12StateObjectDatabaseFactory + { + CONST_VTBL struct ID3D12StateObjectDatabaseFactoryVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12StateObjectDatabaseFactory_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12StateObjectDatabaseFactory_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12StateObjectDatabaseFactory_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12StateObjectDatabaseFactory_CreateStateObjectDatabaseFromFile(This,pDatabaseFile,flags,riid,ppvStateObjectDatabase) \ + ( (This)->lpVtbl -> CreateStateObjectDatabaseFromFile(This,pDatabaseFile,flags,riid,ppvStateObjectDatabase) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12StateObjectDatabaseFactory_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0077 */ /* [local] */ typedef @@ -27522,8 +31351,8 @@ enum D3D12_SHADING_RATE_COMBINER -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0063_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0063_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0077_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0077_v0_0_s_ifspec; #ifndef __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ #define __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ @@ -28358,7 +32187,7 @@ EXTERN_C const IID IID_ID3D12GraphicsCommandList5; #endif /* __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0064 */ +/* interface __MIDL_itf_d3d12_0000_0078 */ /* [local] */ typedef struct D3D12_DISPATCH_MESH_ARGUMENTS @@ -28370,8 +32199,8 @@ typedef struct D3D12_DISPATCH_MESH_ARGUMENTS -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0064_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0064_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0078_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0078_v0_0_s_ifspec; #ifndef __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__ #define __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__ @@ -31811,7 +35640,1145 @@ EXTERN_C const IID IID_ID3D12GraphicsCommandList9; #endif /* __ID3D12GraphicsCommandList9_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12_0000_0068 */ +#ifndef __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__ +#define __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__ + +/* interface ID3D12GraphicsCommandList10 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12GraphicsCommandList10; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("7013c015-d161-4b63-a08c-238552dd8acc") + ID3D12GraphicsCommandList10 : public ID3D12GraphicsCommandList9 + { + public: + virtual void STDMETHODCALLTYPE SetProgram( + _In_ const D3D12_SET_PROGRAM_DESC *pDesc) = 0; + + virtual void STDMETHODCALLTYPE DispatchGraph( + _In_ const D3D12_DISPATCH_GRAPH_DESC *pDesc) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12GraphicsCommandList10Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12GraphicsCommandList10 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12GraphicsCommandList10 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12GraphicsCommandList10 * This); + + DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) + HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( + ID3D12GraphicsCommandList10 * This, + _In_ REFGUID guid, + _Inout_ UINT *pDataSize, + _Out_writes_bytes_opt_( *pDataSize ) void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) + HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( + ID3D12GraphicsCommandList10 * This, + _In_ REFGUID guid, + _In_ UINT DataSize, + _In_reads_bytes_opt_( DataSize ) const void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) + HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( + ID3D12GraphicsCommandList10 * This, + _In_ REFGUID guid, + _In_opt_ const IUnknown *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetName) + HRESULT ( STDMETHODCALLTYPE *SetName )( + ID3D12GraphicsCommandList10 * This, + _In_z_ LPCWSTR Name); + + DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) + HRESULT ( STDMETHODCALLTYPE *GetDevice )( + ID3D12GraphicsCommandList10 * This, + REFIID riid, + _COM_Outptr_opt_ void **ppvDevice); + + DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) + D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( + ID3D12GraphicsCommandList10 * This); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Close) + HRESULT ( STDMETHODCALLTYPE *Close )( + ID3D12GraphicsCommandList10 * This); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Reset) + HRESULT ( STDMETHODCALLTYPE *Reset )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12CommandAllocator *pAllocator, + _In_opt_ ID3D12PipelineState *pInitialState); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearState) + void ( STDMETHODCALLTYPE *ClearState )( + ID3D12GraphicsCommandList10 * This, + _In_opt_ ID3D12PipelineState *pPipelineState); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawInstanced) + void ( STDMETHODCALLTYPE *DrawInstanced )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT VertexCountPerInstance, + _In_ UINT InstanceCount, + _In_ UINT StartVertexLocation, + _In_ UINT StartInstanceLocation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DrawIndexedInstanced) + void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT IndexCountPerInstance, + _In_ UINT InstanceCount, + _In_ UINT StartIndexLocation, + _In_ INT BaseVertexLocation, + _In_ UINT StartInstanceLocation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, Dispatch) + void ( STDMETHODCALLTYPE *Dispatch )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT ThreadGroupCountX, + _In_ UINT ThreadGroupCountY, + _In_ UINT ThreadGroupCountZ); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyBufferRegion) + void ( STDMETHODCALLTYPE *CopyBufferRegion )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12Resource *pDstBuffer, + UINT64 DstOffset, + _In_ ID3D12Resource *pSrcBuffer, + UINT64 SrcOffset, + UINT64 NumBytes); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTextureRegion) + void ( STDMETHODCALLTYPE *CopyTextureRegion )( + ID3D12GraphicsCommandList10 * This, + _In_ const D3D12_TEXTURE_COPY_LOCATION *pDst, + UINT DstX, + UINT DstY, + UINT DstZ, + _In_ const D3D12_TEXTURE_COPY_LOCATION *pSrc, + _In_opt_ const D3D12_BOX *pSrcBox); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyResource) + void ( STDMETHODCALLTYPE *CopyResource )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12Resource *pDstResource, + _In_ ID3D12Resource *pSrcResource); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, CopyTiles) + void ( STDMETHODCALLTYPE *CopyTiles )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12Resource *pTiledResource, + _In_ const D3D12_TILED_RESOURCE_COORDINATE *pTileRegionStartCoordinate, + _In_ const D3D12_TILE_REGION_SIZE *pTileRegionSize, + _In_ ID3D12Resource *pBuffer, + UINT64 BufferStartOffsetInBytes, + D3D12_TILE_COPY_FLAGS Flags); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveSubresource) + void ( STDMETHODCALLTYPE *ResolveSubresource )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12Resource *pDstResource, + _In_ UINT DstSubresource, + _In_ ID3D12Resource *pSrcResource, + _In_ UINT SrcSubresource, + _In_ DXGI_FORMAT Format); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetPrimitiveTopology) + void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( + ID3D12GraphicsCommandList10 * This, + _In_ D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetViewports) + void ( STDMETHODCALLTYPE *RSSetViewports )( + ID3D12GraphicsCommandList10 * This, + _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumViewports, + _In_reads_( NumViewports) const D3D12_VIEWPORT *pViewports); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, RSSetScissorRects) + void ( STDMETHODCALLTYPE *RSSetScissorRects )( + ID3D12GraphicsCommandList10 * This, + _In_range_(0, D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) UINT NumRects, + _In_reads_( NumRects) const D3D12_RECT *pRects); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetBlendFactor) + void ( STDMETHODCALLTYPE *OMSetBlendFactor )( + ID3D12GraphicsCommandList10 * This, + _In_reads_opt_(4) const FLOAT BlendFactor[ 4 ]); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetStencilRef) + void ( STDMETHODCALLTYPE *OMSetStencilRef )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT StencilRef); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPipelineState) + void ( STDMETHODCALLTYPE *SetPipelineState )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12PipelineState *pPipelineState); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResourceBarrier) + void ( STDMETHODCALLTYPE *ResourceBarrier )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT NumBarriers, + _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteBundle) + void ( STDMETHODCALLTYPE *ExecuteBundle )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12GraphicsCommandList *pCommandList); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetDescriptorHeaps) + void ( STDMETHODCALLTYPE *SetDescriptorHeaps )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT NumDescriptorHeaps, + _In_reads_(NumDescriptorHeaps) ID3D12DescriptorHeap *const *ppDescriptorHeaps); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootSignature) + void ( STDMETHODCALLTYPE *SetComputeRootSignature )( + ID3D12GraphicsCommandList10 * This, + _In_opt_ ID3D12RootSignature *pRootSignature); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootSignature) + void ( STDMETHODCALLTYPE *SetGraphicsRootSignature )( + ID3D12GraphicsCommandList10 * This, + _In_opt_ ID3D12RootSignature *pRootSignature); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootDescriptorTable) + void ( STDMETHODCALLTYPE *SetComputeRootDescriptorTable )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootDescriptorTable) + void ( STDMETHODCALLTYPE *SetGraphicsRootDescriptorTable )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstant) + void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstant )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ UINT SrcData, + _In_ UINT DestOffsetIn32BitValues); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstant) + void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstant )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ UINT SrcData, + _In_ UINT DestOffsetIn32BitValues); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRoot32BitConstants) + void ( STDMETHODCALLTYPE *SetComputeRoot32BitConstants )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ UINT Num32BitValuesToSet, + _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, + _In_ UINT DestOffsetIn32BitValues); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRoot32BitConstants) + void ( STDMETHODCALLTYPE *SetGraphicsRoot32BitConstants )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ UINT Num32BitValuesToSet, + _In_reads_(Num32BitValuesToSet*sizeof(UINT)) const void *pSrcData, + _In_ UINT DestOffsetIn32BitValues); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootConstantBufferView) + void ( STDMETHODCALLTYPE *SetComputeRootConstantBufferView )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootConstantBufferView) + void ( STDMETHODCALLTYPE *SetGraphicsRootConstantBufferView )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootShaderResourceView) + void ( STDMETHODCALLTYPE *SetComputeRootShaderResourceView )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootShaderResourceView) + void ( STDMETHODCALLTYPE *SetGraphicsRootShaderResourceView )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetComputeRootUnorderedAccessView) + void ( STDMETHODCALLTYPE *SetComputeRootUnorderedAccessView )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetGraphicsRootUnorderedAccessView) + void ( STDMETHODCALLTYPE *SetGraphicsRootUnorderedAccessView )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT RootParameterIndex, + _In_ D3D12_GPU_VIRTUAL_ADDRESS BufferLocation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetIndexBuffer) + void ( STDMETHODCALLTYPE *IASetIndexBuffer )( + ID3D12GraphicsCommandList10 * This, + _In_opt_ const D3D12_INDEX_BUFFER_VIEW *pView); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, IASetVertexBuffers) + void ( STDMETHODCALLTYPE *IASetVertexBuffers )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT StartSlot, + _In_ UINT NumViews, + _In_reads_opt_(NumViews) const D3D12_VERTEX_BUFFER_VIEW *pViews); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SOSetTargets) + void ( STDMETHODCALLTYPE *SOSetTargets )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT StartSlot, + _In_ UINT NumViews, + _In_reads_opt_(NumViews) const D3D12_STREAM_OUTPUT_BUFFER_VIEW *pViews); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, OMSetRenderTargets) + void ( STDMETHODCALLTYPE *OMSetRenderTargets )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT NumRenderTargetDescriptors, + _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pRenderTargetDescriptors, + _In_ BOOL RTsSingleHandleToDescriptorRange, + _In_opt_ const D3D12_CPU_DESCRIPTOR_HANDLE *pDepthStencilDescriptor); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearDepthStencilView) + void ( STDMETHODCALLTYPE *ClearDepthStencilView )( + ID3D12GraphicsCommandList10 * This, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, + _In_ D3D12_CLEAR_FLAGS ClearFlags, + _In_ FLOAT Depth, + _In_ UINT8 Stencil, + _In_ UINT NumRects, + _In_reads_(NumRects) const D3D12_RECT *pRects); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearRenderTargetView) + void ( STDMETHODCALLTYPE *ClearRenderTargetView )( + ID3D12GraphicsCommandList10 * This, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, + _In_ const FLOAT ColorRGBA[ 4 ], + _In_ UINT NumRects, + _In_reads_(NumRects) const D3D12_RECT *pRects); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewUint) + void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( + ID3D12GraphicsCommandList10 * This, + _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, + _In_ ID3D12Resource *pResource, + _In_ const UINT Values[ 4 ], + _In_ UINT NumRects, + _In_reads_(NumRects) const D3D12_RECT *pRects); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ClearUnorderedAccessViewFloat) + void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( + ID3D12GraphicsCommandList10 * This, + _In_ D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, + _In_ D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, + _In_ ID3D12Resource *pResource, + _In_ const FLOAT Values[ 4 ], + _In_ UINT NumRects, + _In_reads_(NumRects) const D3D12_RECT *pRects); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, DiscardResource) + void ( STDMETHODCALLTYPE *DiscardResource )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12Resource *pResource, + _In_opt_ const D3D12_DISCARD_REGION *pRegion); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginQuery) + void ( STDMETHODCALLTYPE *BeginQuery )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT Index); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndQuery) + void ( STDMETHODCALLTYPE *EndQuery )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT Index); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ResolveQueryData) + void ( STDMETHODCALLTYPE *ResolveQueryData )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT StartIndex, + _In_ UINT NumQueries, + _In_ ID3D12Resource *pDestinationBuffer, + _In_ UINT64 AlignedDestinationBufferOffset); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetPredication) + void ( STDMETHODCALLTYPE *SetPredication )( + ID3D12GraphicsCommandList10 * This, + _In_opt_ ID3D12Resource *pBuffer, + _In_ UINT64 AlignedBufferOffset, + _In_ D3D12_PREDICATION_OP Operation); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, SetMarker) + void ( STDMETHODCALLTYPE *SetMarker )( + ID3D12GraphicsCommandList10 * This, + UINT Metadata, + _In_reads_bytes_opt_(Size) const void *pData, + UINT Size); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, BeginEvent) + void ( STDMETHODCALLTYPE *BeginEvent )( + ID3D12GraphicsCommandList10 * This, + UINT Metadata, + _In_reads_bytes_opt_(Size) const void *pData, + UINT Size); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, EndEvent) + void ( STDMETHODCALLTYPE *EndEvent )( + ID3D12GraphicsCommandList10 * This); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList, ExecuteIndirect) + void ( STDMETHODCALLTYPE *ExecuteIndirect )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12CommandSignature *pCommandSignature, + _In_ UINT MaxCommandCount, + _In_ ID3D12Resource *pArgumentBuffer, + _In_ UINT64 ArgumentBufferOffset, + _In_opt_ ID3D12Resource *pCountBuffer, + _In_ UINT64 CountBufferOffset); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT) + void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12Resource *pDstBuffer, + UINT64 DstOffset, + _In_ ID3D12Resource *pSrcBuffer, + UINT64 SrcOffset, + UINT Dependencies, + _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, + _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, AtomicCopyBufferUINT64) + void ( STDMETHODCALLTYPE *AtomicCopyBufferUINT64 )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12Resource *pDstBuffer, + UINT64 DstOffset, + _In_ ID3D12Resource *pSrcBuffer, + UINT64 SrcOffset, + UINT Dependencies, + _In_reads_(Dependencies) ID3D12Resource *const *ppDependentResources, + _In_reads_(Dependencies) const D3D12_SUBRESOURCE_RANGE_UINT64 *pDependentSubresourceRanges); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, OMSetDepthBounds) + void ( STDMETHODCALLTYPE *OMSetDepthBounds )( + ID3D12GraphicsCommandList10 * This, + _In_ FLOAT Min, + _In_ FLOAT Max); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetSamplePositions) + void ( STDMETHODCALLTYPE *SetSamplePositions )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT NumSamplesPerPixel, + _In_ UINT NumPixels, + _In_reads_(NumSamplesPerPixel*NumPixels) D3D12_SAMPLE_POSITION *pSamplePositions); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, ResolveSubresourceRegion) + void ( STDMETHODCALLTYPE *ResolveSubresourceRegion )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12Resource *pDstResource, + _In_ UINT DstSubresource, + _In_ UINT DstX, + _In_ UINT DstY, + _In_ ID3D12Resource *pSrcResource, + _In_ UINT SrcSubresource, + _In_opt_ D3D12_RECT *pSrcRect, + _In_ DXGI_FORMAT Format, + _In_ D3D12_RESOLVE_MODE ResolveMode); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList1, SetViewInstanceMask) + void ( STDMETHODCALLTYPE *SetViewInstanceMask )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT Mask); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList2, WriteBufferImmediate) + void ( STDMETHODCALLTYPE *WriteBufferImmediate )( + ID3D12GraphicsCommandList10 * This, + UINT Count, + _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, + _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList3, SetProtectedResourceSession) + void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( + ID3D12GraphicsCommandList10 * This, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BeginRenderPass) + void ( STDMETHODCALLTYPE *BeginRenderPass )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT NumRenderTargets, + _In_reads_opt_(NumRenderTargets) const D3D12_RENDER_PASS_RENDER_TARGET_DESC *pRenderTargets, + _In_opt_ const D3D12_RENDER_PASS_DEPTH_STENCIL_DESC *pDepthStencil, + D3D12_RENDER_PASS_FLAGS Flags); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EndRenderPass) + void ( STDMETHODCALLTYPE *EndRenderPass )( + ID3D12GraphicsCommandList10 * This); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, InitializeMetaCommand) + void ( STDMETHODCALLTYPE *InitializeMetaCommand )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12MetaCommand *pMetaCommand, + _In_reads_bytes_opt_(InitializationParametersDataSizeInBytes) const void *pInitializationParametersData, + _In_ SIZE_T InitializationParametersDataSizeInBytes); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, ExecuteMetaCommand) + void ( STDMETHODCALLTYPE *ExecuteMetaCommand )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12MetaCommand *pMetaCommand, + _In_reads_bytes_opt_(ExecutionParametersDataSizeInBytes) const void *pExecutionParametersData, + _In_ SIZE_T ExecutionParametersDataSizeInBytes); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, BuildRaytracingAccelerationStructure) + void ( STDMETHODCALLTYPE *BuildRaytracingAccelerationStructure )( + ID3D12GraphicsCommandList10 * This, + _In_ const D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC *pDesc, + _In_ UINT NumPostbuildInfoDescs, + _In_reads_opt_(NumPostbuildInfoDescs) const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pPostbuildInfoDescs); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, EmitRaytracingAccelerationStructurePostbuildInfo) + void ( STDMETHODCALLTYPE *EmitRaytracingAccelerationStructurePostbuildInfo )( + ID3D12GraphicsCommandList10 * This, + _In_ const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC *pDesc, + _In_ UINT NumSourceAccelerationStructures, + _In_reads_( NumSourceAccelerationStructures ) const D3D12_GPU_VIRTUAL_ADDRESS *pSourceAccelerationStructureData); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, CopyRaytracingAccelerationStructure) + void ( STDMETHODCALLTYPE *CopyRaytracingAccelerationStructure )( + ID3D12GraphicsCommandList10 * This, + _In_ D3D12_GPU_VIRTUAL_ADDRESS DestAccelerationStructureData, + _In_ D3D12_GPU_VIRTUAL_ADDRESS SourceAccelerationStructureData, + _In_ D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE Mode); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, SetPipelineState1) + void ( STDMETHODCALLTYPE *SetPipelineState1 )( + ID3D12GraphicsCommandList10 * This, + _In_ ID3D12StateObject *pStateObject); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList4, DispatchRays) + void ( STDMETHODCALLTYPE *DispatchRays )( + ID3D12GraphicsCommandList10 * This, + _In_ const D3D12_DISPATCH_RAYS_DESC *pDesc); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRate) + void ( STDMETHODCALLTYPE *RSSetShadingRate )( + ID3D12GraphicsCommandList10 * This, + _In_ D3D12_SHADING_RATE baseShadingRate, + _In_reads_opt_(D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT) const D3D12_SHADING_RATE_COMBINER *combiners); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList5, RSSetShadingRateImage) + void ( STDMETHODCALLTYPE *RSSetShadingRateImage )( + ID3D12GraphicsCommandList10 * This, + _In_opt_ ID3D12Resource *shadingRateImage); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList6, DispatchMesh) + void ( STDMETHODCALLTYPE *DispatchMesh )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT ThreadGroupCountX, + _In_ UINT ThreadGroupCountY, + _In_ UINT ThreadGroupCountZ); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList7, Barrier) + void ( STDMETHODCALLTYPE *Barrier )( + ID3D12GraphicsCommandList10 * This, + UINT32 NumBarrierGroups, + _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList8, OMSetFrontAndBackStencilRef) + void ( STDMETHODCALLTYPE *OMSetFrontAndBackStencilRef )( + ID3D12GraphicsCommandList10 * This, + _In_ UINT FrontStencilRef, + _In_ UINT BackStencilRef); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, RSSetDepthBias) + void ( STDMETHODCALLTYPE *RSSetDepthBias )( + ID3D12GraphicsCommandList10 * This, + _In_ FLOAT DepthBias, + _In_ FLOAT DepthBiasClamp, + _In_ FLOAT SlopeScaledDepthBias); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList9, IASetIndexBufferStripCutValue) + void ( STDMETHODCALLTYPE *IASetIndexBufferStripCutValue )( + ID3D12GraphicsCommandList10 * This, + _In_ D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList10, SetProgram) + void ( STDMETHODCALLTYPE *SetProgram )( + ID3D12GraphicsCommandList10 * This, + _In_ const D3D12_SET_PROGRAM_DESC *pDesc); + + DECLSPEC_XFGVIRT(ID3D12GraphicsCommandList10, DispatchGraph) + void ( STDMETHODCALLTYPE *DispatchGraph )( + ID3D12GraphicsCommandList10 * This, + _In_ const D3D12_DISPATCH_GRAPH_DESC *pDesc); + + END_INTERFACE + } ID3D12GraphicsCommandList10Vtbl; + + interface ID3D12GraphicsCommandList10 + { + CONST_VTBL struct ID3D12GraphicsCommandList10Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12GraphicsCommandList10_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12GraphicsCommandList10_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12GraphicsCommandList10_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12GraphicsCommandList10_GetPrivateData(This,guid,pDataSize,pData) \ + ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) + +#define ID3D12GraphicsCommandList10_SetPrivateData(This,guid,DataSize,pData) \ + ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) + +#define ID3D12GraphicsCommandList10_SetPrivateDataInterface(This,guid,pData) \ + ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) + +#define ID3D12GraphicsCommandList10_SetName(This,Name) \ + ( (This)->lpVtbl -> SetName(This,Name) ) + + +#define ID3D12GraphicsCommandList10_GetDevice(This,riid,ppvDevice) \ + ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) + + +#define ID3D12GraphicsCommandList10_GetType(This) \ + ( (This)->lpVtbl -> GetType(This) ) + + +#define ID3D12GraphicsCommandList10_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ID3D12GraphicsCommandList10_Reset(This,pAllocator,pInitialState) \ + ( (This)->lpVtbl -> Reset(This,pAllocator,pInitialState) ) + +#define ID3D12GraphicsCommandList10_ClearState(This,pPipelineState) \ + ( (This)->lpVtbl -> ClearState(This,pPipelineState) ) + +#define ID3D12GraphicsCommandList10_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) \ + ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) + +#define ID3D12GraphicsCommandList10_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) \ + ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) + +#define ID3D12GraphicsCommandList10_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ + ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) + +#define ID3D12GraphicsCommandList10_CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) \ + ( (This)->lpVtbl -> CopyBufferRegion(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,NumBytes) ) + +#define ID3D12GraphicsCommandList10_CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) \ + ( (This)->lpVtbl -> CopyTextureRegion(This,pDst,DstX,DstY,DstZ,pSrc,pSrcBox) ) + +#define ID3D12GraphicsCommandList10_CopyResource(This,pDstResource,pSrcResource) \ + ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) + +#define ID3D12GraphicsCommandList10_CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) \ + ( (This)->lpVtbl -> CopyTiles(This,pTiledResource,pTileRegionStartCoordinate,pTileRegionSize,pBuffer,BufferStartOffsetInBytes,Flags) ) + +#define ID3D12GraphicsCommandList10_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) \ + ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) + +#define ID3D12GraphicsCommandList10_IASetPrimitiveTopology(This,PrimitiveTopology) \ + ( (This)->lpVtbl -> IASetPrimitiveTopology(This,PrimitiveTopology) ) + +#define ID3D12GraphicsCommandList10_RSSetViewports(This,NumViewports,pViewports) \ + ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) + +#define ID3D12GraphicsCommandList10_RSSetScissorRects(This,NumRects,pRects) \ + ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList10_OMSetBlendFactor(This,BlendFactor) \ + ( (This)->lpVtbl -> OMSetBlendFactor(This,BlendFactor) ) + +#define ID3D12GraphicsCommandList10_OMSetStencilRef(This,StencilRef) \ + ( (This)->lpVtbl -> OMSetStencilRef(This,StencilRef) ) + +#define ID3D12GraphicsCommandList10_SetPipelineState(This,pPipelineState) \ + ( (This)->lpVtbl -> SetPipelineState(This,pPipelineState) ) + +#define ID3D12GraphicsCommandList10_ResourceBarrier(This,NumBarriers,pBarriers) \ + ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) + +#define ID3D12GraphicsCommandList10_ExecuteBundle(This,pCommandList) \ + ( (This)->lpVtbl -> ExecuteBundle(This,pCommandList) ) + +#define ID3D12GraphicsCommandList10_SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) \ + ( (This)->lpVtbl -> SetDescriptorHeaps(This,NumDescriptorHeaps,ppDescriptorHeaps) ) + +#define ID3D12GraphicsCommandList10_SetComputeRootSignature(This,pRootSignature) \ + ( (This)->lpVtbl -> SetComputeRootSignature(This,pRootSignature) ) + +#define ID3D12GraphicsCommandList10_SetGraphicsRootSignature(This,pRootSignature) \ + ( (This)->lpVtbl -> SetGraphicsRootSignature(This,pRootSignature) ) + +#define ID3D12GraphicsCommandList10_SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ + ( (This)->lpVtbl -> SetComputeRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) + +#define ID3D12GraphicsCommandList10_SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) \ + ( (This)->lpVtbl -> SetGraphicsRootDescriptorTable(This,RootParameterIndex,BaseDescriptor) ) + +#define ID3D12GraphicsCommandList10_SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ + ( (This)->lpVtbl -> SetComputeRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) + +#define ID3D12GraphicsCommandList10_SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) \ + ( (This)->lpVtbl -> SetGraphicsRoot32BitConstant(This,RootParameterIndex,SrcData,DestOffsetIn32BitValues) ) + +#define ID3D12GraphicsCommandList10_SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ + ( (This)->lpVtbl -> SetComputeRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) + +#define ID3D12GraphicsCommandList10_SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) \ + ( (This)->lpVtbl -> SetGraphicsRoot32BitConstants(This,RootParameterIndex,Num32BitValuesToSet,pSrcData,DestOffsetIn32BitValues) ) + +#define ID3D12GraphicsCommandList10_SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetComputeRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList10_SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetGraphicsRootConstantBufferView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList10_SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetComputeRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList10_SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetGraphicsRootShaderResourceView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList10_SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetComputeRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList10_SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) \ + ( (This)->lpVtbl -> SetGraphicsRootUnorderedAccessView(This,RootParameterIndex,BufferLocation) ) + +#define ID3D12GraphicsCommandList10_IASetIndexBuffer(This,pView) \ + ( (This)->lpVtbl -> IASetIndexBuffer(This,pView) ) + +#define ID3D12GraphicsCommandList10_IASetVertexBuffers(This,StartSlot,NumViews,pViews) \ + ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumViews,pViews) ) + +#define ID3D12GraphicsCommandList10_SOSetTargets(This,StartSlot,NumViews,pViews) \ + ( (This)->lpVtbl -> SOSetTargets(This,StartSlot,NumViews,pViews) ) + +#define ID3D12GraphicsCommandList10_OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) \ + ( (This)->lpVtbl -> OMSetRenderTargets(This,NumRenderTargetDescriptors,pRenderTargetDescriptors,RTsSingleHandleToDescriptorRange,pDepthStencilDescriptor) ) + +#define ID3D12GraphicsCommandList10_ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) \ + ( (This)->lpVtbl -> ClearDepthStencilView(This,DepthStencilView,ClearFlags,Depth,Stencil,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList10_ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) \ + ( (This)->lpVtbl -> ClearRenderTargetView(This,RenderTargetView,ColorRGBA,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList10_ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ + ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList10_ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) \ + ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,ViewGPUHandleInCurrentHeap,ViewCPUHandle,pResource,Values,NumRects,pRects) ) + +#define ID3D12GraphicsCommandList10_DiscardResource(This,pResource,pRegion) \ + ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) + +#define ID3D12GraphicsCommandList10_BeginQuery(This,pQueryHeap,Type,Index) \ + ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) + +#define ID3D12GraphicsCommandList10_EndQuery(This,pQueryHeap,Type,Index) \ + ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) + +#define ID3D12GraphicsCommandList10_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ + ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) + +#define ID3D12GraphicsCommandList10_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ + ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) + +#define ID3D12GraphicsCommandList10_SetMarker(This,Metadata,pData,Size) \ + ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) + +#define ID3D12GraphicsCommandList10_BeginEvent(This,Metadata,pData,Size) \ + ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) + +#define ID3D12GraphicsCommandList10_EndEvent(This) \ + ( (This)->lpVtbl -> EndEvent(This) ) + +#define ID3D12GraphicsCommandList10_ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) \ + ( (This)->lpVtbl -> ExecuteIndirect(This,pCommandSignature,MaxCommandCount,pArgumentBuffer,ArgumentBufferOffset,pCountBuffer,CountBufferOffset) ) + + +#define ID3D12GraphicsCommandList10_AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ + ( (This)->lpVtbl -> AtomicCopyBufferUINT(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) + +#define ID3D12GraphicsCommandList10_AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) \ + ( (This)->lpVtbl -> AtomicCopyBufferUINT64(This,pDstBuffer,DstOffset,pSrcBuffer,SrcOffset,Dependencies,ppDependentResources,pDependentSubresourceRanges) ) + +#define ID3D12GraphicsCommandList10_OMSetDepthBounds(This,Min,Max) \ + ( (This)->lpVtbl -> OMSetDepthBounds(This,Min,Max) ) + +#define ID3D12GraphicsCommandList10_SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) \ + ( (This)->lpVtbl -> SetSamplePositions(This,NumSamplesPerPixel,NumPixels,pSamplePositions) ) + +#define ID3D12GraphicsCommandList10_ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) \ + ( (This)->lpVtbl -> ResolveSubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,pSrcResource,SrcSubresource,pSrcRect,Format,ResolveMode) ) + +#define ID3D12GraphicsCommandList10_SetViewInstanceMask(This,Mask) \ + ( (This)->lpVtbl -> SetViewInstanceMask(This,Mask) ) + + +#define ID3D12GraphicsCommandList10_WriteBufferImmediate(This,Count,pParams,pModes) \ + ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) + + +#define ID3D12GraphicsCommandList10_SetProtectedResourceSession(This,pProtectedResourceSession) \ + ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) + + +#define ID3D12GraphicsCommandList10_BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) \ + ( (This)->lpVtbl -> BeginRenderPass(This,NumRenderTargets,pRenderTargets,pDepthStencil,Flags) ) + +#define ID3D12GraphicsCommandList10_EndRenderPass(This) \ + ( (This)->lpVtbl -> EndRenderPass(This) ) + +#define ID3D12GraphicsCommandList10_InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) \ + ( (This)->lpVtbl -> InitializeMetaCommand(This,pMetaCommand,pInitializationParametersData,InitializationParametersDataSizeInBytes) ) + +#define ID3D12GraphicsCommandList10_ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) \ + ( (This)->lpVtbl -> ExecuteMetaCommand(This,pMetaCommand,pExecutionParametersData,ExecutionParametersDataSizeInBytes) ) + +#define ID3D12GraphicsCommandList10_BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) \ + ( (This)->lpVtbl -> BuildRaytracingAccelerationStructure(This,pDesc,NumPostbuildInfoDescs,pPostbuildInfoDescs) ) + +#define ID3D12GraphicsCommandList10_EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) \ + ( (This)->lpVtbl -> EmitRaytracingAccelerationStructurePostbuildInfo(This,pDesc,NumSourceAccelerationStructures,pSourceAccelerationStructureData) ) + +#define ID3D12GraphicsCommandList10_CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) \ + ( (This)->lpVtbl -> CopyRaytracingAccelerationStructure(This,DestAccelerationStructureData,SourceAccelerationStructureData,Mode) ) + +#define ID3D12GraphicsCommandList10_SetPipelineState1(This,pStateObject) \ + ( (This)->lpVtbl -> SetPipelineState1(This,pStateObject) ) + +#define ID3D12GraphicsCommandList10_DispatchRays(This,pDesc) \ + ( (This)->lpVtbl -> DispatchRays(This,pDesc) ) + + +#define ID3D12GraphicsCommandList10_RSSetShadingRate(This,baseShadingRate,combiners) \ + ( (This)->lpVtbl -> RSSetShadingRate(This,baseShadingRate,combiners) ) + +#define ID3D12GraphicsCommandList10_RSSetShadingRateImage(This,shadingRateImage) \ + ( (This)->lpVtbl -> RSSetShadingRateImage(This,shadingRateImage) ) + + +#define ID3D12GraphicsCommandList10_DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) \ + ( (This)->lpVtbl -> DispatchMesh(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) + + +#define ID3D12GraphicsCommandList10_Barrier(This,NumBarrierGroups,pBarrierGroups) \ + ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) + + +#define ID3D12GraphicsCommandList10_OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) \ + ( (This)->lpVtbl -> OMSetFrontAndBackStencilRef(This,FrontStencilRef,BackStencilRef) ) + + +#define ID3D12GraphicsCommandList10_RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias) \ + ( (This)->lpVtbl -> RSSetDepthBias(This,DepthBias,DepthBiasClamp,SlopeScaledDepthBias) ) + +#define ID3D12GraphicsCommandList10_IASetIndexBufferStripCutValue(This,IBStripCutValue) \ + ( (This)->lpVtbl -> IASetIndexBufferStripCutValue(This,IBStripCutValue) ) + + +#define ID3D12GraphicsCommandList10_SetProgram(This,pDesc) \ + ( (This)->lpVtbl -> SetProgram(This,pDesc) ) + +#define ID3D12GraphicsCommandList10_DispatchGraph(This,pDesc) \ + ( (This)->lpVtbl -> DispatchGraph(This,pDesc) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12GraphicsCommandList10_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__ +#define __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__ + +/* interface ID3D12DSRDeviceFactory */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12DSRDeviceFactory; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("f343d1a0-afe3-439f-b13d-cd87a43b70ca") + ID3D12DSRDeviceFactory : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateDSRDevice( + ID3D12Device *pD3D12Device, + UINT NodeMask, + REFIID riid, + _COM_Outptr_ void **ppvDSRDevice) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12DSRDeviceFactoryVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12DSRDeviceFactory * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12DSRDeviceFactory * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12DSRDeviceFactory * This); + + DECLSPEC_XFGVIRT(ID3D12DSRDeviceFactory, CreateDSRDevice) + HRESULT ( STDMETHODCALLTYPE *CreateDSRDevice )( + ID3D12DSRDeviceFactory * This, + ID3D12Device *pD3D12Device, + UINT NodeMask, + REFIID riid, + _COM_Outptr_ void **ppvDSRDevice); + + END_INTERFACE + } ID3D12DSRDeviceFactoryVtbl; + + interface ID3D12DSRDeviceFactory + { + CONST_VTBL struct ID3D12DSRDeviceFactoryVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12DSRDeviceFactory_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12DSRDeviceFactory_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12DSRDeviceFactory_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12DSRDeviceFactory_CreateDSRDevice(This,pD3D12Device,NodeMask,riid,ppvDSRDevice) \ + ( (This)->lpVtbl -> CreateDSRDevice(This,pD3D12Device,NodeMask,riid,ppvDSRDevice) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12DSRDeviceFactory_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ +#define __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ + +/* interface ID3D12GBVDiagnostics */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12GBVDiagnostics; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("597985ab-9b75-4dbb-be23-0761195bebee") + ID3D12GBVDiagnostics : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetGBVEntireSubresourceStatesData( + _In_ ID3D12Resource *pResource, + _Out_writes_bytes_(DataSize) int *pData, + UINT DataSize) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetGBVSubresourceState( + _In_ ID3D12Resource *pResource, + UINT Subresource, + _Out_ int *pData) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetGBVResourceUniformState( + _In_ ID3D12Resource *pResource, + _Out_ int *pData) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetGBVResourceInfo( + _In_ ID3D12Resource *pResource, + _In_opt_ D3D12_RESOURCE_DESC *pResourceDesc, + _In_opt_ UINT32 *pResourceHash, + _In_opt_ UINT32 *pSubresourceStatesByteOffset) = 0; + + virtual void STDMETHODCALLTYPE GBVReserved0( void) = 0; + + virtual void STDMETHODCALLTYPE GBVReserved1( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12GBVDiagnosticsVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12GBVDiagnostics * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12GBVDiagnostics * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12GBVDiagnostics * This); + + DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVEntireSubresourceStatesData) + HRESULT ( STDMETHODCALLTYPE *GetGBVEntireSubresourceStatesData )( + ID3D12GBVDiagnostics * This, + _In_ ID3D12Resource *pResource, + _Out_writes_bytes_(DataSize) int *pData, + UINT DataSize); + + DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVSubresourceState) + HRESULT ( STDMETHODCALLTYPE *GetGBVSubresourceState )( + ID3D12GBVDiagnostics * This, + _In_ ID3D12Resource *pResource, + UINT Subresource, + _Out_ int *pData); + + DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVResourceUniformState) + HRESULT ( STDMETHODCALLTYPE *GetGBVResourceUniformState )( + ID3D12GBVDiagnostics * This, + _In_ ID3D12Resource *pResource, + _Out_ int *pData); + + DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GetGBVResourceInfo) + HRESULT ( STDMETHODCALLTYPE *GetGBVResourceInfo )( + ID3D12GBVDiagnostics * This, + _In_ ID3D12Resource *pResource, + _In_opt_ D3D12_RESOURCE_DESC *pResourceDesc, + _In_opt_ UINT32 *pResourceHash, + _In_opt_ UINT32 *pSubresourceStatesByteOffset); + + DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GBVReserved0) + void ( STDMETHODCALLTYPE *GBVReserved0 )( + ID3D12GBVDiagnostics * This); + + DECLSPEC_XFGVIRT(ID3D12GBVDiagnostics, GBVReserved1) + void ( STDMETHODCALLTYPE *GBVReserved1 )( + ID3D12GBVDiagnostics * This); + + END_INTERFACE + } ID3D12GBVDiagnosticsVtbl; + + interface ID3D12GBVDiagnostics + { + CONST_VTBL struct ID3D12GBVDiagnosticsVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12GBVDiagnostics_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12GBVDiagnostics_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12GBVDiagnostics_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12GBVDiagnostics_GetGBVEntireSubresourceStatesData(This,pResource,pData,DataSize) \ + ( (This)->lpVtbl -> GetGBVEntireSubresourceStatesData(This,pResource,pData,DataSize) ) + +#define ID3D12GBVDiagnostics_GetGBVSubresourceState(This,pResource,Subresource,pData) \ + ( (This)->lpVtbl -> GetGBVSubresourceState(This,pResource,Subresource,pData) ) + +#define ID3D12GBVDiagnostics_GetGBVResourceUniformState(This,pResource,pData) \ + ( (This)->lpVtbl -> GetGBVResourceUniformState(This,pResource,pData) ) + +#define ID3D12GBVDiagnostics_GetGBVResourceInfo(This,pResource,pResourceDesc,pResourceHash,pSubresourceStatesByteOffset) \ + ( (This)->lpVtbl -> GetGBVResourceInfo(This,pResource,pResourceDesc,pResourceHash,pSubresourceStatesByteOffset) ) + +#define ID3D12GBVDiagnostics_GBVReserved0(This) \ + ( (This)->lpVtbl -> GBVReserved0(This) ) + +#define ID3D12GBVDiagnostics_GBVReserved1(This) \ + ( (This)->lpVtbl -> GBVReserved1(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12_0000_0085 */ /* [local] */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ @@ -31828,6 +36795,7 @@ DEFINE_GUID(IID_ID3D12CommandAllocator,0x6102dee4,0xaf59,0x4b09,0xb9,0x99,0xb4,0 DEFINE_GUID(IID_ID3D12Fence,0x0a753dcf,0xc4d8,0x4b91,0xad,0xf6,0xbe,0x5a,0x60,0xd9,0x5a,0x76); DEFINE_GUID(IID_ID3D12Fence1,0x433685fe,0xe22b,0x4ca0,0xa8,0xdb,0xb5,0xb4,0xf4,0xdd,0x0e,0x4a); DEFINE_GUID(IID_ID3D12PipelineState,0x765a30f3,0xf624,0x4c6f,0xa8,0x28,0xac,0xe9,0x48,0x62,0x24,0x45); +DEFINE_GUID(IID_ID3D12PipelineState1,0x5646804c,0x9638,0x48f7,0x91,0x82,0xb3,0xee,0x5a,0x6b,0x60,0xfb); DEFINE_GUID(IID_ID3D12DescriptorHeap,0x8efb471d,0x616c,0x4f49,0x90,0xf7,0x12,0x7b,0xb7,0x63,0xfa,0x51); DEFINE_GUID(IID_ID3D12QueryHeap,0x0d9658ae,0xed45,0x469e,0xa6,0x1d,0x97,0x0e,0xc5,0x83,0xca,0xb4); DEFINE_GUID(IID_ID3D12CommandSignature,0xc36a797c,0xec80,0x4f0a,0x89,0x85,0xa7,0xb2,0x47,0x50,0x82,0xd1); @@ -31836,6 +36804,7 @@ DEFINE_GUID(IID_ID3D12GraphicsCommandList,0x5b160d0f,0xac1b,0x4185,0x8b,0xa8,0xb DEFINE_GUID(IID_ID3D12GraphicsCommandList1,0x553103fb,0x1fe7,0x4557,0xbb,0x38,0x94,0x6d,0x7d,0x0e,0x7c,0xa7); DEFINE_GUID(IID_ID3D12GraphicsCommandList2,0x38C3E585,0xFF17,0x412C,0x91,0x50,0x4F,0xC6,0xF9,0xD7,0x2A,0x28); DEFINE_GUID(IID_ID3D12CommandQueue,0x0ec870a6,0x5d7e,0x4c22,0x8c,0xfc,0x5b,0xaa,0xe0,0x76,0x16,0xed); +DEFINE_GUID(IID_ID3D12CommandQueue1,0x3a3c3165,0x0ee7,0x4b8e,0xa0,0xaf,0x63,0x56,0xb4,0xc3,0xbb,0xb9); DEFINE_GUID(IID_ID3D12Device,0x189819f1,0x1db6,0x4b57,0xbe,0x54,0x18,0x21,0x33,0x9b,0x85,0xf7); DEFINE_GUID(IID_ID3D12PipelineLibrary,0xc64226a8,0x9201,0x46af,0xb4,0xcc,0x53,0xfb,0x9f,0xf7,0x41,0x4f); DEFINE_GUID(IID_ID3D12PipelineLibrary1,0x80eabf42,0x2568,0x4e5e,0xbd,0x82,0xc3,0x7f,0x86,0x96,0x1d,0xc3); @@ -31850,6 +36819,9 @@ DEFINE_GUID(IID_ID3D12SwapChainAssistant,0xf1df64b6,0x57fd,0x49cd,0x88,0x07,0xc0 DEFINE_GUID(IID_ID3D12LifetimeTracker,0x3fd03d36,0x4eb1,0x424a,0xa5,0x82,0x49,0x4e,0xcb,0x8b,0xa8,0x13); DEFINE_GUID(IID_ID3D12StateObject,0x47016943,0xfca8,0x4594,0x93,0xea,0xaf,0x25,0x8b,0x55,0x34,0x6d); DEFINE_GUID(IID_ID3D12StateObjectProperties,0xde5fa827,0x9bf9,0x4f26,0x89,0xff,0xd7,0xf5,0x6f,0xde,0x38,0x60); +DEFINE_GUID(IID_ID3D12StateObjectProperties1,0x460caac7,0x1d24,0x446a,0xa1,0x84,0xca,0x67,0xdb,0x49,0x41,0x38); +DEFINE_GUID(IID_ID3D12StateObjectProperties2,0xd5e82917,0xf0f1,0x44cf,0xae,0x5e,0xce,0x22,0x2d,0xd0,0xb8,0x84); +DEFINE_GUID(IID_ID3D12WorkGraphProperties,0x065acf71,0xf863,0x4b89,0x82,0xf4,0x02,0xe4,0xd5,0x88,0x67,0x57); DEFINE_GUID(IID_ID3D12Device5,0x8b4f173b,0x2fea,0x4b80,0x8f,0x58,0x43,0x07,0x19,0x1a,0xb9,0x5d); DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings,0x82BC481C,0x6B9B,0x4030,0xAE,0xDB,0x7E,0xE3,0xD1,0xDF,0x1E,0x63); DEFINE_GUID(IID_ID3D12DeviceRemovedExtendedDataSettings1,0xDBD5AE51,0x3317,0x4F0A,0xAD,0xF9,0x1D,0x7C,0xED,0xCA,0xAE,0x0B); @@ -31873,21 +36845,33 @@ DEFINE_GUID(IID_ID3D12Device10,0x517f8718,0xaa66,0x49f9,0xb0,0x2b,0xa7,0xab,0x89 DEFINE_GUID(IID_ID3D12Device11,0x5405c344,0xd457,0x444e,0xb4,0xdd,0x23,0x66,0xe4,0x5a,0xee,0x39); DEFINE_GUID(IID_ID3D12Device12,0x5af5c532,0x4c91,0x4cd0,0xb5,0x41,0x15,0xa4,0x05,0x39,0x5f,0xc5); DEFINE_GUID(IID_ID3D12Device13,0x14eecffc,0x4df8,0x40f7,0xa1,0x18,0x5c,0x81,0x6f,0x45,0x69,0x5e); +DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x88,0xad,0x49,0x26,0xd3,0x23); +DEFINE_GUID(IID_ID3D12StateObjectDatabase,0xc56060b7,0xb5fc,0x4135,0x98,0xe0,0xa1,0xe9,0x99,0x7e,0xac,0xe0); DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76); DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5); +DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0); +DEFINE_GUID(IID_ID3D12Tools2,0x01d393c5,0xc9b0,0x42a1,0x95,0x8c,0xc2,0x6b,0x02,0xd4,0xd0,0x97); +DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d); +DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9); +DEFINE_GUID(IID_ID3D12DeviceTools1,0xe30e9fc7,0xe641,0x4d6e,0x8a,0x81,0x9d,0xd9,0x20,0x6e,0xc4,0x7a); DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7); DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f); DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb); DEFINE_GUID(IID_ID3D12DeviceConfiguration,0x78dbf87b,0xf766,0x422b,0xa6,0x1c,0xc8,0xc4,0x46,0xbd,0xb9,0xad); +DEFINE_GUID(IID_ID3D12DeviceConfiguration1,0xed342442,0x6343,0x4e16,0xbb,0x82,0xa3,0xa5,0x77,0x87,0x4e,0x56); +DEFINE_GUID(IID_ID3D12StateObjectDatabaseFactory,0xf5b066f0,0x648a,0x4611,0xbd,0x41,0x27,0xfd,0x09,0x48,0xb9,0xeb); DEFINE_GUID(IID_ID3D12GraphicsCommandList5,0x55050859,0x4024,0x474c,0x87,0xf5,0x64,0x72,0xea,0xee,0x44,0xea); DEFINE_GUID(IID_ID3D12GraphicsCommandList6,0xc3827890,0xe548,0x4cfa,0x96,0xcf,0x56,0x89,0xa9,0x37,0x0f,0x80); DEFINE_GUID(IID_ID3D12GraphicsCommandList7,0xdd171223,0x8b61,0x4769,0x90,0xe3,0x16,0x0c,0xcd,0xe4,0xe2,0xc1); DEFINE_GUID(IID_ID3D12GraphicsCommandList8,0xee936ef9,0x599d,0x4d28,0x93,0x8e,0x23,0xc4,0xad,0x05,0xce,0x51); DEFINE_GUID(IID_ID3D12GraphicsCommandList9,0x34ed2808,0xffe6,0x4c2b,0xb1,0x1a,0xca,0xbd,0x2b,0x0c,0x59,0xe1); +DEFINE_GUID(IID_ID3D12GraphicsCommandList10,0x7013c015,0xd161,0x4b63,0xa0,0x8c,0x23,0x85,0x52,0xdd,0x8a,0xcc); +DEFINE_GUID(IID_ID3D12DSRDeviceFactory,0xf343d1a0,0xafe3,0x439f,0xb1,0x3d,0xcd,0x87,0xa4,0x3b,0x70,0xca); +DEFINE_GUID(IID_ID3D12GBVDiagnostics,0x597985ab,0x9b75,0x4dbb,0xbe,0x23,0x07,0x61,0x19,0x5b,0xeb,0xee); -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0068_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0068_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0085_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0085_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ diff --git a/thirdparty/directx_headers/include/directx/d3d12compatibility.h b/thirdparty/directx_headers/include/directx/d3d12compatibility.h index 1a9430e5c92..ec9ff5f971f 100644 --- a/thirdparty/directx_headers/include/directx/d3d12compatibility.h +++ b/thirdparty/directx_headers/include/directx/d3d12compatibility.h @@ -87,6 +87,13 @@ typedef interface OpenCLOn12CreatorID OpenCLOn12CreatorID; #endif /* __OpenCLOn12CreatorID_FWD_DEFINED__ */ +#ifndef __VulkanOn12CreatorID_FWD_DEFINED__ +#define __VulkanOn12CreatorID_FWD_DEFINED__ +typedef interface VulkanOn12CreatorID VulkanOn12CreatorID; + +#endif /* __VulkanOn12CreatorID_FWD_DEFINED__ */ + + #ifndef __DirectMLTensorFlowCreatorID_FWD_DEFINED__ #define __DirectMLTensorFlowCreatorID_FWD_DEFINED__ typedef interface DirectMLTensorFlowCreatorID DirectMLTensorFlowCreatorID; @@ -101,6 +108,13 @@ typedef interface DirectMLPyTorchCreatorID DirectMLPyTorchCreatorID; #endif /* __DirectMLPyTorchCreatorID_FWD_DEFINED__ */ +#ifndef __DirectMLWebNNCreatorID_FWD_DEFINED__ +#define __DirectMLWebNNCreatorID_FWD_DEFINED__ +typedef interface DirectMLWebNNCreatorID DirectMLWebNNCreatorID; + +#endif /* __DirectMLWebNNCreatorID_FWD_DEFINED__ */ + + /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" @@ -126,7 +140,7 @@ enum D3D12_COMPATIBILITY_SHARED_FLAGS D3D12_COMPATIBILITY_SHARED_FLAG_9_ON_12 = 0x4 } D3D12_COMPATIBILITY_SHARED_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMPATIBILITY_SHARED_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMPATIBILITY_SHARED_FLAGS ) typedef enum D3D12_REFLECT_SHARED_PROPERTY { @@ -565,6 +579,78 @@ EXTERN_C const IID IID_OpenCLOn12CreatorID; #endif /* __OpenCLOn12CreatorID_INTERFACE_DEFINED__ */ +#ifndef __VulkanOn12CreatorID_INTERFACE_DEFINED__ +#define __VulkanOn12CreatorID_INTERFACE_DEFINED__ + +/* interface VulkanOn12CreatorID */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_VulkanOn12CreatorID; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("bc806e01-3052-406c-a3e8-9fc07f048f98") + VulkanOn12CreatorID : public IUnknown + { + public: + }; + + +#else /* C style interface */ + + typedef struct VulkanOn12CreatorIDVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + VulkanOn12CreatorID * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + VulkanOn12CreatorID * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + VulkanOn12CreatorID * This); + + END_INTERFACE + } VulkanOn12CreatorIDVtbl; + + interface VulkanOn12CreatorID + { + CONST_VTBL struct VulkanOn12CreatorIDVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define VulkanOn12CreatorID_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define VulkanOn12CreatorID_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define VulkanOn12CreatorID_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __VulkanOn12CreatorID_INTERFACE_DEFINED__ */ + + #ifndef __DirectMLTensorFlowCreatorID_INTERFACE_DEFINED__ #define __DirectMLTensorFlowCreatorID_INTERFACE_DEFINED__ @@ -709,7 +795,79 @@ EXTERN_C const IID IID_DirectMLPyTorchCreatorID; #endif /* __DirectMLPyTorchCreatorID_INTERFACE_DEFINED__ */ -/* interface __MIDL_itf_d3d12compatibility_0000_0007 */ +#ifndef __DirectMLWebNNCreatorID_INTERFACE_DEFINED__ +#define __DirectMLWebNNCreatorID_INTERFACE_DEFINED__ + +/* interface DirectMLWebNNCreatorID */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_DirectMLWebNNCreatorID; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fdf01a76-1e11-450f-902b-74f04ea08094") + DirectMLWebNNCreatorID : public IUnknown + { + public: + }; + + +#else /* C style interface */ + + typedef struct DirectMLWebNNCreatorIDVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + DirectMLWebNNCreatorID * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + DirectMLWebNNCreatorID * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + DirectMLWebNNCreatorID * This); + + END_INTERFACE + } DirectMLWebNNCreatorIDVtbl; + + interface DirectMLWebNNCreatorID + { + CONST_VTBL struct DirectMLWebNNCreatorIDVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define DirectMLWebNNCreatorID_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define DirectMLWebNNCreatorID_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define DirectMLWebNNCreatorID_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __DirectMLWebNNCreatorID_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12compatibility_0000_0009 */ /* [local] */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ @@ -719,12 +877,14 @@ DEFINE_GUID(IID_D3D11On12CreatorID,0xedbf5678,0x2960,0x4e81,0x84,0x29,0x99,0xd4, DEFINE_GUID(IID_D3D9On12CreatorID,0xfffcbb7f,0x15d3,0x42a2,0x84,0x1e,0x9d,0x8d,0x32,0xf3,0x7d,0xdd); DEFINE_GUID(IID_OpenGLOn12CreatorID,0x6bb3cd34,0x0d19,0x45ab,0x97,0xed,0xd7,0x20,0xba,0x3d,0xfc,0x80); DEFINE_GUID(IID_OpenCLOn12CreatorID,0x3f76bb74,0x91b5,0x4a88,0xb1,0x26,0x20,0xca,0x03,0x31,0xcd,0x60); +DEFINE_GUID(IID_VulkanOn12CreatorID,0xbc806e01,0x3052,0x406c,0xa3,0xe8,0x9f,0xc0,0x7f,0x04,0x8f,0x98); DEFINE_GUID(IID_DirectMLTensorFlowCreatorID,0xcb7490ac,0x8a0f,0x44ec,0x9b,0x7b,0x6f,0x4c,0xaf,0xe8,0xe9,0xab); DEFINE_GUID(IID_DirectMLPyTorchCreatorID,0xaf029192,0xfba1,0x4b05,0x91,0x16,0x23,0x5e,0x06,0x56,0x03,0x54); +DEFINE_GUID(IID_DirectMLWebNNCreatorID,0xfdf01a76,0x1e11,0x450f,0x90,0x2b,0x74,0xf0,0x4e,0xa0,0x80,0x94); -extern RPC_IF_HANDLE __MIDL_itf_d3d12compatibility_0000_0007_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12compatibility_0000_0007_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12compatibility_0000_0009_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12compatibility_0000_0009_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ diff --git a/thirdparty/directx_headers/include/directx/d3d12compiler.h b/thirdparty/directx_headers/include/directx/d3d12compiler.h new file mode 100644 index 00000000000..1d8fe3be6d1 --- /dev/null +++ b/thirdparty/directx_headers/include/directx/d3d12compiler.h @@ -0,0 +1,977 @@ +/*------------------------------------------------------------------------------------- + * + * Copyright (c) Microsoft Corporation + * Licensed under the MIT license + * + *-------------------------------------------------------------------------------------*/ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.01.0628 */ + + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif /* __RPCNDR_H_VERSION__ */ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __d3d12compiler_h__ +#define __d3d12compiler_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#ifndef DECLSPEC_XFGVIRT +#if defined(_CONTROL_FLOW_GUARD_XFG) +#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) +#else +#define DECLSPEC_XFGVIRT(base, func) +#endif +#endif + +/* Forward Declarations */ + +#ifndef __ID3D12CompilerFactoryChild_FWD_DEFINED__ +#define __ID3D12CompilerFactoryChild_FWD_DEFINED__ +typedef interface ID3D12CompilerFactoryChild ID3D12CompilerFactoryChild; + +#endif /* __ID3D12CompilerFactoryChild_FWD_DEFINED__ */ + + +#ifndef __ID3D12CompilerCacheSession_FWD_DEFINED__ +#define __ID3D12CompilerCacheSession_FWD_DEFINED__ +typedef interface ID3D12CompilerCacheSession ID3D12CompilerCacheSession; + +#endif /* __ID3D12CompilerCacheSession_FWD_DEFINED__ */ + + +#ifndef __ID3D12CompilerStateObject_FWD_DEFINED__ +#define __ID3D12CompilerStateObject_FWD_DEFINED__ +typedef interface ID3D12CompilerStateObject ID3D12CompilerStateObject; + +#endif /* __ID3D12CompilerStateObject_FWD_DEFINED__ */ + + +#ifndef __ID3D12Compiler_FWD_DEFINED__ +#define __ID3D12Compiler_FWD_DEFINED__ +typedef interface ID3D12Compiler ID3D12Compiler; + +#endif /* __ID3D12Compiler_FWD_DEFINED__ */ + + +#ifndef __ID3D12CompilerFactory_FWD_DEFINED__ +#define __ID3D12CompilerFactory_FWD_DEFINED__ +typedef interface ID3D12CompilerFactory ID3D12CompilerFactory; + +#endif /* __ID3D12CompilerFactory_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" +#include "dxgicommon.h" +#include "d3d12.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_d3d12compiler_0000_0000 */ +/* [local] */ + +#include +#pragma region App Family +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) +typedef struct D3D12_ADAPTER_FAMILY + { + WCHAR szAdapterFamily[ 128 ]; + } D3D12_ADAPTER_FAMILY; + +typedef HRESULT (WINAPI* PFN_D3D12_COMPILER_CREATE_FACTORY)( + _In_ LPCWSTR pPluginCompilerDllPath, + _In_ REFIID riid, + _COM_Outptr_opt_ void** ppFactory ); + +HRESULT WINAPI D3D12CompilerCreateFactory( + _In_ LPCWSTR pPluginCompilerDllPath, + _In_ REFIID riid, // Expected: ID3D12CompilerFactory + _COM_Outptr_opt_ void** ppFactory ); + +typedef HRESULT (WINAPI* PFN_D3D12_COMPILER_SERIALIZE_VERSIONED_ROOT_SIGNATURE)( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature, + _Out_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob); + +HRESULT WINAPI D3D12CompilerSerializeVersionedRootSignature( + _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignature, + _Out_ ID3DBlob** ppBlob, + _Always_(_Outptr_opt_result_maybenull_) ID3DBlob** ppErrorBlob); + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12compiler_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12compiler_0000_0000_v0_0_s_ifspec; + +#ifndef __ID3D12CompilerFactoryChild_INTERFACE_DEFINED__ +#define __ID3D12CompilerFactoryChild_INTERFACE_DEFINED__ + +/* interface ID3D12CompilerFactoryChild */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12CompilerFactoryChild; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e0d06420-9f31-47e8-ae9a-dd2ba25ac0bc") + ID3D12CompilerFactoryChild : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetFactory( + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerFactory) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12CompilerFactoryChildVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12CompilerFactoryChild * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12CompilerFactoryChild * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12CompilerFactoryChild * This); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactoryChild, GetFactory) + HRESULT ( STDMETHODCALLTYPE *GetFactory )( + ID3D12CompilerFactoryChild * This, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerFactory); + + END_INTERFACE + } ID3D12CompilerFactoryChildVtbl; + + interface ID3D12CompilerFactoryChild + { + CONST_VTBL struct ID3D12CompilerFactoryChildVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12CompilerFactoryChild_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12CompilerFactoryChild_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12CompilerFactoryChild_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12CompilerFactoryChild_GetFactory(This,riid,ppCompilerFactory) \ + ( (This)->lpVtbl -> GetFactory(This,riid,ppCompilerFactory) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12CompilerFactoryChild_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12compiler_0000_0001 */ +/* [local] */ + +typedef +enum D3D12_COMPILER_VALUE_TYPE + { + D3D12_COMPILER_VALUE_TYPE_OBJECT_CODE = 0, + D3D12_COMPILER_VALUE_TYPE_METADATA = 1, + D3D12_COMPILER_VALUE_TYPE_DEBUG_PDB = 2, + D3D12_COMPILER_VALUE_TYPE_PERFORMANCE_DATA = 3 + } D3D12_COMPILER_VALUE_TYPE; + +typedef +enum D3D12_COMPILER_VALUE_TYPE_FLAGS + { + D3D12_COMPILER_VALUE_TYPE_FLAGS_NONE = 0, + D3D12_COMPILER_VALUE_TYPE_FLAGS_OBJECT_CODE = ( 1 << D3D12_COMPILER_VALUE_TYPE_OBJECT_CODE ) , + D3D12_COMPILER_VALUE_TYPE_FLAGS_METADATA = ( 1 << D3D12_COMPILER_VALUE_TYPE_METADATA ) , + D3D12_COMPILER_VALUE_TYPE_FLAGS_DEBUG_PDB = ( 1 << D3D12_COMPILER_VALUE_TYPE_DEBUG_PDB ) , + D3D12_COMPILER_VALUE_TYPE_FLAGS_PERFORMANCE_DATA = ( 1 << D3D12_COMPILER_VALUE_TYPE_PERFORMANCE_DATA ) + } D3D12_COMPILER_VALUE_TYPE_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D12_COMPILER_VALUE_TYPE_FLAGS ) +typedef struct D3D12_COMPILER_DATABASE_PATH + { + D3D12_COMPILER_VALUE_TYPE_FLAGS Types; + LPCWSTR pPath; + } D3D12_COMPILER_DATABASE_PATH; + +typedef struct D3D12_COMPILER_CACHE_GROUP_KEY + { + _Field_size_bytes_full_(KeySize) const void *pKey; + UINT KeySize; + } D3D12_COMPILER_CACHE_GROUP_KEY; + +typedef struct D3D12_COMPILER_CACHE_VALUE_KEY + { + _Field_size_bytes_full_(KeySize) const void *pKey; + UINT KeySize; + } D3D12_COMPILER_CACHE_VALUE_KEY; + +typedef struct D3D12_COMPILER_CACHE_VALUE + { + _Field_size_bytes_full_(ValueSize) void *pValue; + UINT ValueSize; + } D3D12_COMPILER_CACHE_VALUE; + +typedef struct D3D12_COMPILER_CACHE_TYPED_VALUE + { + D3D12_COMPILER_VALUE_TYPE Type; + D3D12_COMPILER_CACHE_VALUE Value; + } D3D12_COMPILER_CACHE_TYPED_VALUE; + +typedef struct D3D12_COMPILER_CACHE_CONST_VALUE + { + _Field_size_bytes_full_(ValueSize) const void *pValue; + UINT ValueSize; + } D3D12_COMPILER_CACHE_CONST_VALUE; + +typedef struct D3D12_COMPILER_CACHE_TYPED_CONST_VALUE + { + D3D12_COMPILER_VALUE_TYPE Type; + D3D12_COMPILER_CACHE_CONST_VALUE Value; + } D3D12_COMPILER_CACHE_TYPED_CONST_VALUE; + +typedef struct D3D12_COMPILER_TARGET + { + UINT AdapterFamilyIndex; + UINT64 ABIVersion; + } D3D12_COMPILER_TARGET; + +typedef void *( __stdcall *D3D12CompilerCacheSessionAllocationFunc )( + SIZE_T SizeInBytes, + _Inout_opt_ void *pContext); + +typedef void ( __stdcall *D3D12CompilerCacheSessionGroupValueKeysFunc )( + _In_ const D3D12_COMPILER_CACHE_VALUE_KEY *pValueKey, + _Inout_opt_ void *pContext); + +typedef void ( __stdcall *D3D12CompilerCacheSessionGroupValuesFunc )( + UINT ValueKeyIndex, + _In_ const D3D12_COMPILER_CACHE_TYPED_CONST_VALUE *pTypedValue, + _Inout_opt_ void *pContext); + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12compiler_0000_0001_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12compiler_0000_0001_v0_0_s_ifspec; + +#ifndef __ID3D12CompilerCacheSession_INTERFACE_DEFINED__ +#define __ID3D12CompilerCacheSession_INTERFACE_DEFINED__ + +/* interface ID3D12CompilerCacheSession */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12CompilerCacheSession; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5704e5e6-054b-4738-b661-7b0d68d8dde2") + ID3D12CompilerCacheSession : public ID3D12CompilerFactoryChild + { + public: + virtual HRESULT STDMETHODCALLTYPE FindGroup( + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + _Out_opt_ UINT *pGroupVersion) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindGroupValueKeys( + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + _In_opt_ const UINT *pExpectedGroupVersion, + _In_ D3D12CompilerCacheSessionGroupValueKeysFunc CallbackFunc, + _Inout_opt_ void *pContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindGroupValues( + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + _In_opt_ const UINT *pExpectedGroupVersion, + D3D12_COMPILER_VALUE_TYPE_FLAGS ValueTypeFlags, + _In_opt_ D3D12CompilerCacheSessionGroupValuesFunc CallbackFunc, + _Inout_opt_ void *pContext) = 0; + + virtual HRESULT STDMETHODCALLTYPE FindValue( + _In_ const D3D12_COMPILER_CACHE_VALUE_KEY *pValueKey, + _Inout_count_(NumTypedValues) D3D12_COMPILER_CACHE_TYPED_VALUE *pTypedValues, + UINT NumTypedValues, + _In_opt_ D3D12CompilerCacheSessionAllocationFunc pCallbackFunc, + _Inout_opt_ void *pContext) = 0; + + virtual const D3D12_APPLICATION_DESC *STDMETHODCALLTYPE GetApplicationDesc( void) = 0; + +#if defined(_MSC_VER) || !defined(_WIN32) + virtual D3D12_COMPILER_TARGET STDMETHODCALLTYPE GetCompilerTarget( void) = 0; +#else + virtual D3D12_COMPILER_TARGET *STDMETHODCALLTYPE GetCompilerTarget( + D3D12_COMPILER_TARGET * RetVal) = 0; +#endif + + virtual D3D12_COMPILER_VALUE_TYPE_FLAGS STDMETHODCALLTYPE GetValueTypes( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE StoreGroupValueKeys( + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + UINT GroupVersion, + _In_reads_(NumValueKeys) const D3D12_COMPILER_CACHE_VALUE_KEY *pValueKeys, + UINT NumValueKeys) = 0; + + virtual HRESULT STDMETHODCALLTYPE StoreValue( + _In_ const D3D12_COMPILER_CACHE_VALUE_KEY *pValueKey, + _In_reads_(NumTypedValues) const D3D12_COMPILER_CACHE_TYPED_CONST_VALUE *pTypedValues, + UINT NumTypedValues) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12CompilerCacheSessionVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12CompilerCacheSession * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12CompilerCacheSession * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12CompilerCacheSession * This); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactoryChild, GetFactory) + HRESULT ( STDMETHODCALLTYPE *GetFactory )( + ID3D12CompilerCacheSession * This, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerFactory); + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, FindGroup) + HRESULT ( STDMETHODCALLTYPE *FindGroup )( + ID3D12CompilerCacheSession * This, + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + _Out_opt_ UINT *pGroupVersion); + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, FindGroupValueKeys) + HRESULT ( STDMETHODCALLTYPE *FindGroupValueKeys )( + ID3D12CompilerCacheSession * This, + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + _In_opt_ const UINT *pExpectedGroupVersion, + _In_ D3D12CompilerCacheSessionGroupValueKeysFunc CallbackFunc, + _Inout_opt_ void *pContext); + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, FindGroupValues) + HRESULT ( STDMETHODCALLTYPE *FindGroupValues )( + ID3D12CompilerCacheSession * This, + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + _In_opt_ const UINT *pExpectedGroupVersion, + D3D12_COMPILER_VALUE_TYPE_FLAGS ValueTypeFlags, + _In_opt_ D3D12CompilerCacheSessionGroupValuesFunc CallbackFunc, + _Inout_opt_ void *pContext); + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, FindValue) + HRESULT ( STDMETHODCALLTYPE *FindValue )( + ID3D12CompilerCacheSession * This, + _In_ const D3D12_COMPILER_CACHE_VALUE_KEY *pValueKey, + _Inout_count_(NumTypedValues) D3D12_COMPILER_CACHE_TYPED_VALUE *pTypedValues, + UINT NumTypedValues, + _In_opt_ D3D12CompilerCacheSessionAllocationFunc pCallbackFunc, + _Inout_opt_ void *pContext); + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, GetApplicationDesc) + const D3D12_APPLICATION_DESC *( STDMETHODCALLTYPE *GetApplicationDesc )( + ID3D12CompilerCacheSession * This); + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, GetCompilerTarget) +#if !defined(_WIN32) + D3D12_COMPILER_TARGET ( STDMETHODCALLTYPE *GetCompilerTarget )( + ID3D12CompilerCacheSession * This); + +#else + D3D12_COMPILER_TARGET *( STDMETHODCALLTYPE *GetCompilerTarget )( + ID3D12CompilerCacheSession * This, + D3D12_COMPILER_TARGET * RetVal); + +#endif + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, GetValueTypes) + D3D12_COMPILER_VALUE_TYPE_FLAGS ( STDMETHODCALLTYPE *GetValueTypes )( + ID3D12CompilerCacheSession * This); + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, StoreGroupValueKeys) + HRESULT ( STDMETHODCALLTYPE *StoreGroupValueKeys )( + ID3D12CompilerCacheSession * This, + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + UINT GroupVersion, + _In_reads_(NumValueKeys) const D3D12_COMPILER_CACHE_VALUE_KEY *pValueKeys, + UINT NumValueKeys); + + DECLSPEC_XFGVIRT(ID3D12CompilerCacheSession, StoreValue) + HRESULT ( STDMETHODCALLTYPE *StoreValue )( + ID3D12CompilerCacheSession * This, + _In_ const D3D12_COMPILER_CACHE_VALUE_KEY *pValueKey, + _In_reads_(NumTypedValues) const D3D12_COMPILER_CACHE_TYPED_CONST_VALUE *pTypedValues, + UINT NumTypedValues); + + END_INTERFACE + } ID3D12CompilerCacheSessionVtbl; + + interface ID3D12CompilerCacheSession + { + CONST_VTBL struct ID3D12CompilerCacheSessionVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12CompilerCacheSession_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12CompilerCacheSession_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12CompilerCacheSession_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12CompilerCacheSession_GetFactory(This,riid,ppCompilerFactory) \ + ( (This)->lpVtbl -> GetFactory(This,riid,ppCompilerFactory) ) + + +#define ID3D12CompilerCacheSession_FindGroup(This,pGroupKey,pGroupVersion) \ + ( (This)->lpVtbl -> FindGroup(This,pGroupKey,pGroupVersion) ) + +#define ID3D12CompilerCacheSession_FindGroupValueKeys(This,pGroupKey,pExpectedGroupVersion,CallbackFunc,pContext) \ + ( (This)->lpVtbl -> FindGroupValueKeys(This,pGroupKey,pExpectedGroupVersion,CallbackFunc,pContext) ) + +#define ID3D12CompilerCacheSession_FindGroupValues(This,pGroupKey,pExpectedGroupVersion,ValueTypeFlags,CallbackFunc,pContext) \ + ( (This)->lpVtbl -> FindGroupValues(This,pGroupKey,pExpectedGroupVersion,ValueTypeFlags,CallbackFunc,pContext) ) + +#define ID3D12CompilerCacheSession_FindValue(This,pValueKey,pTypedValues,NumTypedValues,pCallbackFunc,pContext) \ + ( (This)->lpVtbl -> FindValue(This,pValueKey,pTypedValues,NumTypedValues,pCallbackFunc,pContext) ) + +#define ID3D12CompilerCacheSession_GetApplicationDesc(This) \ + ( (This)->lpVtbl -> GetApplicationDesc(This) ) +#if !defined(_WIN32) + +#define ID3D12CompilerCacheSession_GetCompilerTarget(This) \ + ( (This)->lpVtbl -> GetCompilerTarget(This) ) +#else +#define ID3D12CompilerCacheSession_GetCompilerTarget(This,RetVal) \ + ( (This)->lpVtbl -> GetCompilerTarget(This,RetVal) ) +#endif + +#define ID3D12CompilerCacheSession_GetValueTypes(This) \ + ( (This)->lpVtbl -> GetValueTypes(This) ) + +#define ID3D12CompilerCacheSession_StoreGroupValueKeys(This,pGroupKey,GroupVersion,pValueKeys,NumValueKeys) \ + ( (This)->lpVtbl -> StoreGroupValueKeys(This,pGroupKey,GroupVersion,pValueKeys,NumValueKeys) ) + +#define ID3D12CompilerCacheSession_StoreValue(This,pValueKey,pTypedValues,NumTypedValues) \ + ( (This)->lpVtbl -> StoreValue(This,pValueKey,pTypedValues,NumTypedValues) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12CompilerCacheSession_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12CompilerStateObject_INTERFACE_DEFINED__ +#define __ID3D12CompilerStateObject_INTERFACE_DEFINED__ + +/* interface ID3D12CompilerStateObject */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12CompilerStateObject; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("5981cca4-e8ae-44ca-9b92-4fa86f5a3a3a") + ID3D12CompilerStateObject : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetCompiler( + _In_ REFIID riid, + _COM_Outptr_ void **ppCompiler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12CompilerStateObjectVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12CompilerStateObject * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12CompilerStateObject * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12CompilerStateObject * This); + + DECLSPEC_XFGVIRT(ID3D12CompilerStateObject, GetCompiler) + HRESULT ( STDMETHODCALLTYPE *GetCompiler )( + ID3D12CompilerStateObject * This, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompiler); + + END_INTERFACE + } ID3D12CompilerStateObjectVtbl; + + interface ID3D12CompilerStateObject + { + CONST_VTBL struct ID3D12CompilerStateObjectVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12CompilerStateObject_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12CompilerStateObject_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12CompilerStateObject_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12CompilerStateObject_GetCompiler(This,riid,ppCompiler) \ + ( (This)->lpVtbl -> GetCompiler(This,riid,ppCompiler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12CompilerStateObject_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12compiler_0000_0003 */ +/* [local] */ + +typedef struct D3D12_COMPILER_EXISTING_COLLECTION_DESC + { + ID3D12CompilerStateObject *pExistingCollection; + UINT NumExports; + _In_reads_(NumExports) const D3D12_EXPORT_DESC *pExports; + } D3D12_COMPILER_EXISTING_COLLECTION_DESC; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12compiler_0000_0003_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12compiler_0000_0003_v0_0_s_ifspec; + +#ifndef __ID3D12Compiler_INTERFACE_DEFINED__ +#define __ID3D12Compiler_INTERFACE_DEFINED__ + +/* interface ID3D12Compiler */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12Compiler; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("8c403c12-993b-4583-80f1-6824138fa68e") + ID3D12Compiler : public ID3D12CompilerFactoryChild + { + public: + virtual HRESULT STDMETHODCALLTYPE CompilePipelineState( + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + UINT GroupVersion, + _In_ const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc) = 0; + + virtual HRESULT STDMETHODCALLTYPE CompileStateObject( + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + UINT GroupVersion, + _In_ const D3D12_STATE_OBJECT_DESC *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerStateObject) = 0; + + virtual HRESULT STDMETHODCALLTYPE CompileAddToStateObject( + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + UINT GroupVersion, + _In_ const D3D12_STATE_OBJECT_DESC *pAddition, + _In_ ID3D12CompilerStateObject *pCompilerStateObjectToGrowFrom, + _In_ REFIID riid, + _COM_Outptr_ void **ppNewCompilerStateObject) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetCacheSession( + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerCacheSession) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12CompilerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12Compiler * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12Compiler * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12Compiler * This); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactoryChild, GetFactory) + HRESULT ( STDMETHODCALLTYPE *GetFactory )( + ID3D12Compiler * This, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerFactory); + + DECLSPEC_XFGVIRT(ID3D12Compiler, CompilePipelineState) + HRESULT ( STDMETHODCALLTYPE *CompilePipelineState )( + ID3D12Compiler * This, + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + UINT GroupVersion, + _In_ const D3D12_PIPELINE_STATE_STREAM_DESC *pDesc); + + DECLSPEC_XFGVIRT(ID3D12Compiler, CompileStateObject) + HRESULT ( STDMETHODCALLTYPE *CompileStateObject )( + ID3D12Compiler * This, + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + UINT GroupVersion, + _In_ const D3D12_STATE_OBJECT_DESC *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerStateObject); + + DECLSPEC_XFGVIRT(ID3D12Compiler, CompileAddToStateObject) + HRESULT ( STDMETHODCALLTYPE *CompileAddToStateObject )( + ID3D12Compiler * This, + _In_ const D3D12_COMPILER_CACHE_GROUP_KEY *pGroupKey, + UINT GroupVersion, + _In_ const D3D12_STATE_OBJECT_DESC *pAddition, + _In_ ID3D12CompilerStateObject *pCompilerStateObjectToGrowFrom, + _In_ REFIID riid, + _COM_Outptr_ void **ppNewCompilerStateObject); + + DECLSPEC_XFGVIRT(ID3D12Compiler, GetCacheSession) + HRESULT ( STDMETHODCALLTYPE *GetCacheSession )( + ID3D12Compiler * This, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerCacheSession); + + END_INTERFACE + } ID3D12CompilerVtbl; + + interface ID3D12Compiler + { + CONST_VTBL struct ID3D12CompilerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12Compiler_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12Compiler_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12Compiler_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12Compiler_GetFactory(This,riid,ppCompilerFactory) \ + ( (This)->lpVtbl -> GetFactory(This,riid,ppCompilerFactory) ) + + +#define ID3D12Compiler_CompilePipelineState(This,pGroupKey,GroupVersion,pDesc) \ + ( (This)->lpVtbl -> CompilePipelineState(This,pGroupKey,GroupVersion,pDesc) ) + +#define ID3D12Compiler_CompileStateObject(This,pGroupKey,GroupVersion,pDesc,riid,ppCompilerStateObject) \ + ( (This)->lpVtbl -> CompileStateObject(This,pGroupKey,GroupVersion,pDesc,riid,ppCompilerStateObject) ) + +#define ID3D12Compiler_CompileAddToStateObject(This,pGroupKey,GroupVersion,pAddition,pCompilerStateObjectToGrowFrom,riid,ppNewCompilerStateObject) \ + ( (This)->lpVtbl -> CompileAddToStateObject(This,pGroupKey,GroupVersion,pAddition,pCompilerStateObjectToGrowFrom,riid,ppNewCompilerStateObject) ) + +#define ID3D12Compiler_GetCacheSession(This,riid,ppCompilerCacheSession) \ + ( (This)->lpVtbl -> GetCacheSession(This,riid,ppCompilerCacheSession) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12Compiler_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12CompilerFactory_INTERFACE_DEFINED__ +#define __ID3D12CompilerFactory_INTERFACE_DEFINED__ + +/* interface ID3D12CompilerFactory */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12CompilerFactory; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("c1ee4b59-3f59-47a5-9b4e-a855c858a878") + ID3D12CompilerFactory : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE EnumerateAdapterFamilies( + UINT AdapterFamilyIndex, + _Out_ D3D12_ADAPTER_FAMILY *pAdapterFamily) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumerateAdapterFamilyABIVersions( + UINT AdapterFamilyIndex, + _Inout_ UINT32 *pNumABIVersions, + _Out_writes_opt_(*pNumABIVersions) UINT64 *pABIVersions) = 0; + + virtual HRESULT STDMETHODCALLTYPE EnumerateAdapterFamilyCompilerVersion( + UINT AdapterFamilyIndex, + _Out_ D3D12_VERSION_NUMBER *pCompilerVersion) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetApplicationProfileVersion( + _In_ const D3D12_COMPILER_TARGET *pTarget, + _In_ const D3D12_APPLICATION_DESC *pApplicationDesc, + _Out_ D3D12_VERSION_NUMBER *pApplicationProfileVersion) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateCompilerCacheSession( + _In_reads_(NumPaths) const D3D12_COMPILER_DATABASE_PATH *pPaths, + UINT NumPaths, + _In_opt_ const D3D12_COMPILER_TARGET *pTarget, + _In_opt_ const D3D12_APPLICATION_DESC *pApplicationDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerCacheSession) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateCompiler( + _In_ ID3D12CompilerCacheSession *pCompilerCacheSession, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompiler) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12CompilerFactoryVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12CompilerFactory * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12CompilerFactory * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12CompilerFactory * This); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactory, EnumerateAdapterFamilies) + HRESULT ( STDMETHODCALLTYPE *EnumerateAdapterFamilies )( + ID3D12CompilerFactory * This, + UINT AdapterFamilyIndex, + _Out_ D3D12_ADAPTER_FAMILY *pAdapterFamily); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactory, EnumerateAdapterFamilyABIVersions) + HRESULT ( STDMETHODCALLTYPE *EnumerateAdapterFamilyABIVersions )( + ID3D12CompilerFactory * This, + UINT AdapterFamilyIndex, + _Inout_ UINT32 *pNumABIVersions, + _Out_writes_opt_(*pNumABIVersions) UINT64 *pABIVersions); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactory, EnumerateAdapterFamilyCompilerVersion) + HRESULT ( STDMETHODCALLTYPE *EnumerateAdapterFamilyCompilerVersion )( + ID3D12CompilerFactory * This, + UINT AdapterFamilyIndex, + _Out_ D3D12_VERSION_NUMBER *pCompilerVersion); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactory, GetApplicationProfileVersion) + HRESULT ( STDMETHODCALLTYPE *GetApplicationProfileVersion )( + ID3D12CompilerFactory * This, + _In_ const D3D12_COMPILER_TARGET *pTarget, + _In_ const D3D12_APPLICATION_DESC *pApplicationDesc, + _Out_ D3D12_VERSION_NUMBER *pApplicationProfileVersion); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactory, CreateCompilerCacheSession) + HRESULT ( STDMETHODCALLTYPE *CreateCompilerCacheSession )( + ID3D12CompilerFactory * This, + _In_reads_(NumPaths) const D3D12_COMPILER_DATABASE_PATH *pPaths, + UINT NumPaths, + _In_opt_ const D3D12_COMPILER_TARGET *pTarget, + _In_opt_ const D3D12_APPLICATION_DESC *pApplicationDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompilerCacheSession); + + DECLSPEC_XFGVIRT(ID3D12CompilerFactory, CreateCompiler) + HRESULT ( STDMETHODCALLTYPE *CreateCompiler )( + ID3D12CompilerFactory * This, + _In_ ID3D12CompilerCacheSession *pCompilerCacheSession, + _In_ REFIID riid, + _COM_Outptr_ void **ppCompiler); + + END_INTERFACE + } ID3D12CompilerFactoryVtbl; + + interface ID3D12CompilerFactory + { + CONST_VTBL struct ID3D12CompilerFactoryVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12CompilerFactory_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12CompilerFactory_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12CompilerFactory_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12CompilerFactory_EnumerateAdapterFamilies(This,AdapterFamilyIndex,pAdapterFamily) \ + ( (This)->lpVtbl -> EnumerateAdapterFamilies(This,AdapterFamilyIndex,pAdapterFamily) ) + +#define ID3D12CompilerFactory_EnumerateAdapterFamilyABIVersions(This,AdapterFamilyIndex,pNumABIVersions,pABIVersions) \ + ( (This)->lpVtbl -> EnumerateAdapterFamilyABIVersions(This,AdapterFamilyIndex,pNumABIVersions,pABIVersions) ) + +#define ID3D12CompilerFactory_EnumerateAdapterFamilyCompilerVersion(This,AdapterFamilyIndex,pCompilerVersion) \ + ( (This)->lpVtbl -> EnumerateAdapterFamilyCompilerVersion(This,AdapterFamilyIndex,pCompilerVersion) ) + +#define ID3D12CompilerFactory_GetApplicationProfileVersion(This,pTarget,pApplicationDesc,pApplicationProfileVersion) \ + ( (This)->lpVtbl -> GetApplicationProfileVersion(This,pTarget,pApplicationDesc,pApplicationProfileVersion) ) + +#define ID3D12CompilerFactory_CreateCompilerCacheSession(This,pPaths,NumPaths,pTarget,pApplicationDesc,riid,ppCompilerCacheSession) \ + ( (This)->lpVtbl -> CreateCompilerCacheSession(This,pPaths,NumPaths,pTarget,pApplicationDesc,riid,ppCompilerCacheSession) ) + +#define ID3D12CompilerFactory_CreateCompiler(This,pCompilerCacheSession,riid,ppCompiler) \ + ( (This)->lpVtbl -> CreateCompiler(This,pCompilerCacheSession,riid,ppCompiler) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12CompilerFactory_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12compiler_0000_0005 */ +/* [local] */ + +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ +#pragma endregion +DEFINE_GUID(IID_ID3D12CompilerFactoryChild,0xe0d06420,0x9f31,0x47e8,0xae,0x9a,0xdd,0x2b,0xa2,0x5a,0xc0,0xbc); +DEFINE_GUID(IID_ID3D12CompilerCacheSession,0x5704e5e6,0x054b,0x4738,0xb6,0x61,0x7b,0x0d,0x68,0xd8,0xdd,0xe2); +DEFINE_GUID(IID_ID3D12CompilerStateObject,0x5981cca4,0xe8ae,0x44ca,0x9b,0x92,0x4f,0xa8,0x6f,0x5a,0x3a,0x3a); +DEFINE_GUID(IID_ID3D12Compiler,0x8c403c12,0x993b,0x4583,0x80,0xf1,0x68,0x24,0x13,0x8f,0xa6,0x8e); +DEFINE_GUID(IID_ID3D12CompilerFactory,0xc1ee4b59,0x3f59,0x47a5,0x9b,0x4e,0xa8,0x55,0xc8,0x58,0xa8,0x78); + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12compiler_0000_0005_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12compiler_0000_0005_v0_0_s_ifspec; + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/thirdparty/directx_headers/include/directx/d3d12sdklayers.h b/thirdparty/directx_headers/include/directx/d3d12sdklayers.h index 06aa091b558..96c812b148f 100644 --- a/thirdparty/directx_headers/include/directx/d3d12sdklayers.h +++ b/thirdparty/directx_headers/include/directx/d3d12sdklayers.h @@ -999,7 +999,8 @@ enum D3D12_DEBUG_DEVICE_PARAMETER_TYPE { D3D12_DEBUG_DEVICE_PARAMETER_FEATURE_FLAGS = 0, D3D12_DEBUG_DEVICE_PARAMETER_GPU_BASED_VALIDATION_SETTINGS = ( D3D12_DEBUG_DEVICE_PARAMETER_FEATURE_FLAGS + 1 ) , - D3D12_DEBUG_DEVICE_PARAMETER_GPU_SLOWDOWN_PERFORMANCE_FACTOR = ( D3D12_DEBUG_DEVICE_PARAMETER_GPU_BASED_VALIDATION_SETTINGS + 1 ) + D3D12_DEBUG_DEVICE_PARAMETER_GPU_SLOWDOWN_PERFORMANCE_FACTOR = ( D3D12_DEBUG_DEVICE_PARAMETER_GPU_BASED_VALIDATION_SETTINGS + 1 ) , + D3D12_DEBUG_DEVICE_PARAMETER_BYTECODE_VALIDATION_MODE = ( D3D12_DEBUG_DEVICE_PARAMETER_GPU_SLOWDOWN_PERFORMANCE_FACTOR + 1 ) } D3D12_DEBUG_DEVICE_PARAMETER_TYPE; typedef @@ -1046,6 +1047,15 @@ typedef struct D3D12_DEBUG_DEVICE_GPU_SLOWDOWN_PERFORMANCE_FACTOR FLOAT SlowdownFactor; } D3D12_DEBUG_DEVICE_GPU_SLOWDOWN_PERFORMANCE_FACTOR; +typedef +enum D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE + { + D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_DISABLED = 0, + D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_WHEN_HASH_BYPASSED = ( D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_DISABLED + 1 ) , + D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_ALL_BYTECODE = ( D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_WHEN_HASH_BYPASSED + 1 ) , + D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE_DEFAULT = D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_WHEN_HASH_BYPASSED + } D3D12_DEBUG_DEVICE_BYTECODE_VALIDATION_MODE; + extern RPC_IF_HANDLE __MIDL_itf_d3d12sdklayers_0000_0007_v0_0_c_ifspec; @@ -3312,7 +3322,48 @@ enum D3D12_MESSAGE_ID D3D12_MESSAGE_ID_PIX_EVENT_UNDERFLOW = 1384, D3D12_MESSAGE_ID_RECREATEAT_INVALID_TARGET = 1385, D3D12_MESSAGE_ID_RECREATEAT_INSUFFICIENT_SUPPORT = 1386, - D3D12_MESSAGE_ID_D3D12_MESSAGES_END = ( D3D12_MESSAGE_ID_RECREATEAT_INSUFFICIENT_SUPPORT + 1 ) + D3D12_MESSAGE_ID_GPU_BASED_VALIDATION_STRUCTURED_BUFFER_STRIDE_MISMATCH = 1387, + D3D12_MESSAGE_ID_DISPATCH_GRAPH_INVALID = 1388, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_TARGET_FORMAT_INVALID = 1389, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_TARGET_DIMENSION_INVALID = 1390, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_SOURCE_COLOR_FORMAT_INVALID = 1391, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_SOURCE_DEPTH_FORMAT_INVALID = 1392, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXPOSURE_SCALE_FORMAT_INVALID = 1393, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_ENGINE_CREATE_FLAGS_INVALID = 1394, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_LOAD_FAILURE = 1395, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_ENGINE_CREATION_ERROR = 1396, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_UPSCALER_CREATION_ERROR = 1397, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_EXTENSION_INTERNAL_UPSCALER_EXECUTION_ERROR = 1398, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_REGION_INVALID = 1399, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_TIME_DELTA_INVALID = 1400, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_REQUIRED_TEXTURE_IS_NULL = 1401, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_MOTION_VECTORS_FORMAT_INVALID = 1402, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_FLAGS_INVALID = 1403, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_FORMAT_INVALID = 1404, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_EXPOSURE_SCALE_TEXTURE_SIZE_INVALID = 1405, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_VARIANT_INDEX_OUT_OF_BOUNDS = 1406, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_VARIANT_ID_NOT_FOUND = 1407, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_DUPLICATE_VARIANT_ID = 1408, + D3D12_MESSAGE_ID_DIRECTSR_OUT_OF_MEMORY = 1409, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_UNEXPECTED_TEXTURE_IS_IGNORED = 1410, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EVICT_UNDERFLOW = 1411, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_OPTIONAL_TEXTURE_IS_NULL = 1412, + D3D12_MESSAGE_ID_DIRECTSR_SUPERRES_UPSCALER_EXECUTE_INVALID_CAMERA_JITTER = 1413, + D3D12_MESSAGE_ID_CREATE_STATE_OBJECT_WARNING = 1414, + D3D12_MESSAGE_ID_GUID_TEXTURE_LAYOUT_UNSUPPORTED = 1415, + D3D12_MESSAGE_ID_RESOLVE_ENCODER_INPUT_PARAM_LAYOUT_INVALID_PARAMETERS = 1416, + D3D12_MESSAGE_ID_INVALID_BARRIER_ACCESS = 1417, + D3D12_MESSAGE_ID_COMMAND_LIST_DRAW_INSTANCE_COUNT_ZERO = 1418, + D3D12_MESSAGE_ID_DESCRIPTOR_HEAP_NOT_SET_BEFORE_ROOT_SIGNATURE_WITH_DIRECTLY_INDEXED_FLAG = 1419, + D3D12_MESSAGE_ID_DIFFERENT_DESCRIPTOR_HEAP_SET_AFTER_ROOT_SIGNATURE_WITH_DIRECTLY_INDEXED_FLAG = 1420, + D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED = 1421, + D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED = 1422, + D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR = 1423, + D3D12_MESSAGE_ID_FENCE_ZERO_WAIT = 1424, + D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE = 1431, + D3D12_MESSAGE_ID_CREATEPIPELINESTATE_MULTIPLE_ROOT_SIGNATURES_DEFINED = 1435, + D3D12_MESSAGE_ID_TEXTURE_BARRIER_INVALID_FLAGS = 1436, + D3D12_MESSAGE_ID_D3D12_MESSAGES_END = 1442 } D3D12_MESSAGE_ID; typedef struct D3D12_MESSAGE diff --git a/thirdparty/directx_headers/include/directx/d3d12shader.h b/thirdparty/directx_headers/include/directx/d3d12shader.h index 0acf584e324..56455b5ed74 100644 --- a/thirdparty/directx_headers/include/directx/d3d12shader.h +++ b/thirdparty/directx_headers/include/directx/d3d12shader.h @@ -37,6 +37,8 @@ typedef enum D3D12_SHADER_VERSION_TYPE D3D12_SHVER_MESH_SHADER = 13, D3D12_SHVER_AMPLIFICATION_SHADER = 14, + D3D12_SHVER_NODE_SHADER = 15, + D3D12_SHVER_RESERVED0 = 0xFFF0, } D3D12_SHADER_VERSION_TYPE; @@ -201,8 +203,10 @@ typedef struct _D3D12_SHADER_INPUT_BIND_DESC #define D3D_SHADER_REQUIRES_SAMPLER_DESCRIPTOR_HEAP_INDEXING 0x04000000 #define D3D_SHADER_REQUIRES_WAVE_MMA 0x08000000 #define D3D_SHADER_REQUIRES_ATOMIC_INT64_ON_DESCRIPTOR_HEAP_RESOURCE 0x10000000 -#define D3D_SHADER_FEATURE_ADVANCED_TEXTURE_OPS 0x20000000 -#define D3D_SHADER_FEATURE_WRITEABLE_MSAA_TEXTURES 0x40000000 +#define D3D_SHADER_REQUIRES_ADVANCED_TEXTURE_OPS 0x20000000 +#define D3D_SHADER_REQUIRES_WRITEABLE_MSAA_TEXTURES 0x40000000 +#define D3D_SHADER_REQUIRES_SAMPLE_CMP_GRADIENT_OR_BIAS 0x80000000 +#define D3D_SHADER_REQUIRES_EXTENDED_COMMAND_INFO 0x100000000ull typedef struct _D3D12_LIBRARY_DESC @@ -488,3 +492,4 @@ extern "C" { #endif //__D3D12SHADER_H__ + diff --git a/thirdparty/directx_headers/include/directx/d3d12video.h b/thirdparty/directx_headers/include/directx/d3d12video.h index fe9a17377c9..843e78decf2 100644 --- a/thirdparty/directx_headers/include/directx/d3d12video.h +++ b/thirdparty/directx_headers/include/directx/d3d12video.h @@ -241,6 +241,27 @@ typedef interface ID3D12VideoEncodeCommandList3 ID3D12VideoEncodeCommandList3; #endif /* __ID3D12VideoEncodeCommandList3_FWD_DEFINED__ */ +#ifndef __ID3D12VideoEncoderHeap1_FWD_DEFINED__ +#define __ID3D12VideoEncoderHeap1_FWD_DEFINED__ +typedef interface ID3D12VideoEncoderHeap1 ID3D12VideoEncoderHeap1; + +#endif /* __ID3D12VideoEncoderHeap1_FWD_DEFINED__ */ + + +#ifndef __ID3D12VideoDevice4_FWD_DEFINED__ +#define __ID3D12VideoDevice4_FWD_DEFINED__ +typedef interface ID3D12VideoDevice4 ID3D12VideoDevice4; + +#endif /* __ID3D12VideoDevice4_FWD_DEFINED__ */ + + +#ifndef __ID3D12VideoEncodeCommandList4_FWD_DEFINED__ +#define __ID3D12VideoEncodeCommandList4_FWD_DEFINED__ +typedef interface ID3D12VideoEncodeCommandList4 ID3D12VideoEncodeCommandList4; + +#endif /* __ID3D12VideoEncodeCommandList4_FWD_DEFINED__ */ + + /* header files for imported files */ #include "oaidl.h" #include "ocidl.h" @@ -340,7 +361,15 @@ enum D3D12_FEATURE_VIDEO D3D12_FEATURE_VIDEO_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 44, D3D12_FEATURE_VIDEO_ENCODER_RESOURCE_REQUIREMENTS = 45, D3D12_FEATURE_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG = 46, - D3D12_FEATURE_VIDEO_ENCODER_SUPPORT1 = 47 + D3D12_FEATURE_VIDEO_ENCODER_SUPPORT1 = 47, + D3D12_FEATURE_VIDEO_ENCODER_RESOURCE_REQUIREMENTS1 = 48, + D3D12_FEATURE_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT = 49, + D3D12_FEATURE_VIDEO_ENCODER_QPMAP_INPUT = 50, + D3D12_FEATURE_VIDEO_ENCODER_DIRTY_REGIONS = 51, + D3D12_FEATURE_VIDEO_ENCODER_MOTION_SEARCH = 52, + D3D12_FEATURE_VIDEO_ENCODER_SUPPORT2 = 55, + D3D12_FEATURE_VIDEO_ENCODER_HEAP_SIZE1 = 56, + D3D12_FEATURE_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS = 57 } D3D12_FEATURE_VIDEO; typedef @@ -409,7 +438,7 @@ enum D3D12_VIDEO_PROCESS_FILTER_FLAGS D3D12_VIDEO_PROCESS_FILTER_FLAG_STEREO_ADJUSTMENT = ( 1 << D3D12_VIDEO_PROCESS_FILTER_STEREO_ADJUSTMENT ) } D3D12_VIDEO_PROCESS_FILTER_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FILTER_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FILTER_FLAGS ) typedef enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS { @@ -418,7 +447,7 @@ enum D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS D3D12_VIDEO_PROCESS_DEINTERLACE_FLAG_CUSTOM = 0x80000000 } D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_DEINTERLACE_FLAGS ) typedef struct D3D12_VIDEO_PROCESS_ALPHA_BLENDING { BOOL Enable; @@ -931,7 +960,7 @@ enum D3D12_VIDEO_DECODE_SUPPORT_FLAGS D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED = 0x1 } D3D12_VIDEO_DECODE_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_SUPPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_SUPPORT_FLAGS ) typedef enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS { @@ -942,7 +971,7 @@ enum D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS D3D12_VIDEO_DECODE_CONFIGURATION_FLAG_ALLOW_RESOLUTION_CHANGE_ON_NON_KEY_FRAME = 0x8 } D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONFIGURATION_FLAGS ) typedef enum D3D12_VIDEO_DECODE_STATUS { @@ -959,7 +988,7 @@ enum D3D12_VIDEO_DECODE_ARGUMENT_TYPE D3D12_VIDEO_DECODE_ARGUMENT_TYPE_PICTURE_PARAMETERS = 0, D3D12_VIDEO_DECODE_ARGUMENT_TYPE_INVERSE_QUANTIZATION_MATRIX = 1, D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL = 2, - D3D12_VIDEO_DECODE_ARGUMENT_TYPE_MAX_VALID = 3 + D3D12_VIDEO_DECODE_ARGUMENT_TYPE_HUFFMAN_TABLE = 3 } D3D12_VIDEO_DECODE_ARGUMENT_TYPE; typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_SUPPORT @@ -1034,7 +1063,7 @@ enum D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAG_A = ( 1 << D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_A ) } D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_HISTOGRAM_COMPONENT_FLAGS ) typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_HISTOGRAM { UINT NodeIndex; @@ -1054,16 +1083,17 @@ enum D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAG_SUPPORTED = 0x1 } D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_DECODE_CONVERSION_SUPPORT_FLAGS ) typedef enum D3D12_VIDEO_SCALE_SUPPORT_FLAGS { D3D12_VIDEO_SCALE_SUPPORT_FLAG_NONE = 0, D3D12_VIDEO_SCALE_SUPPORT_FLAG_POW2_ONLY = 0x1, - D3D12_VIDEO_SCALE_SUPPORT_FLAG_EVEN_DIMENSIONS_ONLY = 0x2 + D3D12_VIDEO_SCALE_SUPPORT_FLAG_EVEN_DIMENSIONS_ONLY = 0x2, + D3D12_VIDEO_SCALE_SUPPORT_FLAG_DPB_ENCODER_RESOURCES = 0x4 } D3D12_VIDEO_SCALE_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_SCALE_SUPPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_SCALE_SUPPORT_FLAGS ) typedef struct D3D12_VIDEO_SCALE_SUPPORT { D3D12_VIDEO_SIZE_RANGE OutputSizeRange; @@ -1354,7 +1384,7 @@ enum D3D12_VIDEO_PROCESS_FEATURE_FLAGS D3D12_VIDEO_PROCESS_FEATURE_FLAG_PIXEL_ASPECT_RATIO = 0x40 } D3D12_VIDEO_PROCESS_FEATURE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FEATURE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_FEATURE_FLAGS ) typedef enum D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS { @@ -1370,7 +1400,7 @@ enum D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAG_CUSTOM = 0x80000000 } D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_AUTO_PROCESSING_FLAGS ) typedef enum D3D12_VIDEO_PROCESS_ORIENTATION { @@ -1392,7 +1422,7 @@ enum D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAG_FRAME_REPEAT = 0x2 } D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_INPUT_STREAM_FLAGS ) typedef struct D3D12_VIDEO_PROCESS_FILTER_RANGE { INT Minimum; @@ -1408,7 +1438,7 @@ enum D3D12_VIDEO_PROCESS_SUPPORT_FLAGS D3D12_VIDEO_PROCESS_SUPPORT_FLAG_SUPPORTED = 0x1 } D3D12_VIDEO_PROCESS_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_SUPPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROCESS_SUPPORT_FLAGS ) typedef struct D3D12_FEATURE_DATA_VIDEO_PROCESS_SUPPORT { UINT NodeIndex; @@ -2763,7 +2793,7 @@ enum D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAG_16X16 = ( 1 << D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_16X16 ) } D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_SEARCH_BLOCK_SIZE_FLAGS ) typedef enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION { @@ -2777,7 +2807,7 @@ enum D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAG_QUARTER_PEL = ( 1 << D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_QUARTER_PEL ) } D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_MOTION_ESTIMATOR_VECTOR_PRECISION_FLAGS ) typedef struct D3D12_FEATURE_DATA_VIDEO_FEATURE_AREA_SUPPORT { UINT NodeIndex; @@ -3707,7 +3737,7 @@ enum D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAG_SUPPORTED = 0x1 } D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_PROTECTED_RESOURCE_SUPPORT_FLAGS ) typedef struct D3D12_FEATURE_DATA_VIDEO_DECODE_PROTECTED_RESOURCES { UINT NodeIndex; @@ -3782,7 +3812,7 @@ enum D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAG_WRITE = 0x2 } D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS ); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_EXTENSION_COMMAND_PARAMETER_FLAGS ) typedef struct D3D12_FEATURE_DATA_VIDEO_EXTENSION_COMMAND_COUNT { UINT NodeIndex; @@ -6331,6 +6361,13 @@ DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE1, 0x6936ff0f, 0x45b1, 0x4163, DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE2, 0x0c5f2aa1, 0xe541, 0x4089, 0xbb, 0x7b, 0x98, 0x11, 0x0a, 0x19, 0xd7, 0xc8); DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2, 0x17127009, 0xa00f, 0x4ce1, 0x99, 0x4e, 0xbf, 0x40, 0x81, 0xf6, 0xf3, 0xf0); DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_AV1_12BIT_PROFILE2_420, 0x2d80bed6, 0x9cac, 0x4835, 0x9e, 0x91, 0x32, 0x7b, 0xbc, 0x4f, 0x9e, 0xe8); +DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_420, 0x725cb506, 0xc29, 0x43c4, 0x94, 0x40, 0x8e, 0x93, 0x97, 0x90, 0x3a, 0x4); +DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_422, 0x5b77b9cd, 0x1a35, 0x4c30, 0x9f, 0xd8, 0xef, 0x4b, 0x60, 0xc0, 0x35, 0xdd); +DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_444, 0xd95161f9, 0xd44, 0x47e6, 0xbc, 0xf5, 0x1b, 0xfb, 0xfb, 0x26, 0x8f, 0x97); +DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_MJPEG_VLD_4444, 0xc91748d5, 0xfd18, 0x4aca, 0x9d, 0xb3, 0x3a, 0x66, 0x34, 0xab, 0x54, 0x7d); +DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_420, 0xcf782c83, 0xbef5, 0x4a2c, 0x87, 0xcb, 0x60, 0x19, 0xe7, 0xb1, 0x75, 0xac); +DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_422, 0xf04df417, 0xeee2, 0x4067, 0xa7, 0x78, 0xf3, 0x5c, 0x15, 0xab, 0x97, 0x21); +DEFINE_GUID(D3D12_VIDEO_DECODE_PROFILE_JPEG_VLD_444, 0x4cd00e17, 0x89ba, 0x48ef, 0xb9, 0xf9, 0xed, 0xcb, 0x82, 0x71, 0x3f, 0x65); typedef enum D3D12_VIDEO_ENCODER_AV1_PROFILE { @@ -6413,7 +6450,7 @@ enum D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAG_DELTA_LF_PARAMS = 0x2000000 } D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS) typedef enum D3D12_VIDEO_ENCODER_AV1_TX_MODE { @@ -6431,7 +6468,7 @@ enum D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAG_SELECT = ( 1 << D3D12_VIDEO_ENCODER_AV1_TX_MODE_SELECT ) } D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_TX_MODE_FLAGS) typedef enum D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS { @@ -6453,7 +6490,7 @@ enum D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAG_SWITCHABLE = ( 1 << D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_SWITCHABLE ) } D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_INTERPOLATION_FILTERS_FLAGS) typedef enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_BLOCK_SIZE { @@ -6493,7 +6530,7 @@ enum D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAG_ALT_GLOBALMV = ( 1 << D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_ALT_GLOBALMV ) } D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_SEGMENTATION_MODE_FLAGS) typedef enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE { @@ -6523,7 +6560,7 @@ enum D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAG_256x256 = 0x8 } D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_RESTORATION_SUPPORT_FLAGS) typedef enum D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION { @@ -6543,7 +6580,7 @@ enum D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAG_AFFINE = ( 1 << D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_AFFINE ) } D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_REFERENCE_WARPED_MOTION_TRANSFORMATION_FLAGS) typedef enum D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS { @@ -6559,7 +6596,7 @@ enum D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAG_REFERENCE_INDICES = 0x100 } D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_POST_ENCODE_VALUES_FLAGS) typedef struct D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT { D3D12_VIDEO_ENCODER_AV1_FEATURE_FLAGS SupportedFeatureFlags; @@ -6593,7 +6630,7 @@ enum D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME = ( 1 << D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_SWITCH_FRAME ) } D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAGS) typedef enum D3D12_VIDEO_ENCODER_AV1_COMP_PREDICTION_TYPE { @@ -6660,7 +6697,7 @@ enum D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAG_ALLOW_HIGH_PRECISION_MV = 0x4000 } D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_FLAGS) typedef struct D3D12_VIDEO_ENCODER_AV1_RESTORATION_CONFIG { D3D12_VIDEO_ENCODER_AV1_RESTORATION_TYPE FrameRestorationType[ 3 ]; @@ -6809,10 +6846,11 @@ enum D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_MAX_FRAME_SIZE = 0x10, D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_VBV_SIZES = 0x20, D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_EXTENSION1_SUPPORT = 0x40, - D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QUALITY_VS_SPEED = 0x80 + D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_QUALITY_VS_SPEED = 0x80, + D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAG_ENABLE_SPATIAL_ADAPTIVE_QP = 0x100 } D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_RATE_CONTROL_FLAGS) typedef struct D3D12_VIDEO_ENCODER_RATE_CONTROL_CQP { UINT ConstantQP_FullIntracodedFrame; @@ -6958,7 +6996,14 @@ typedef enum D3D12_VIDEO_ENCODER_PROFILE_HEVC { D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN = 0, - D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10 = 1 + D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10 = 1, + D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12 = 2, + D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10_422 = 3, + D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12_422 = 4, + D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN_444 = 5, + D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN10_444 = 6, + D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN12_444 = 7, + D3D12_VIDEO_ENCODER_PROFILE_HEVC_MAIN16_444 = 8 } D3D12_VIDEO_ENCODER_PROFILE_HEVC; typedef struct D3D12_VIDEO_ENCODER_PROFILE_DESC @@ -7124,7 +7169,8 @@ enum D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_ROWS_PER_SUBREGION = 3, D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_PARTITIONING_SUBREGIONS_PER_FRAME = 4, D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_UNIFORM_GRID_PARTITION = 5, - D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_CONFIGURABLE_GRID_PARTITION = 6 + D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_CONFIGURABLE_GRID_PARTITION = 6, + D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE_AUTO = 7 } D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE; typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE @@ -7151,7 +7197,7 @@ enum D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAG_TOTAL_TILES = 0x80 } D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_VALIDATION_FLAGS) typedef struct D3D12_VIDEO_ENCODER_AV1_FRAME_SUBREGION_LAYOUT_CONFIG_SUPPORT { BOOL Use128SuperBlocks; @@ -7192,10 +7238,14 @@ typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_CONFIG typedef enum D3D12_VIDEO_ENCODER_HEAP_FLAGS { - D3D12_VIDEO_ENCODER_HEAP_FLAG_NONE = 0 + D3D12_VIDEO_ENCODER_HEAP_FLAG_NONE = 0, + D3D12_VIDEO_ENCODER_HEAP_FLAG_ALLOW_SUBREGION_NOTIFICATION_ARRAY_OF_BUFFERS = 0x1, + D3D12_VIDEO_ENCODER_HEAP_FLAG_ALLOW_SUBREGION_NOTIFICATION_SINGLE_BUFFER = 0x2, + D3D12_VIDEO_ENCODER_HEAP_FLAG_ALLOW_DIRTY_REGIONS = 0x4, + D3D12_VIDEO_ENCODER_HEAP_FLAG_ALLOW_RATE_CONTROL_FRAME_ANALYSIS = 0x8 } D3D12_VIDEO_ENCODER_HEAP_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_HEAP_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_HEAP_FLAGS) typedef struct D3D12_VIDEO_ENCODER_HEAP_DESC { UINT NodeMask; @@ -7225,10 +7275,11 @@ enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_ADAPTIVE_8x8_TRANSFORM_ENCODING_SUPPORT = 0x8, D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_SPATIAL_ENCODING_SUPPORT = 0x10, D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_DIRECT_TEMPORAL_ENCODING_SUPPORT = 0x20, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x40 + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_CONSTRAINED_INTRAPREDICTION_SUPPORT = 0x40, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAG_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE_SUPPORT = 0x80 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS) typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODES { @@ -7254,7 +7305,7 @@ enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAG_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING = ( 1 << D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_6_DISABLE_CHROMA_BLOCK_EDGES_AND_USE_LUMA_TWO_STAGE_DEBLOCKING ) } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_SLICES_DEBLOCKING_MODE_FLAGS) typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 { D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264_FLAGS SupportFlags; @@ -7273,10 +7324,33 @@ enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_ASYMETRIC_MOTION_PARTITION_REQUIRED = 0x20, D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_SUPPORT = 0x40, D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_DISABLING_LOOP_FILTER_ACROSS_SLICES_SUPPORT = 0x80, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_P_FRAMES_IMPLEMENTED_AS_LOW_DELAY_B_FRAMES = 0x100 + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_P_FRAMES_IMPLEMENTED_AS_LOW_DELAY_B_FRAMES = 0x100, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE_SUPPORT = 0x200, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_ROTATION_ENABLED_SUPPORT = 0x400, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_ROTATION_ENABLED_REQUIRED = 0x800, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT_ENABLED_SUPPORT = 0x1000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT_ENABLED_REQUIRED = 0x2000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_IMPLICIT_RDPCM_ENABLED_SUPPORT = 0x4000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_IMPLICIT_RDPCM_ENABLED_REQUIRED = 0x8000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXPLICIT_RDPCM_ENABLED_SUPPORT = 0x10000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXPLICIT_RDPCM_ENABLED_REQUIRED = 0x20000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING_SUPPORT = 0x40000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING_REQUIRED = 0x80000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SMOOTHING_DISABLED_SUPPORT = 0x100000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_INTRA_SMOOTHING_DISABLED_REQUIRED = 0x200000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_HIGH_PRECISION_OFFSETS_ENABLED_SUPPORT = 0x400000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_HIGH_PRECISION_OFFSETS_ENABLED_REQUIRED = 0x800000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION_ENABLED_SUPPORT = 0x1000000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION_ENABLED_REQUIRED = 0x2000000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT_ENABLED_SUPPORT = 0x4000000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT_ENABLED_REQUIRED = 0x8000000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CROSS_COMPONENT_PREDICTION_ENABLED_FLAG_SUPPORT = 0x10000000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CROSS_COMPONENT_PREDICTION_ENABLED_FLAG_REQUIRED = 0x20000000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CHROMA_QP_OFFSET_LIST_ENABLED_FLAG_SUPPORT = 0x40000000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG_CHROMA_QP_OFFSET_LIST_ENABLED_FLAG_REQUIRED = 0x80000000 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS) typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE { @@ -7306,6 +7380,34 @@ typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC UCHAR max_transform_hierarchy_depth_intra; } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC; +typedef +enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1 + { + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_NONE = 0, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_SEPARATE_COLOUR_PLANE_SUPPORT = 0x1, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAG1_SEPARATE_COLOUR_PLANE_REQUIRED = 0x2 + } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1; + +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1) +typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1 + { + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS SupportFlags; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MinLumaCodingUnitSize; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_CUSIZE MaxLumaCodingUnitSize; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MinLumaTransformUnitSize; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_TUSIZE MaxLumaTransformUnitSize; + UCHAR max_transform_hierarchy_depth_inter; + UCHAR max_transform_hierarchy_depth_intra; + UINT allowed_diff_cu_chroma_qp_offset_depth_values; + UINT allowed_log2_sao_offset_scale_luma_values; + UINT allowed_log2_sao_offset_scale_chroma_values; + UINT allowed_log2_max_transform_skip_block_size_minus2_values; + UINT allowed_chroma_qp_offset_list_len_minus1_values; + UINT allowed_cb_qp_offset_list_values[ 6 ]; + UINT allowed_cr_qp_offset_list_values[ 6 ]; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC_FLAGS1 SupportFlags1; + } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1; + typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT { UINT DataSize; @@ -7313,6 +7415,7 @@ typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT { D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264 *pH264Support; D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC *pHEVCSupport; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_HEVC1 *pHEVCSupport1; D3D12_VIDEO_ENCODER_AV1_CODEC_CONFIGURATION_SUPPORT *pAV1Support; } ; } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT; @@ -7382,10 +7485,19 @@ enum D3D12_VIDEO_ENCODER_SUPPORT_FLAGS D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SEQUENCE_GOP_RECONFIGURATION_AVAILABLE = 0x800, D3D12_VIDEO_ENCODER_SUPPORT_FLAG_MOTION_ESTIMATION_PRECISION_MODE_LIMIT_AVAILABLE = 0x1000, D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_EXTENSION1_SUPPORT = 0x2000, - D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_QUALITY_VS_SPEED_AVAILABLE = 0x4000 + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_QUALITY_VS_SPEED_AVAILABLE = 0x4000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_READABLE_RECONSTRUCTED_PICTURE_LAYOUT_AVAILABLE = 0x8000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_PER_BLOCK_QP_MAP_METADATA_AVAILABLE = 0x10000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_PER_BLOCK_SATD_MAP_METADATA_AVAILABLE = 0x20000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_PER_BLOCK_RC_BIT_ALLOCATION_MAP_METADATA_AVAILABLE = 0x40000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_NOTIFICATION_ARRAY_OF_BUFFERS_AVAILABLE = 0x80000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGION_NOTIFICATION_SINGLE_BUFFER_AVAILABLE = 0x100000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_FRAME_PSNR_METADATA_AVAILABLE = 0x200000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_SUBREGIONS_PSNR_METADATA_AVAILABLE = 0x400000, + D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RATE_CONTROL_SPATIAL_ADAPTIVE_QP_AVAILABLE = 0x800000 } D3D12_VIDEO_ENCODER_SUPPORT_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SUPPORT_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SUPPORT_FLAGS) typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS { @@ -7396,7 +7508,7 @@ enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ALLOW_REQUEST_INTRA_CONSTRAINED_SLICES = 0x8 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAGS) typedef enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_DIRECT_MODES { @@ -7422,10 +7534,20 @@ enum D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_LONG_TERM_REFERENCES = 0x8, D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_ASYMETRIC_MOTION_PARTITION = 0x10, D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_ENABLE_TRANSFORM_SKIPPING = 0x20, - D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x40 + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_USE_CONSTRAINED_INTRAPREDICTION = 0x40, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_TRANSFORM_SKIP_ROTATION = 0x80, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_TRANSFORM_SKIP_CONTEXT = 0x100, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_IMPLICIT_RDPCM = 0x200, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_EXPLICIT_RDPCM = 0x400, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_EXTENDED_PRECISION_PROCESSING = 0x800, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_INTRA_SMOOTHING_DISABLED = 0x1000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_HIGH_PRECISION_OFFSETS = 0x2000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_PERSISTENT_RICE_ADAPTATION = 0x4000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_CABAC_BYPASS_ALIGNMENT = 0x8000, + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAG_SEPARATE_COLOUR_PLANE = 0x10000 } D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS) typedef struct D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC { D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_FLAGS ConfigurationFlags; @@ -7485,10 +7607,14 @@ enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED = 0x100, D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST = 0x200, D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED = 0x800, - D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_DATA_NOT_SUPPORTED = 0x1000 + D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_DATA_NOT_SUPPORTED = 0x1000, + D3D12_VIDEO_ENCODER_VALIDATION_FLAG_QPMAP_NOT_SUPPORTED = 0x2000, + D3D12_VIDEO_ENCODER_VALIDATION_FLAG_DIRTY_REGIONS_NOT_SUPPORTED = 0x4000, + D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED = 0x8000, + D3D12_VIDEO_ENCODER_VALIDATION_FLAG_FRAME_ANALYSIS_NOT_SUPPORTED = 0x10000 } D3D12_VIDEO_ENCODER_VALIDATION_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS) typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 { UINT GOPLength; @@ -7599,7 +7725,7 @@ enum D3D12_VIDEO_ENCODER_FLAGS D3D12_VIDEO_ENCODER_FLAG_NONE = 0 } D3D12_VIDEO_ENCODER_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_FLAGS) typedef struct D3D12_VIDEO_ENCODER_DESC { UINT NodeMask; @@ -8253,10 +8379,11 @@ typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS { D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1 + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1, + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAG_REQUEST_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE = 0x2 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS) typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION { UCHAR memory_management_control_operation; @@ -8321,10 +8448,13 @@ typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS { D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1 + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_INTRA_CONSTRAINED_SLICES = 0x1, + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_REQUEST_NUM_REF_IDX_ACTIVE_OVERRIDE_FLAG_SLICE = 0x2, + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_CROSS_COMPONENT_PREDICTION = 0x4, + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAG_CHROMA_QP_OFFSET_LIST = 0x8 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS) typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC { D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags; @@ -8346,6 +8476,34 @@ typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC _Field_size_full_(QPMapValuesCount) INT8 *pRateControlQPMap; } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC; +typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1 + { + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags; + D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType; + UINT slice_pic_parameter_set_id; + UINT PictureOrderCountNumber; + UINT TemporalLayerIndex; + UINT List0ReferenceFramesCount; + _Field_size_full_(List0ReferenceFramesCount) UINT *pList0ReferenceFrames; + UINT List1ReferenceFramesCount; + _Field_size_full_(List1ReferenceFramesCount) UINT *pList1ReferenceFrames; + UINT ReferenceFramesReconPictureDescriptorsCount; + _Field_size_full_(ReferenceFramesReconPictureDescriptorsCount) D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC *pReferenceFramesReconPictureDescriptors; + UINT List0RefPicModificationsCount; + _Field_size_full_(List0RefPicModificationsCount) UINT *pList0RefPicModifications; + UINT List1RefPicModificationsCount; + _Field_size_full_(List1RefPicModificationsCount) UINT *pList1RefPicModifications; + UINT QPMapValuesCount; + _Field_size_full_(QPMapValuesCount) INT8 *pRateControlQPMap; + UCHAR diff_cu_chroma_qp_offset_depth; + UCHAR log2_sao_offset_scale_luma; + UCHAR log2_sao_offset_scale_chroma; + UCHAR log2_max_transform_skip_block_size_minus2; + UCHAR chroma_qp_offset_list_len_minus1; + CHAR cb_qp_offset_list[ 6 ]; + CHAR cr_qp_offset_list[ 6 ]; + } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1; + typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA { UINT DataSize; @@ -8353,6 +8511,7 @@ typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA { D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 *pH264PicData; D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC *pHEVCPicData; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC1 *pHEVCPicData1; D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA *pAV1PicData; } ; } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA; @@ -8368,10 +8527,13 @@ typedef enum D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS { D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_NONE = 0, - D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_USED_AS_REFERENCE_PICTURE = 0x1 + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_USED_AS_REFERENCE_PICTURE = 0x1, + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_ENABLE_QUANTIZATION_MATRIX_INPUT = 0x2, + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_ENABLE_DIRTY_REGIONS_INPUT = 0x4, + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_ENABLE_MOTION_VECTORS_INPUT = 0x8 } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS) typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC { UINT IntraRefreshFrameIndex; @@ -8391,7 +8553,7 @@ enum D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAG_GOP_SEQUENCE_CHANGE = 0x10 } D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS) typedef struct D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC { D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_FLAGS Flags; @@ -8442,7 +8604,7 @@ enum D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAG_INVALID_METADATA_BUFFER_SOURCE = 0x10 } D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS; -DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS); +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_ENCODE_ERROR_FLAGS) typedef struct D3D12_VIDEO_ENCODER_OUTPUT_METADATA_STATISTICS { UINT64 AverageQP; @@ -9154,6 +9316,1366 @@ EXTERN_C const IID IID_ID3D12VideoEncodeCommandList3; /* interface __MIDL_itf_d3d12video_0000_0027 */ /* [local] */ +typedef struct D3D12_VIDEO_ENCODER_HEAP_DESC1 + { + UINT NodeMask; + D3D12_VIDEO_ENCODER_HEAP_FLAGS Flags; + D3D12_VIDEO_ENCODER_CODEC EncodeCodec; + D3D12_VIDEO_ENCODER_PROFILE_DESC EncodeProfile; + D3D12_VIDEO_ENCODER_LEVEL_SETTING EncodeLevel; + UINT ResolutionsListCount; + _Field_size_full_(ResolutionsListCount) const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList; + UINT Pow2DownscaleFactor; + } D3D12_VIDEO_ENCODER_HEAP_DESC1; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0027_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0027_v0_0_s_ifspec; + +#ifndef __ID3D12VideoEncoderHeap1_INTERFACE_DEFINED__ +#define __ID3D12VideoEncoderHeap1_INTERFACE_DEFINED__ + +/* interface ID3D12VideoEncoderHeap1 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12VideoEncoderHeap1; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("ea8f1968-4aa0-43a4-9d30-ba86ec84d4f9") + ID3D12VideoEncoderHeap1 : public ID3D12VideoEncoderHeap + { + public: + virtual UINT STDMETHODCALLTYPE GetPow2DownscaleFactor( void) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12VideoEncoderHeap1Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12VideoEncoderHeap1 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12VideoEncoderHeap1 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12VideoEncoderHeap1 * This); + + DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) + HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( + ID3D12VideoEncoderHeap1 * This, + _In_ REFGUID guid, + _Inout_ UINT *pDataSize, + _Out_writes_bytes_opt_( *pDataSize ) void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) + HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( + ID3D12VideoEncoderHeap1 * This, + _In_ REFGUID guid, + _In_ UINT DataSize, + _In_reads_bytes_opt_( DataSize ) const void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) + HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( + ID3D12VideoEncoderHeap1 * This, + _In_ REFGUID guid, + _In_opt_ const IUnknown *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetName) + HRESULT ( STDMETHODCALLTYPE *SetName )( + ID3D12VideoEncoderHeap1 * This, + _In_z_ LPCWSTR Name); + + DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) + HRESULT ( STDMETHODCALLTYPE *GetDevice )( + ID3D12VideoEncoderHeap1 * This, + REFIID riid, + _COM_Outptr_opt_ void **ppvDevice); + + DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetNodeMask) + UINT ( STDMETHODCALLTYPE *GetNodeMask )( + ID3D12VideoEncoderHeap1 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetEncoderHeapFlags) + D3D12_VIDEO_ENCODER_HEAP_FLAGS ( STDMETHODCALLTYPE *GetEncoderHeapFlags )( + ID3D12VideoEncoderHeap1 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetCodec) + D3D12_VIDEO_ENCODER_CODEC ( STDMETHODCALLTYPE *GetCodec )( + ID3D12VideoEncoderHeap1 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetCodecProfile) + HRESULT ( STDMETHODCALLTYPE *GetCodecProfile )( + ID3D12VideoEncoderHeap1 * This, + _Inout_ D3D12_VIDEO_ENCODER_PROFILE_DESC dstProfile); + + DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetCodecLevel) + HRESULT ( STDMETHODCALLTYPE *GetCodecLevel )( + ID3D12VideoEncoderHeap1 * This, + _Inout_ D3D12_VIDEO_ENCODER_LEVEL_SETTING dstLevel); + + DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetResolutionListCount) + UINT ( STDMETHODCALLTYPE *GetResolutionListCount )( + ID3D12VideoEncoderHeap1 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap, GetResolutionList) + HRESULT ( STDMETHODCALLTYPE *GetResolutionList )( + ID3D12VideoEncoderHeap1 * This, + const UINT ResolutionsListCount, + _Out_writes_(ResolutionsListCount) D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList); + + DECLSPEC_XFGVIRT(ID3D12VideoEncoderHeap1, GetPow2DownscaleFactor) + UINT ( STDMETHODCALLTYPE *GetPow2DownscaleFactor )( + ID3D12VideoEncoderHeap1 * This); + + END_INTERFACE + } ID3D12VideoEncoderHeap1Vtbl; + + interface ID3D12VideoEncoderHeap1 + { + CONST_VTBL struct ID3D12VideoEncoderHeap1Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12VideoEncoderHeap1_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12VideoEncoderHeap1_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12VideoEncoderHeap1_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12VideoEncoderHeap1_GetPrivateData(This,guid,pDataSize,pData) \ + ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) + +#define ID3D12VideoEncoderHeap1_SetPrivateData(This,guid,DataSize,pData) \ + ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) + +#define ID3D12VideoEncoderHeap1_SetPrivateDataInterface(This,guid,pData) \ + ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) + +#define ID3D12VideoEncoderHeap1_SetName(This,Name) \ + ( (This)->lpVtbl -> SetName(This,Name) ) + + +#define ID3D12VideoEncoderHeap1_GetDevice(This,riid,ppvDevice) \ + ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) + + + +#define ID3D12VideoEncoderHeap1_GetNodeMask(This) \ + ( (This)->lpVtbl -> GetNodeMask(This) ) + +#define ID3D12VideoEncoderHeap1_GetEncoderHeapFlags(This) \ + ( (This)->lpVtbl -> GetEncoderHeapFlags(This) ) + +#define ID3D12VideoEncoderHeap1_GetCodec(This) \ + ( (This)->lpVtbl -> GetCodec(This) ) + +#define ID3D12VideoEncoderHeap1_GetCodecProfile(This,dstProfile) \ + ( (This)->lpVtbl -> GetCodecProfile(This,dstProfile) ) + +#define ID3D12VideoEncoderHeap1_GetCodecLevel(This,dstLevel) \ + ( (This)->lpVtbl -> GetCodecLevel(This,dstLevel) ) + +#define ID3D12VideoEncoderHeap1_GetResolutionListCount(This) \ + ( (This)->lpVtbl -> GetResolutionListCount(This) ) + +#define ID3D12VideoEncoderHeap1_GetResolutionList(This,ResolutionsListCount,pResolutionList) \ + ( (This)->lpVtbl -> GetResolutionList(This,ResolutionsListCount,pResolutionList) ) + + +#define ID3D12VideoEncoderHeap1_GetPow2DownscaleFactor(This) \ + ( (This)->lpVtbl -> GetPow2DownscaleFactor(This) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12VideoEncoderHeap1_INTERFACE_DEFINED__ */ + + +#ifndef __ID3D12VideoDevice4_INTERFACE_DEFINED__ +#define __ID3D12VideoDevice4_INTERFACE_DEFINED__ + +/* interface ID3D12VideoDevice4 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12VideoDevice4; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("e59ad09e-f1ae-42bb-8983-9f6e5586c4eb") + ID3D12VideoDevice4 : public ID3D12VideoDevice3 + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateVideoEncoderHeap1( + _In_ const D3D12_VIDEO_ENCODER_HEAP_DESC1 *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoEncoderHeap) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12VideoDevice4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12VideoDevice4 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12VideoDevice4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12VideoDevice4 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice, CheckFeatureSupport) + HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( + ID3D12VideoDevice4 * This, + D3D12_FEATURE_VIDEO FeatureVideo, + _Inout_updates_bytes_(FeatureSupportDataSize) void *pFeatureSupportData, + UINT FeatureSupportDataSize); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoder) + HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoder )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoDecoder); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoDecoderHeap) + HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoderHeap )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoDecoderHeap); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice, CreateVideoProcessor) + HRESULT ( STDMETHODCALLTYPE *CreateVideoProcessor )( + ID3D12VideoDevice4 * This, + UINT NodeMask, + _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, + UINT NumInputStreamDescs, + _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoProcessor); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice1, CreateVideoMotionEstimator) + HRESULT ( STDMETHODCALLTYPE *CreateVideoMotionEstimator )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_DESC *pDesc, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoMotionEstimator); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice1, CreateVideoMotionVectorHeap) + HRESULT ( STDMETHODCALLTYPE *CreateVideoMotionVectorHeap )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_MOTION_VECTOR_HEAP_DESC *pDesc, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoMotionVectorHeap); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoDecoder1) + HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoder1 )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_DECODER_DESC *pDesc, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoDecoder); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoDecoderHeap1) + HRESULT ( STDMETHODCALLTYPE *CreateVideoDecoderHeap1 )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_DECODER_HEAP_DESC *pVideoDecoderHeapDesc, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoDecoderHeap); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoProcessor1) + HRESULT ( STDMETHODCALLTYPE *CreateVideoProcessor1 )( + ID3D12VideoDevice4 * This, + UINT NodeMask, + _In_ const D3D12_VIDEO_PROCESS_OUTPUT_STREAM_DESC *pOutputStreamDesc, + UINT NumInputStreamDescs, + _In_reads_(NumInputStreamDescs) const D3D12_VIDEO_PROCESS_INPUT_STREAM_DESC *pInputStreamDescs, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoProcessor); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice2, CreateVideoExtensionCommand) + HRESULT ( STDMETHODCALLTYPE *CreateVideoExtensionCommand )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_EXTENSION_COMMAND_DESC *pDesc, + _In_reads_bytes_(CreationParametersDataSizeInBytes) const void *pCreationParameters, + SIZE_T CreationParametersDataSizeInBytes, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoExtensionCommand); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice2, ExecuteExtensionCommand) + HRESULT ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( + ID3D12VideoDevice4 * This, + _In_ ID3D12VideoExtensionCommand *pExtensionCommand, + _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, + SIZE_T ExecutionParametersSizeInBytes, + _Out_writes_bytes_(OutputDataSizeInBytes) void *pOutputData, + SIZE_T OutputDataSizeInBytes); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice3, CreateVideoEncoder) + HRESULT ( STDMETHODCALLTYPE *CreateVideoEncoder )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_ENCODER_DESC *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoEncoder); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice3, CreateVideoEncoderHeap) + HRESULT ( STDMETHODCALLTYPE *CreateVideoEncoderHeap )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_ENCODER_HEAP_DESC *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoEncoderHeap); + + DECLSPEC_XFGVIRT(ID3D12VideoDevice4, CreateVideoEncoderHeap1) + HRESULT ( STDMETHODCALLTYPE *CreateVideoEncoderHeap1 )( + ID3D12VideoDevice4 * This, + _In_ const D3D12_VIDEO_ENCODER_HEAP_DESC1 *pDesc, + _In_ REFIID riid, + _COM_Outptr_ void **ppVideoEncoderHeap); + + END_INTERFACE + } ID3D12VideoDevice4Vtbl; + + interface ID3D12VideoDevice4 + { + CONST_VTBL struct ID3D12VideoDevice4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12VideoDevice4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12VideoDevice4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12VideoDevice4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12VideoDevice4_CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) \ + ( (This)->lpVtbl -> CheckFeatureSupport(This,FeatureVideo,pFeatureSupportData,FeatureSupportDataSize) ) + +#define ID3D12VideoDevice4_CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) \ + ( (This)->lpVtbl -> CreateVideoDecoder(This,pDesc,riid,ppVideoDecoder) ) + +#define ID3D12VideoDevice4_CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) \ + ( (This)->lpVtbl -> CreateVideoDecoderHeap(This,pVideoDecoderHeapDesc,riid,ppVideoDecoderHeap) ) + +#define ID3D12VideoDevice4_CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) \ + ( (This)->lpVtbl -> CreateVideoProcessor(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,riid,ppVideoProcessor) ) + + +#define ID3D12VideoDevice4_CreateVideoMotionEstimator(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionEstimator) \ + ( (This)->lpVtbl -> CreateVideoMotionEstimator(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionEstimator) ) + +#define ID3D12VideoDevice4_CreateVideoMotionVectorHeap(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionVectorHeap) \ + ( (This)->lpVtbl -> CreateVideoMotionVectorHeap(This,pDesc,pProtectedResourceSession,riid,ppVideoMotionVectorHeap) ) + + +#define ID3D12VideoDevice4_CreateVideoDecoder1(This,pDesc,pProtectedResourceSession,riid,ppVideoDecoder) \ + ( (This)->lpVtbl -> CreateVideoDecoder1(This,pDesc,pProtectedResourceSession,riid,ppVideoDecoder) ) + +#define ID3D12VideoDevice4_CreateVideoDecoderHeap1(This,pVideoDecoderHeapDesc,pProtectedResourceSession,riid,ppVideoDecoderHeap) \ + ( (This)->lpVtbl -> CreateVideoDecoderHeap1(This,pVideoDecoderHeapDesc,pProtectedResourceSession,riid,ppVideoDecoderHeap) ) + +#define ID3D12VideoDevice4_CreateVideoProcessor1(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,pProtectedResourceSession,riid,ppVideoProcessor) \ + ( (This)->lpVtbl -> CreateVideoProcessor1(This,NodeMask,pOutputStreamDesc,NumInputStreamDescs,pInputStreamDescs,pProtectedResourceSession,riid,ppVideoProcessor) ) + +#define ID3D12VideoDevice4_CreateVideoExtensionCommand(This,pDesc,pCreationParameters,CreationParametersDataSizeInBytes,pProtectedResourceSession,riid,ppVideoExtensionCommand) \ + ( (This)->lpVtbl -> CreateVideoExtensionCommand(This,pDesc,pCreationParameters,CreationParametersDataSizeInBytes,pProtectedResourceSession,riid,ppVideoExtensionCommand) ) + +#define ID3D12VideoDevice4_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes,pOutputData,OutputDataSizeInBytes) \ + ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes,pOutputData,OutputDataSizeInBytes) ) + + +#define ID3D12VideoDevice4_CreateVideoEncoder(This,pDesc,riid,ppVideoEncoder) \ + ( (This)->lpVtbl -> CreateVideoEncoder(This,pDesc,riid,ppVideoEncoder) ) + +#define ID3D12VideoDevice4_CreateVideoEncoderHeap(This,pDesc,riid,ppVideoEncoderHeap) \ + ( (This)->lpVtbl -> CreateVideoEncoderHeap(This,pDesc,riid,ppVideoEncoderHeap) ) + + +#define ID3D12VideoDevice4_CreateVideoEncoderHeap1(This,pDesc,riid,ppVideoEncoderHeap) \ + ( (This)->lpVtbl -> CreateVideoEncoderHeap1(This,pDesc,riid,ppVideoEncoderHeap) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12VideoDevice4_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12video_0000_0029 */ +/* [local] */ + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE1 + { + D3D12_VIDEO_ENCODER_HEAP_DESC1 HeapDesc; + BOOL IsSupported; + UINT64 MemoryPoolL0Size; + UINT64 MemoryPoolL1Size; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_HEAP_SIZE1; + +typedef +enum D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS + { + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_NONE = 0, + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_QP_MAP = 0x1, + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_SATD_MAP = 0x2, + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_RC_BIT_ALLOCATION_MAP = 0x4, + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_FRAME_PSNR = 0x8, + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAG_SUBREGIONS_PSNR = 0x10 + } D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS ) +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS1 + { + UINT NodeIndex; + D3D12_VIDEO_ENCODER_CODEC Codec; + D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; + DXGI_FORMAT InputFormat; + D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC PictureTargetResolution; + BOOL IsSupported; + UINT CompressedBitstreamBufferAccessAlignment; + UINT EncoderMetadataBufferAccessAlignment; + UINT MaxEncoderOutputMetadataBufferSize; + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS OptionalMetadata; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; + D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncoderOutputMetadataQPMapTextureDimensions; + D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncoderOutputMetadataSATDMapTextureDimensions; + D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncoderOutputMetadataBitAllocationMapTextureDimensions; + UINT EncoderOutputMetadataFramePSNRComponentsNumber; + UINT EncoderOutputMetadataSubregionsPSNRComponentsNumber; + UINT EncoderOutputMetadataSubregionsPSNRResolvedMetadataBufferSize; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOURCE_REQUIREMENTS1; + +typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_PSNR_RESOLVED_LAYOUT + { + float PSNRY; + float PSNRU; + float PSNRV; + } D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_PSNR_RESOLVED_LAYOUT; + +typedef +enum D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE + { + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE_CPU_BUFFER = 0, + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE_GPU_TEXTURE = 1 + } D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE; + +typedef +enum D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE + { + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE_DIRTY = 0, + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE_SKIP = 1 + } D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE; + +typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO + { + D3D12_VIDEO_ENCODER_CODEC Codec; + D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; + D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; + DXGI_FORMAT InputFormat; + D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC InputResolution; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; + D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData; + } D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO; + +typedef +enum D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE + { + D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_QUANTIZATION_MATRIX = 0, + D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_DIRTY_REGIONS = 1, + D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE_MOTION_VECTORS = 2 + } D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE; + +typedef +enum D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE + { + D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_FULL_SEARCH = 0, + D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_START_HINT = 1, + D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_START_HINT_LIMITED_DISTANCE = 2 + } D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE; + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_QPMAP_INPUT + { + UINT NodeIndex; + D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo; + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource; + BOOL IsSupported; + UINT MapSourcePreferenceRanking; + UINT BlockSize; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_QPMAP_INPUT; + +typedef +enum D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS + { + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAG_NONE = 0, + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAG_REPEAT_FRAME = 0x1, + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAG_DIRTY_REGIONS = 0x2, + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAG_DIRTY_REGIONS_REQUIRE_FULL_ROW = 0x4 + } D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS ) +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_DIRTY_REGIONS + { + UINT NodeIndex; + D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo; + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource; + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE MapValuesType; + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS SupportFlags; + UINT MapSourcePreferenceRanking; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_DIRTY_REGIONS; + +typedef +enum D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION + { + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_FULL_PIXEL = 0, + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_HALF_PIXEL = 1, + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_QUARTER_PIXEL = 2 + } D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION; + +typedef +enum D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS + { + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAG_NONE = 0, + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAG_FULL_PIXEL = ( 1 << D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_FULL_PIXEL ) , + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAG_HALF_PIXEL = ( 1 << D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_HALF_PIXEL ) , + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAG_QUARTER_PIXEL = ( 1 << D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_QUARTER_PIXEL ) + } D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS ) +typedef +enum D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS + { + D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAG_NONE = 0, + D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAG_SUPPORTED = 0x1, + D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAG_MULTIPLE_HINTS = 0x2, + D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAG_GPU_TEXTURE_MULTIPLE_REFERENCES = 0x4 + } D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS ) +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_MOTION_SEARCH + { + UINT NodeIndex; + D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo; + D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE MotionSearchMode; + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource; + BOOL BidirectionalRefFrameEnabled; + D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS SupportFlags; + UINT MaxMotionHints; + UINT MinDeviation; + UINT MaxDeviation; + UINT MapSourcePreferenceRanking; + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS MotionUnitPrecisionSupport; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_MOTION_SEARCH; + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT + { + UINT NodeIndex; + D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo; + D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE MapType; + BOOL IsSupported; + UINT64 MaxResolvedBufferAllocationSize; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT; + +typedef struct D3D12_VIDEO_ENCODER_QPMAP_CONFIGURATION + { + BOOL Enabled; + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource; + } D3D12_VIDEO_ENCODER_QPMAP_CONFIGURATION; + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_QPMAP + { + UINT MapSourcePreferenceRanking; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_QPMAP; + +typedef struct D3D12_VIDEO_ENCODER_DIRTY_REGIONS_CONFIGURATION + { + BOOL Enabled; + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource; + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE MapValuesType; + } D3D12_VIDEO_ENCODER_DIRTY_REGIONS_CONFIGURATION; + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_DIRTY_REGIONS + { + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_SUPPORT_FLAGS DirtyRegionsSupportFlags; + UINT MapSourcePreferenceRanking; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_DIRTY_REGIONS; + +typedef struct D3D12_VIDEO_ENCODER_MOTION_SEARCH_CONFIGURATION + { + BOOL Enabled; + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource; + D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE MotionSearchMode; + BOOL BidirectionalRefFrameEnabled; + } D3D12_VIDEO_ENCODER_MOTION_SEARCH_CONFIGURATION; + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_MOTION_SEARCH + { + UINT MaxMotionHints; + UINT MinDeviation; + UINT MaxDeviation; + UINT MapSourcePreferenceRanking; + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION_SUPPORT_FLAGS MotionUnitPrecisionSupportFlags; + D3D12_VIDEO_ENCODER_MOTION_SEARCH_SUPPORT_FLAGS SupportFlags; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_MOTION_SEARCH; + +typedef +enum D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS + { + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_NONE = 0, + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_INTRACODED_FRAME_SUPPORTED = 0x1, + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_UNIDIR_INTER_FRAME_SUPPORTED = 0x2, + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_BIDIR_INTER_FRAME_SUPPORTED = 0x4, + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_EXTERNAL_DPB_DOWNSCALING = 0x8, + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_DYNAMIC_1ST_PASS_SKIP = 0x10, + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_DYNAMIC_DOWNSCALE_FACTOR_CHANGE_KEY_FRAME = 0x20, + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_SUPPORTED = ( ( D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_INTRACODED_FRAME_SUPPORTED | D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_UNIDIR_INTER_FRAME_SUPPORTED ) | D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAG_BIDIR_INTER_FRAME_SUPPORTED ) + } D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS ) +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS + { + UINT NodeIndex; + D3D12_VIDEO_ENCODER_CODEC Codec; + D3D12_VIDEO_ENCODER_PROFILE_DESC Profile; + D3D12_VIDEO_ENCODER_LEVEL_SETTING Level; + DXGI_FORMAT InputFormat; + D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC InputResolution; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; + D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData; + D3D12_VIDEO_ENCODER_QPMAP_CONFIGURATION QPMap; + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_CONFIGURATION DirtyRegions; + D3D12_VIDEO_ENCODER_MOTION_SEARCH_CONFIGURATION MotionSearch; + UINT Pow2DownscaleFactor; + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS SupportFlags; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS; + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_FRAME_ANALYSIS + { + D3D12_VIDEO_ENCODER_RATE_CONTROL_FRAME_ANALYSIS_SUPPORT_FLAGS SupportFlags; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_FRAME_ANALYSIS; + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1 + { + UINT MaxSubregionsNumber; + UINT MaxIntraRefreshFrameDuration; + UINT SubregionBlockPixelsSize; + UINT QPMapRegionPixelsSize; + D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_QPMAP QPMap; + D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_DIRTY_REGIONS DirtyRegions; + D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_MOTION_SEARCH MotionSearch; + D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_FRAME_ANALYSIS FrameAnalysis; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1; + +typedef struct D3D12_VIDEO_ENCODER_FRAME_ANALYSIS_CONFIGURATION + { + BOOL Enabled; + UINT Pow2DownscaleFactor; + } D3D12_VIDEO_ENCODER_FRAME_ANALYSIS_CONFIGURATION; + +typedef struct D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT2 + { + UINT NodeIndex; + D3D12_VIDEO_ENCODER_CODEC Codec; + DXGI_FORMAT InputFormat; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; + D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE CodecGopSequence; + D3D12_VIDEO_ENCODER_RATE_CONTROL RateControl; + D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE IntraRefresh; + D3D12_VIDEO_ENCODER_FRAME_SUBREGION_LAYOUT_MODE SubregionFrameEncoding; + UINT ResolutionsListCount; + const D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC *pResolutionList; + UINT MaxReferenceFramesInDPB; + D3D12_VIDEO_ENCODER_VALIDATION_FLAGS ValidationFlags; + D3D12_VIDEO_ENCODER_SUPPORT_FLAGS SupportFlags; + D3D12_VIDEO_ENCODER_PROFILE_DESC SuggestedProfile; + D3D12_VIDEO_ENCODER_LEVEL_SETTING SuggestedLevel; + _Field_size_full_(ResolutionsListCount) D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS1 *pResolutionDependentSupport; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_SUBREGIONS_LAYOUT_DATA SubregionFrameEncodingData; + UINT MaxQualityVsSpeed; + D3D12_VIDEO_ENCODER_QPMAP_CONFIGURATION QPMap; + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_CONFIGURATION DirtyRegions; + D3D12_VIDEO_ENCODER_MOTION_SEARCH_CONFIGURATION MotionSearch; + D3D12_VIDEO_ENCODER_FRAME_ANALYSIS_CONFIGURATION FrameAnalysis; + } D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT2; + +typedef struct D3D12_VIDEO_ENCODER_DIRTY_RECT_INFO + { + BOOL FullFrameIdentical; + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE MapValuesType; + UINT NumDirtyRects; + _Field_size_full_(NumDirtyRects) RECT *pDirtyRects; + UINT SourceDPBFrameReference; + } D3D12_VIDEO_ENCODER_DIRTY_RECT_INFO; + +typedef struct D3D12_VIDEO_ENCODER_DIRTY_REGIONS + { + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource; + union + { + ID3D12Resource *pOpaqueLayoutBuffer; + D3D12_VIDEO_ENCODER_DIRTY_RECT_INFO *pCPUBuffer; + } ; + } D3D12_VIDEO_ENCODER_DIRTY_REGIONS; + +typedef struct D3D12_VIDEO_ENCODER_QUANTIZATION_OPAQUE_MAP + { + ID3D12Resource *pOpaqueQuantizationMap; + } D3D12_VIDEO_ENCODER_QUANTIZATION_OPAQUE_MAP; + +typedef struct D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_CONFIG + { + D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE MotionSearchMode; + UINT SearchDeviationLimit; + } D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_CONFIG; + +typedef struct D3D12_VIDEO_ENCODER_MOVE_RECT + { + POINT SourcePoint; + RECT DestRect; + } D3D12_VIDEO_ENCODER_MOVE_RECT; + +typedef +enum D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAGS + { + D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAG_NONE = 0, + D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAG_MULTIPLE_HINTS = 0x1 + } D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAGS; + +typedef struct D3D12_VIDEO_ENCODER_MOVEREGION_INFO + { + UINT NumMoveRegions; + _Field_size_full_(NumMoveRegions) D3D12_VIDEO_ENCODER_MOVE_RECT *pMoveRegions; + D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_CONFIG MotionSearchModeConfiguration; + UINT SourceDPBFrameReference; + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION MotionUnitPrecision; + D3D12_VIDEO_ENCODER_MOVEREGION_INFO_FLAGS Flags; + } D3D12_VIDEO_ENCODER_MOVEREGION_INFO; + +typedef struct D3D12_VIDEO_ENCODER_FRAME_MOTION_VECTORS + { + D3D12_VIDEO_ENCODER_INPUT_MAP_SOURCE MapSource; + union + { + ID3D12Resource *pOpaqueLayoutBuffer; + D3D12_VIDEO_ENCODER_MOVEREGION_INFO *pCPUBuffer; + } ; + } D3D12_VIDEO_ENCODER_FRAME_MOTION_VECTORS; + +typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC2 + { + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC_FLAGS Flags; + D3D12_VIDEO_ENCODER_FRAME_TYPE_HEVC FrameType; + UINT slice_pic_parameter_set_id; + UINT PictureOrderCountNumber; + UINT TemporalLayerIndex; + UINT List0ReferenceFramesCount; + _Field_size_full_(List0ReferenceFramesCount) UINT *pList0ReferenceFrames; + UINT List1ReferenceFramesCount; + _Field_size_full_(List1ReferenceFramesCount) UINT *pList1ReferenceFrames; + UINT ReferenceFramesReconPictureDescriptorsCount; + _Field_size_full_(ReferenceFramesReconPictureDescriptorsCount) D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_HEVC *pReferenceFramesReconPictureDescriptors; + UINT List0RefPicModificationsCount; + _Field_size_full_(List0RefPicModificationsCount) UINT *pList0RefPicModifications; + UINT List1RefPicModificationsCount; + _Field_size_full_(List1RefPicModificationsCount) UINT *pList1RefPicModifications; + UINT QPMapValuesCount; + _Field_size_full_(QPMapValuesCount) INT8 *pRateControlQPMap; + UCHAR diff_cu_chroma_qp_offset_depth; + UCHAR log2_sao_offset_scale_luma; + UCHAR log2_sao_offset_scale_chroma; + UCHAR log2_max_transform_skip_block_size_minus2; + UCHAR chroma_qp_offset_list_len_minus1; + CHAR cb_qp_offset_list[ 6 ]; + CHAR cr_qp_offset_list[ 6 ]; + UINT num_ref_idx_l0_active_minus1; + UINT num_ref_idx_l1_active_minus1; + } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC2; + +typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA1 + { + UINT DataSize; + union + { + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 *pH264PicData; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_HEVC2 *pHEVCPicData; + D3D12_VIDEO_ENCODER_AV1_PICTURE_CONTROL_CODEC_DATA *pAV1PicData; + } ; + } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA1; + +typedef struct D3D12_VIDEO_ENCODER_FRAME_ANALYSIS + { + ID3D12Resource *pDownscaledFrame; + UINT64 Subresource; + D3D12_VIDEO_ENCODE_REFERENCE_FRAMES DownscaledReferences; + } D3D12_VIDEO_ENCODER_FRAME_ANALYSIS; + +typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC1 + { + UINT IntraRefreshFrameIndex; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_FLAGS Flags; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA1 PictureControlCodecData; + D3D12_VIDEO_ENCODE_REFERENCE_FRAMES ReferenceFrames; + D3D12_VIDEO_ENCODER_FRAME_MOTION_VECTORS MotionVectors; + D3D12_VIDEO_ENCODER_DIRTY_REGIONS DirtyRects; + D3D12_VIDEO_ENCODER_QUANTIZATION_OPAQUE_MAP QuantizationTextureMap; + D3D12_VIDEO_ENCODER_FRAME_ANALYSIS FrameAnalysis; + } D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC1; + +typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS1 + { + D3D12_VIDEO_ENCODER_SEQUENCE_CONTROL_DESC SequenceControlDesc; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC1 PictureControlDesc; + ID3D12Resource *pInputFrame; + UINT InputFrameSubresource; + UINT CurrentFrameBitstreamMetadataSize; + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS OptionalMetadata; + } D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS1; + +typedef +enum D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE + { + D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE_ARRAY_OF_BUFFERS = 0, + D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE_SINGLE_BUFFER = 1 + } D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE; + +typedef struct D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM + { + D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM_BUFFER_MODE BufferMode; + UINT ExpectedSubregionCount; + UINT64 *pSubregionBitstreamsBaseOffsets; + ID3D12Resource **ppSubregionBitstreams; + ID3D12Resource **ppSubregionSizes; + ID3D12Resource **ppSubregionOffsets; + ID3D12Fence **ppSubregionFences; + UINT64 *pSubregionFenceValues; + } D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM; + +typedef +enum D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE + { + D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE_FULL_FRAME = 0, + D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE_SUBREGIONS = 1 + } D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE; + +typedef struct D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM1 + { + D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM_NOTIFICATION_MODE NotificationMode; + union + { + D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM FrameOutputBuffer; + D3D12_VIDEO_ENCODER_SUBREGION_COMPRESSED_BITSTREAM SubregionOutputBuffers; + } ; + } D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM1; + +typedef struct D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS1 + { + D3D12_VIDEO_ENCODER_COMPRESSED_BITSTREAM1 Bitstream; + D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE ReconstructedPicture; + D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER EncoderOutputMetadata; + D3D12_VIDEO_ENCODER_RECONSTRUCTED_PICTURE FrameAnalysisReconstructedPicture; + } D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS1; + +typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS1 + { + D3D12_VIDEO_ENCODER_CODEC EncoderCodec; + D3D12_VIDEO_ENCODER_PROFILE_DESC EncoderProfile; + DXGI_FORMAT EncoderInputFormat; + D3D12_VIDEO_ENCODER_PICTURE_RESOLUTION_DESC EncodedPictureEffectiveResolution; + D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER HWLayoutMetadata; + D3D12_VIDEO_ENCODER_OPTIONAL_METADATA_ENABLE_FLAGS OptionalMetadata; + D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION CodecConfiguration; + } D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS1; + +typedef struct D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS1 + { + D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedLayoutMetadata; + ID3D12Resource *pOutputQPMap; + ID3D12Resource *pOutputSATDMap; + ID3D12Resource *pOutputBitAllocationMap; + D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedFramePSNRData; + D3D12_VIDEO_ENCODER_ENCODE_OPERATION_METADATA_BUFFER ResolvedSubregionsPSNRData; + } D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS1; + +typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_QUANTIZATION_MATRIX + { + ID3D12Resource *pQuantizationMap; + } D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_QUANTIZATION_MATRIX; + +typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_DIRTY_REGIONS + { + BOOL FullFrameIdentical; + D3D12_VIDEO_ENCODER_DIRTY_REGIONS_MAP_VALUES_MODE MapValuesType; + ID3D12Resource *pDirtyRegionsMap; + UINT SourceDPBFrameReference; + } D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_DIRTY_REGIONS; + +typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_MOTION_VECTORS + { + D3D12_VIDEO_ENCODER_FRAME_MOTION_SEARCH_MODE_CONFIG MotionSearchModeConfiguration; + UINT NumHintsPerPixel; + _Field_size_full_(NumHintsPerPixel) ID3D12Resource **ppMotionVectorMaps; + _Field_size_full_(NumHintsPerPixel) UINT *pMotionVectorMapsSubresources; + _Field_size_full_(NumHintsPerPixel) ID3D12Resource **ppMotionVectorMapsMetadata; + _Field_size_full_(NumHintsPerPixel) UINT *pMotionVectorMapsMetadataSubresources; + D3D12_VIDEO_ENCODER_FRAME_INPUT_MOTION_UNIT_PRECISION MotionUnitPrecision; + D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA1 PictureControlConfiguration; + } D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_MOTION_VECTORS; + +typedef struct D3D12_VIDEO_ENCODER_INPUT_MAP_DATA + { + D3D12_VIDEO_ENCODER_INPUT_MAP_TYPE MapType; + union + { + D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_QUANTIZATION_MATRIX Quantization; + D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_DIRTY_REGIONS DirtyRegions; + D3D12_VIDEO_ENCODER_INPUT_MAP_DATA_MOTION_VECTORS MotionVectors; + } ; + } D3D12_VIDEO_ENCODER_INPUT_MAP_DATA; + +typedef struct D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_INPUT_ARGUMENTS + { + D3D12_VIDEO_ENCODER_INPUT_MAP_SESSION_INFO SessionInfo; + D3D12_VIDEO_ENCODER_INPUT_MAP_DATA InputData; + } D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_INPUT_ARGUMENTS; + +typedef struct D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_OUTPUT_ARGUMENTS + { + ID3D12Resource *pOpaqueLayoutBuffer; + } D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_OUTPUT_ARGUMENTS; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0029_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0029_v0_0_s_ifspec; + +#ifndef __ID3D12VideoEncodeCommandList4_INTERFACE_DEFINED__ +#define __ID3D12VideoEncodeCommandList4_INTERFACE_DEFINED__ + +/* interface ID3D12VideoEncodeCommandList4 */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3D12VideoEncodeCommandList4; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("69aeb5b7-55f2-4012-8b73-3a88d65a204c") + ID3D12VideoEncodeCommandList4 : public ID3D12VideoEncodeCommandList3 + { + public: + virtual void STDMETHODCALLTYPE EncodeFrame1( + _In_ ID3D12VideoEncoder *pEncoder, + _In_ ID3D12VideoEncoderHeap1 *pHeap, + _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS1 *pInputArguments, + _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS1 *pOutputArguments) = 0; + + virtual void STDMETHODCALLTYPE ResolveEncoderOutputMetadata1( + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS1 *pInputArguments, + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS1 *pOutputArguments) = 0; + + virtual void STDMETHODCALLTYPE ResolveInputParamLayout( + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_INPUT_ARGUMENTS *pInputArguments, + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_OUTPUT_ARGUMENTS *pOutputArguments) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3D12VideoEncodeCommandList4Vtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3D12VideoEncodeCommandList4 * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3D12VideoEncodeCommandList4 * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3D12VideoEncodeCommandList4 * This); + + DECLSPEC_XFGVIRT(ID3D12Object, GetPrivateData) + HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( + ID3D12VideoEncodeCommandList4 * This, + _In_ REFGUID guid, + _Inout_ UINT *pDataSize, + _Out_writes_bytes_opt_( *pDataSize ) void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateData) + HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( + ID3D12VideoEncodeCommandList4 * This, + _In_ REFGUID guid, + _In_ UINT DataSize, + _In_reads_bytes_opt_( DataSize ) const void *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetPrivateDataInterface) + HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( + ID3D12VideoEncodeCommandList4 * This, + _In_ REFGUID guid, + _In_opt_ const IUnknown *pData); + + DECLSPEC_XFGVIRT(ID3D12Object, SetName) + HRESULT ( STDMETHODCALLTYPE *SetName )( + ID3D12VideoEncodeCommandList4 * This, + _In_z_ LPCWSTR Name); + + DECLSPEC_XFGVIRT(ID3D12DeviceChild, GetDevice) + HRESULT ( STDMETHODCALLTYPE *GetDevice )( + ID3D12VideoEncodeCommandList4 * This, + REFIID riid, + _COM_Outptr_opt_ void **ppvDevice); + + DECLSPEC_XFGVIRT(ID3D12CommandList, GetType) + D3D12_COMMAND_LIST_TYPE ( STDMETHODCALLTYPE *GetType )( + ID3D12VideoEncodeCommandList4 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Close) + HRESULT ( STDMETHODCALLTYPE *Close )( + ID3D12VideoEncodeCommandList4 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, Reset) + HRESULT ( STDMETHODCALLTYPE *Reset )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12CommandAllocator *pAllocator); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ClearState) + void ( STDMETHODCALLTYPE *ClearState )( + ID3D12VideoEncodeCommandList4 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResourceBarrier) + void ( STDMETHODCALLTYPE *ResourceBarrier )( + ID3D12VideoEncodeCommandList4 * This, + _In_ UINT NumBarriers, + _In_reads_(NumBarriers) const D3D12_RESOURCE_BARRIER *pBarriers); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, DiscardResource) + void ( STDMETHODCALLTYPE *DiscardResource )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12Resource *pResource, + _In_opt_ const D3D12_DISCARD_REGION *pRegion); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginQuery) + void ( STDMETHODCALLTYPE *BeginQuery )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT Index); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndQuery) + void ( STDMETHODCALLTYPE *EndQuery )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT Index); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveQueryData) + void ( STDMETHODCALLTYPE *ResolveQueryData )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12QueryHeap *pQueryHeap, + _In_ D3D12_QUERY_TYPE Type, + _In_ UINT StartIndex, + _In_ UINT NumQueries, + _In_ ID3D12Resource *pDestinationBuffer, + _In_ UINT64 AlignedDestinationBufferOffset); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetPredication) + void ( STDMETHODCALLTYPE *SetPredication )( + ID3D12VideoEncodeCommandList4 * This, + _In_opt_ ID3D12Resource *pBuffer, + _In_ UINT64 AlignedBufferOffset, + _In_ D3D12_PREDICATION_OP Operation); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetMarker) + void ( STDMETHODCALLTYPE *SetMarker )( + ID3D12VideoEncodeCommandList4 * This, + UINT Metadata, + _In_reads_bytes_opt_(Size) const void *pData, + UINT Size); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, BeginEvent) + void ( STDMETHODCALLTYPE *BeginEvent )( + ID3D12VideoEncodeCommandList4 * This, + UINT Metadata, + _In_reads_bytes_opt_(Size) const void *pData, + UINT Size); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EndEvent) + void ( STDMETHODCALLTYPE *EndEvent )( + ID3D12VideoEncodeCommandList4 * This); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, EstimateMotion) + void ( STDMETHODCALLTYPE *EstimateMotion )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12VideoMotionEstimator *pMotionEstimator, + _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_OUTPUT *pOutputArguments, + _In_ const D3D12_VIDEO_MOTION_ESTIMATOR_INPUT *pInputArguments); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, ResolveMotionVectorHeap) + void ( STDMETHODCALLTYPE *ResolveMotionVectorHeap )( + ID3D12VideoEncodeCommandList4 * This, + const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_OUTPUT *pOutputArguments, + const D3D12_RESOLVE_VIDEO_MOTION_VECTOR_HEAP_INPUT *pInputArguments); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, WriteBufferImmediate) + void ( STDMETHODCALLTYPE *WriteBufferImmediate )( + ID3D12VideoEncodeCommandList4 * This, + UINT Count, + _In_reads_(Count) const D3D12_WRITEBUFFERIMMEDIATE_PARAMETER *pParams, + _In_reads_opt_(Count) const D3D12_WRITEBUFFERIMMEDIATE_MODE *pModes); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList, SetProtectedResourceSession) + void ( STDMETHODCALLTYPE *SetProtectedResourceSession )( + ID3D12VideoEncodeCommandList4 * This, + _In_opt_ ID3D12ProtectedResourceSession *pProtectedResourceSession); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList1, InitializeExtensionCommand) + void ( STDMETHODCALLTYPE *InitializeExtensionCommand )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12VideoExtensionCommand *pExtensionCommand, + _In_reads_bytes_(InitializationParametersSizeInBytes) const void *pInitializationParameters, + SIZE_T InitializationParametersSizeInBytes); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList1, ExecuteExtensionCommand) + void ( STDMETHODCALLTYPE *ExecuteExtensionCommand )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12VideoExtensionCommand *pExtensionCommand, + _In_reads_bytes_(ExecutionParametersSizeInBytes) const void *pExecutionParameters, + SIZE_T ExecutionParametersSizeInBytes); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList2, EncodeFrame) + void ( STDMETHODCALLTYPE *EncodeFrame )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12VideoEncoder *pEncoder, + _In_ ID3D12VideoEncoderHeap *pHeap, + _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS *pInputArguments, + _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS *pOutputArguments); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList2, ResolveEncoderOutputMetadata) + void ( STDMETHODCALLTYPE *ResolveEncoderOutputMetadata )( + ID3D12VideoEncodeCommandList4 * This, + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS *pInputArguments, + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS *pOutputArguments); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList3, Barrier) + void ( STDMETHODCALLTYPE *Barrier )( + ID3D12VideoEncodeCommandList4 * This, + UINT32 NumBarrierGroups, + _In_reads_(NumBarrierGroups) const D3D12_BARRIER_GROUP *pBarrierGroups); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList4, EncodeFrame1) + void ( STDMETHODCALLTYPE *EncodeFrame1 )( + ID3D12VideoEncodeCommandList4 * This, + _In_ ID3D12VideoEncoder *pEncoder, + _In_ ID3D12VideoEncoderHeap1 *pHeap, + _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_INPUT_ARGUMENTS1 *pInputArguments, + _In_ const D3D12_VIDEO_ENCODER_ENCODEFRAME_OUTPUT_ARGUMENTS1 *pOutputArguments); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList4, ResolveEncoderOutputMetadata1) + void ( STDMETHODCALLTYPE *ResolveEncoderOutputMetadata1 )( + ID3D12VideoEncodeCommandList4 * This, + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_INPUT_ARGUMENTS1 *pInputArguments, + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_METADATA_OUTPUT_ARGUMENTS1 *pOutputArguments); + + DECLSPEC_XFGVIRT(ID3D12VideoEncodeCommandList4, ResolveInputParamLayout) + void ( STDMETHODCALLTYPE *ResolveInputParamLayout )( + ID3D12VideoEncodeCommandList4 * This, + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_INPUT_ARGUMENTS *pInputArguments, + _In_ const D3D12_VIDEO_ENCODER_RESOLVE_INPUT_PARAM_LAYOUT_OUTPUT_ARGUMENTS *pOutputArguments); + + END_INTERFACE + } ID3D12VideoEncodeCommandList4Vtbl; + + interface ID3D12VideoEncodeCommandList4 + { + CONST_VTBL struct ID3D12VideoEncodeCommandList4Vtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3D12VideoEncodeCommandList4_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3D12VideoEncodeCommandList4_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3D12VideoEncodeCommandList4_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3D12VideoEncodeCommandList4_GetPrivateData(This,guid,pDataSize,pData) \ + ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) + +#define ID3D12VideoEncodeCommandList4_SetPrivateData(This,guid,DataSize,pData) \ + ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) + +#define ID3D12VideoEncodeCommandList4_SetPrivateDataInterface(This,guid,pData) \ + ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) + +#define ID3D12VideoEncodeCommandList4_SetName(This,Name) \ + ( (This)->lpVtbl -> SetName(This,Name) ) + + +#define ID3D12VideoEncodeCommandList4_GetDevice(This,riid,ppvDevice) \ + ( (This)->lpVtbl -> GetDevice(This,riid,ppvDevice) ) + + +#define ID3D12VideoEncodeCommandList4_GetType(This) \ + ( (This)->lpVtbl -> GetType(This) ) + + +#define ID3D12VideoEncodeCommandList4_Close(This) \ + ( (This)->lpVtbl -> Close(This) ) + +#define ID3D12VideoEncodeCommandList4_Reset(This,pAllocator) \ + ( (This)->lpVtbl -> Reset(This,pAllocator) ) + +#define ID3D12VideoEncodeCommandList4_ClearState(This) \ + ( (This)->lpVtbl -> ClearState(This) ) + +#define ID3D12VideoEncodeCommandList4_ResourceBarrier(This,NumBarriers,pBarriers) \ + ( (This)->lpVtbl -> ResourceBarrier(This,NumBarriers,pBarriers) ) + +#define ID3D12VideoEncodeCommandList4_DiscardResource(This,pResource,pRegion) \ + ( (This)->lpVtbl -> DiscardResource(This,pResource,pRegion) ) + +#define ID3D12VideoEncodeCommandList4_BeginQuery(This,pQueryHeap,Type,Index) \ + ( (This)->lpVtbl -> BeginQuery(This,pQueryHeap,Type,Index) ) + +#define ID3D12VideoEncodeCommandList4_EndQuery(This,pQueryHeap,Type,Index) \ + ( (This)->lpVtbl -> EndQuery(This,pQueryHeap,Type,Index) ) + +#define ID3D12VideoEncodeCommandList4_ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) \ + ( (This)->lpVtbl -> ResolveQueryData(This,pQueryHeap,Type,StartIndex,NumQueries,pDestinationBuffer,AlignedDestinationBufferOffset) ) + +#define ID3D12VideoEncodeCommandList4_SetPredication(This,pBuffer,AlignedBufferOffset,Operation) \ + ( (This)->lpVtbl -> SetPredication(This,pBuffer,AlignedBufferOffset,Operation) ) + +#define ID3D12VideoEncodeCommandList4_SetMarker(This,Metadata,pData,Size) \ + ( (This)->lpVtbl -> SetMarker(This,Metadata,pData,Size) ) + +#define ID3D12VideoEncodeCommandList4_BeginEvent(This,Metadata,pData,Size) \ + ( (This)->lpVtbl -> BeginEvent(This,Metadata,pData,Size) ) + +#define ID3D12VideoEncodeCommandList4_EndEvent(This) \ + ( (This)->lpVtbl -> EndEvent(This) ) + +#define ID3D12VideoEncodeCommandList4_EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) \ + ( (This)->lpVtbl -> EstimateMotion(This,pMotionEstimator,pOutputArguments,pInputArguments) ) + +#define ID3D12VideoEncodeCommandList4_ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) \ + ( (This)->lpVtbl -> ResolveMotionVectorHeap(This,pOutputArguments,pInputArguments) ) + +#define ID3D12VideoEncodeCommandList4_WriteBufferImmediate(This,Count,pParams,pModes) \ + ( (This)->lpVtbl -> WriteBufferImmediate(This,Count,pParams,pModes) ) + +#define ID3D12VideoEncodeCommandList4_SetProtectedResourceSession(This,pProtectedResourceSession) \ + ( (This)->lpVtbl -> SetProtectedResourceSession(This,pProtectedResourceSession) ) + + +#define ID3D12VideoEncodeCommandList4_InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) \ + ( (This)->lpVtbl -> InitializeExtensionCommand(This,pExtensionCommand,pInitializationParameters,InitializationParametersSizeInBytes) ) + +#define ID3D12VideoEncodeCommandList4_ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) \ + ( (This)->lpVtbl -> ExecuteExtensionCommand(This,pExtensionCommand,pExecutionParameters,ExecutionParametersSizeInBytes) ) + + +#define ID3D12VideoEncodeCommandList4_EncodeFrame(This,pEncoder,pHeap,pInputArguments,pOutputArguments) \ + ( (This)->lpVtbl -> EncodeFrame(This,pEncoder,pHeap,pInputArguments,pOutputArguments) ) + +#define ID3D12VideoEncodeCommandList4_ResolveEncoderOutputMetadata(This,pInputArguments,pOutputArguments) \ + ( (This)->lpVtbl -> ResolveEncoderOutputMetadata(This,pInputArguments,pOutputArguments) ) + + +#define ID3D12VideoEncodeCommandList4_Barrier(This,NumBarrierGroups,pBarrierGroups) \ + ( (This)->lpVtbl -> Barrier(This,NumBarrierGroups,pBarrierGroups) ) + + +#define ID3D12VideoEncodeCommandList4_EncodeFrame1(This,pEncoder,pHeap,pInputArguments,pOutputArguments) \ + ( (This)->lpVtbl -> EncodeFrame1(This,pEncoder,pHeap,pInputArguments,pOutputArguments) ) + +#define ID3D12VideoEncodeCommandList4_ResolveEncoderOutputMetadata1(This,pInputArguments,pOutputArguments) \ + ( (This)->lpVtbl -> ResolveEncoderOutputMetadata1(This,pInputArguments,pOutputArguments) ) + +#define ID3D12VideoEncodeCommandList4_ResolveInputParamLayout(This,pInputArguments,pOutputArguments) \ + ( (This)->lpVtbl -> ResolveInputParamLayout(This,pInputArguments,pOutputArguments) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3D12VideoEncodeCommandList4_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3d12video_0000_0030 */ +/* [local] */ + #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */ #pragma endregion DEFINE_GUID(IID_ID3D12VideoDecoderHeap,0x0946B7C9,0xEBF6,0x4047,0xBB,0x73,0x86,0x83,0xE2,0x7D,0xBB,0x1F); @@ -9183,10 +10705,13 @@ DEFINE_GUID(IID_ID3D12VideoEncoderHeap,0x22B35D96,0x876A,0x44C0,0xB2,0x5E,0xFB,0 DEFINE_GUID(IID_ID3D12VideoDevice3,0x4243ADB4,0x3A32,0x4666,0x97,0x3C,0x0C,0xCC,0x56,0x25,0xDC,0x44); DEFINE_GUID(IID_ID3D12VideoEncodeCommandList2,0x895491e2,0xe701,0x46a9,0x9a,0x1f,0x8d,0x34,0x80,0xed,0x86,0x7a); DEFINE_GUID(IID_ID3D12VideoEncodeCommandList3,0x7f027b22,0x1515,0x4e85,0xaa,0x0d,0x02,0x64,0x86,0x58,0x05,0x76); +DEFINE_GUID(IID_ID3D12VideoEncoderHeap1,0xea8f1968,0x4aa0,0x43a4,0x9d,0x30,0xba,0x86,0xec,0x84,0xd4,0xf9); +DEFINE_GUID(IID_ID3D12VideoDevice4,0xe59ad09e,0xf1ae,0x42bb,0x89,0x83,0x9f,0x6e,0x55,0x86,0xc4,0xeb); +DEFINE_GUID(IID_ID3D12VideoEncodeCommandList4,0x69aeb5b7,0x55f2,0x4012,0x8b,0x73,0x3a,0x88,0xd6,0x5a,0x20,0x4c); -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0027_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0027_v0_0_s_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0030_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3d12video_0000_0030_v0_0_s_ifspec; /* Additional Prototypes for ALL interfaces */ diff --git a/thirdparty/directx_headers/include/directx/d3dcommon.h b/thirdparty/directx_headers/include/directx/d3dcommon.h index 974f205a604..2e2418dc166 100644 --- a/thirdparty/directx_headers/include/directx/d3dcommon.h +++ b/thirdparty/directx_headers/include/directx/d3dcommon.h @@ -390,6 +390,10 @@ enum D3D_SRV_DIMENSION #define D3D_SHADER_FEATURE_ATOMIC_INT64_ON_DESCRIPTOR_HEAP_RESOURCE 0x10000000 #define D3D_SHADER_FEATURE_ADVANCED_TEXTURE_OPS 0x20000000 #define D3D_SHADER_FEATURE_WRITEABLE_MSAA_TEXTURES 0x40000000 +#define D3D_SHADER_FEATURE_SAMPLE_CMP_GRADIENT_OR_BIAS 0x80000000 +#define D3D_SHADER_FEATURE_EXTENDED_COMMAND_INFO 0x100000000ull +#define D3D_OPT_SHADER_FEATURE_USES_DERIVATIVES 0x0000010000000000ull +#define D3D_OPT_SHADER_FEATURE_REQUIRES_GROUP 0x0000020000000000ull typedef struct _D3D_SHADER_MACRO { LPCSTR Name; @@ -961,10 +965,22 @@ enum D3D_REGISTER_COMPONENT_TYPE D3D_REGISTER_COMPONENT_UINT32 = 1, D3D_REGISTER_COMPONENT_SINT32 = 2, D3D_REGISTER_COMPONENT_FLOAT32 = 3, + D3D_REGISTER_COMPONENT_UINT16 = 4, + D3D_REGISTER_COMPONENT_SINT16 = 5, + D3D_REGISTER_COMPONENT_FLOAT16 = 6, + D3D_REGISTER_COMPONENT_UINT64 = 7, + D3D_REGISTER_COMPONENT_SINT64 = 8, + D3D_REGISTER_COMPONENT_FLOAT64 = 9, D3D10_REGISTER_COMPONENT_UNKNOWN = D3D_REGISTER_COMPONENT_UNKNOWN, D3D10_REGISTER_COMPONENT_UINT32 = D3D_REGISTER_COMPONENT_UINT32, D3D10_REGISTER_COMPONENT_SINT32 = D3D_REGISTER_COMPONENT_SINT32, - D3D10_REGISTER_COMPONENT_FLOAT32 = D3D_REGISTER_COMPONENT_FLOAT32 + D3D10_REGISTER_COMPONENT_FLOAT32 = D3D_REGISTER_COMPONENT_FLOAT32, + D3D10_REGISTER_COMPONENT_UINT16 = D3D_REGISTER_COMPONENT_UINT16, + D3D10_REGISTER_COMPONENT_SINT16 = D3D_REGISTER_COMPONENT_SINT16, + D3D10_REGISTER_COMPONENT_FLOAT16 = D3D_REGISTER_COMPONENT_FLOAT16, + D3D10_REGISTER_COMPONENT_UINT64 = D3D_REGISTER_COMPONENT_UINT64, + D3D10_REGISTER_COMPONENT_SINT64 = D3D_REGISTER_COMPONENT_SINT64, + D3D10_REGISTER_COMPONENT_FLOAT64 = D3D_REGISTER_COMPONENT_FLOAT64 } D3D_REGISTER_COMPONENT_TYPE; typedef diff --git a/thirdparty/directx_headers/include/directx/d3dshadercacheregistration.h b/thirdparty/directx_headers/include/directx/d3dshadercacheregistration.h new file mode 100644 index 00000000000..671866a18c2 --- /dev/null +++ b/thirdparty/directx_headers/include/directx/d3dshadercacheregistration.h @@ -0,0 +1,998 @@ +/*------------------------------------------------------------------------------------- + * + * Copyright (c) Microsoft Corporation + * Licensed under the MIT license + * + *-------------------------------------------------------------------------------------*/ + + +/* this ALWAYS GENERATED file contains the definitions for the interfaces */ + + + /* File created by MIDL compiler version 8.01.0628 */ + + + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCNDR_H_VERSION__ +#define __REQUIRED_RPCNDR_H_VERSION__ 500 +#endif + +/* verify that the version is high enough to compile this file*/ +#ifndef __REQUIRED_RPCSAL_H_VERSION__ +#define __REQUIRED_RPCSAL_H_VERSION__ 100 +#endif + +#include "rpc.h" +#include "rpcndr.h" + +#ifndef __RPCNDR_H_VERSION__ +#error this stub requires an updated version of +#endif /* __RPCNDR_H_VERSION__ */ + +#ifndef COM_NO_WINDOWS_H +#include "windows.h" +#include "ole2.h" +#endif /*COM_NO_WINDOWS_H*/ + +#ifndef __d3dshadercacheregistration_h__ +#define __d3dshadercacheregistration_h__ + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +#pragma once +#endif + +#ifndef DECLSPEC_XFGVIRT +#if defined(_CONTROL_FLOW_GUARD_XFG) +#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func)) +#else +#define DECLSPEC_XFGVIRT(base, func) +#endif +#endif + +/* Forward Declarations */ + +#ifndef __ID3DShaderCacheInstallerClient_FWD_DEFINED__ +#define __ID3DShaderCacheInstallerClient_FWD_DEFINED__ +typedef interface ID3DShaderCacheInstallerClient ID3DShaderCacheInstallerClient; + +#endif /* __ID3DShaderCacheInstallerClient_FWD_DEFINED__ */ + + +#ifndef __ID3DShaderCacheComponent_FWD_DEFINED__ +#define __ID3DShaderCacheComponent_FWD_DEFINED__ +typedef interface ID3DShaderCacheComponent ID3DShaderCacheComponent; + +#endif /* __ID3DShaderCacheComponent_FWD_DEFINED__ */ + + +#ifndef __ID3DShaderCacheApplication_FWD_DEFINED__ +#define __ID3DShaderCacheApplication_FWD_DEFINED__ +typedef interface ID3DShaderCacheApplication ID3DShaderCacheApplication; + +#endif /* __ID3DShaderCacheApplication_FWD_DEFINED__ */ + + +#ifndef __ID3DShaderCacheInstaller_FWD_DEFINED__ +#define __ID3DShaderCacheInstaller_FWD_DEFINED__ +typedef interface ID3DShaderCacheInstaller ID3DShaderCacheInstaller; + +#endif /* __ID3DShaderCacheInstaller_FWD_DEFINED__ */ + + +#ifndef __ID3DShaderCacheExplorer_FWD_DEFINED__ +#define __ID3DShaderCacheExplorer_FWD_DEFINED__ +typedef interface ID3DShaderCacheExplorer ID3DShaderCacheExplorer; + +#endif /* __ID3DShaderCacheExplorer_FWD_DEFINED__ */ + + +#ifndef __ID3DShaderCacheInstallerFactory_FWD_DEFINED__ +#define __ID3DShaderCacheInstallerFactory_FWD_DEFINED__ +typedef interface ID3DShaderCacheInstallerFactory ID3DShaderCacheInstallerFactory; + +#endif /* __ID3DShaderCacheInstallerFactory_FWD_DEFINED__ */ + + +/* header files for imported files */ +#include "oaidl.h" +#include "ocidl.h" + +#ifdef __cplusplus +extern "C"{ +#endif + + +/* interface __MIDL_itf_d3dshadercacheregistration_0000_0000 */ +/* [local] */ + +#pragma once +DEFINE_GUID(CLSID_D3DShaderCacheInstallerFactory, 0x16195a0b, 0x607c, 0x41f1, 0xbf, 0x03, 0xc7, 0x69, 0x4d, 0x60, 0xa8, 0xd4); +typedef +enum D3D_SHADER_CACHE_APP_REGISTRATION_SCOPE + { + D3D_SHADER_CACHE_APP_REGISTRATION_SCOPE_USER = 0, + D3D_SHADER_CACHE_APP_REGISTRATION_SCOPE_SYSTEM = ( D3D_SHADER_CACHE_APP_REGISTRATION_SCOPE_USER + 1 ) + } D3D_SHADER_CACHE_APP_REGISTRATION_SCOPE; + + + + +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0000_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0000_v0_0_s_ifspec; + +#ifndef __ID3DShaderCacheInstallerClient_INTERFACE_DEFINED__ +#define __ID3DShaderCacheInstallerClient_INTERFACE_DEFINED__ + +/* interface ID3DShaderCacheInstallerClient */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3DShaderCacheInstallerClient; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("a16ee930-d9f6-4222-a514-244473e5d266") + ID3DShaderCacheInstallerClient + { + public: + BEGIN_INTERFACE + virtual HRESULT STDMETHODCALLTYPE GetInstallerName( + _Inout_ SIZE_T *pNameLength, + _Out_writes_opt_(*pNameLength) wchar_t *pName) = 0; + + virtual D3D_SHADER_CACHE_APP_REGISTRATION_SCOPE STDMETHODCALLTYPE GetInstallerScope( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE HandleDriverUpdate( + _In_ ID3DShaderCacheInstaller *pInstaller) = 0; + + END_INTERFACE + }; + + +#else /* C style interface */ + + typedef struct ID3DShaderCacheInstallerClientVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstallerClient, GetInstallerName) + HRESULT ( STDMETHODCALLTYPE *GetInstallerName )( + ID3DShaderCacheInstallerClient * This, + _Inout_ SIZE_T *pNameLength, + _Out_writes_opt_(*pNameLength) wchar_t *pName); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstallerClient, GetInstallerScope) + D3D_SHADER_CACHE_APP_REGISTRATION_SCOPE ( STDMETHODCALLTYPE *GetInstallerScope )( + ID3DShaderCacheInstallerClient * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstallerClient, HandleDriverUpdate) + HRESULT ( STDMETHODCALLTYPE *HandleDriverUpdate )( + ID3DShaderCacheInstallerClient * This, + _In_ ID3DShaderCacheInstaller *pInstaller); + + END_INTERFACE + } ID3DShaderCacheInstallerClientVtbl; + + interface ID3DShaderCacheInstallerClient + { + CONST_VTBL struct ID3DShaderCacheInstallerClientVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3DShaderCacheInstallerClient_GetInstallerName(This,pNameLength,pName) \ + ( (This)->lpVtbl -> GetInstallerName(This,pNameLength,pName) ) + +#define ID3DShaderCacheInstallerClient_GetInstallerScope(This) \ + ( (This)->lpVtbl -> GetInstallerScope(This) ) + +#define ID3DShaderCacheInstallerClient_HandleDriverUpdate(This,pInstaller) \ + ( (This)->lpVtbl -> HandleDriverUpdate(This,pInstaller) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3DShaderCacheInstallerClient_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3dshadercacheregistration_0000_0001 */ +/* [local] */ + +typedef struct D3D_SHADER_CACHE_PSDB_PROPERTIES + { + const wchar_t *pAdapterFamily; + const wchar_t *pPsdbPath; + } D3D_SHADER_CACHE_PSDB_PROPERTIES; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0001_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0001_v0_0_s_ifspec; + +#ifndef __ID3DShaderCacheComponent_INTERFACE_DEFINED__ +#define __ID3DShaderCacheComponent_INTERFACE_DEFINED__ + +/* interface ID3DShaderCacheComponent */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3DShaderCacheComponent; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("eed1bf00-f5c7-4cf7-885c-d0f9c0cb4828") + ID3DShaderCacheComponent : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetComponentName( + _Out_ const wchar_t **pName) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetStateObjectDatabasePath( + _Out_ const wchar_t **pPath) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPrecompiledCachePath( + _In_ const wchar_t *pAdapterFamily, + _Inout_ const wchar_t **pPath) = 0; + + virtual UINT STDMETHODCALLTYPE GetPrecompiledShaderDatabaseCount( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPrecompiledShaderDatabases( + UINT ArraySize, + _Out_writes_(ArraySize) D3D_SHADER_CACHE_PSDB_PROPERTIES *pPSDBs) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3DShaderCacheComponentVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3DShaderCacheComponent * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3DShaderCacheComponent * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3DShaderCacheComponent * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheComponent, GetComponentName) + HRESULT ( STDMETHODCALLTYPE *GetComponentName )( + ID3DShaderCacheComponent * This, + _Out_ const wchar_t **pName); + + DECLSPEC_XFGVIRT(ID3DShaderCacheComponent, GetStateObjectDatabasePath) + HRESULT ( STDMETHODCALLTYPE *GetStateObjectDatabasePath )( + ID3DShaderCacheComponent * This, + _Out_ const wchar_t **pPath); + + DECLSPEC_XFGVIRT(ID3DShaderCacheComponent, GetPrecompiledCachePath) + HRESULT ( STDMETHODCALLTYPE *GetPrecompiledCachePath )( + ID3DShaderCacheComponent * This, + _In_ const wchar_t *pAdapterFamily, + _Inout_ const wchar_t **pPath); + + DECLSPEC_XFGVIRT(ID3DShaderCacheComponent, GetPrecompiledShaderDatabaseCount) + UINT ( STDMETHODCALLTYPE *GetPrecompiledShaderDatabaseCount )( + ID3DShaderCacheComponent * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheComponent, GetPrecompiledShaderDatabases) + HRESULT ( STDMETHODCALLTYPE *GetPrecompiledShaderDatabases )( + ID3DShaderCacheComponent * This, + UINT ArraySize, + _Out_writes_(ArraySize) D3D_SHADER_CACHE_PSDB_PROPERTIES *pPSDBs); + + END_INTERFACE + } ID3DShaderCacheComponentVtbl; + + interface ID3DShaderCacheComponent + { + CONST_VTBL struct ID3DShaderCacheComponentVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3DShaderCacheComponent_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3DShaderCacheComponent_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3DShaderCacheComponent_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3DShaderCacheComponent_GetComponentName(This,pName) \ + ( (This)->lpVtbl -> GetComponentName(This,pName) ) + +#define ID3DShaderCacheComponent_GetStateObjectDatabasePath(This,pPath) \ + ( (This)->lpVtbl -> GetStateObjectDatabasePath(This,pPath) ) + +#define ID3DShaderCacheComponent_GetPrecompiledCachePath(This,pAdapterFamily,pPath) \ + ( (This)->lpVtbl -> GetPrecompiledCachePath(This,pAdapterFamily,pPath) ) + +#define ID3DShaderCacheComponent_GetPrecompiledShaderDatabaseCount(This) \ + ( (This)->lpVtbl -> GetPrecompiledShaderDatabaseCount(This) ) + +#define ID3DShaderCacheComponent_GetPrecompiledShaderDatabases(This,ArraySize,pPSDBs) \ + ( (This)->lpVtbl -> GetPrecompiledShaderDatabases(This,ArraySize,pPSDBs) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3DShaderCacheComponent_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3dshadercacheregistration_0000_0002 */ +/* [local] */ + +typedef +enum D3D_SHADER_CACHE_TARGET_FLAGS + { + D3D_SHADER_CACHE_TARGET_FLAG_NONE = 0 + } D3D_SHADER_CACHE_TARGET_FLAGS; + +DEFINE_ENUM_FLAG_OPERATORS( D3D_SHADER_CACHE_TARGET_FLAGS ) +typedef union D3D_VERSION_NUMBER + { + UINT64 Version; + UINT16 VersionParts[ 4 ]; + } D3D_VERSION_NUMBER; + +typedef struct D3D_SHADER_CACHE_COMPILER_PROPERTIES + { + wchar_t szAdapterFamily[ 128 ]; + UINT64 MinimumABISupportVersion; + UINT64 MaximumABISupportVersion; + D3D_VERSION_NUMBER CompilerVersion; + D3D_VERSION_NUMBER ApplicationProfileVersion; + } D3D_SHADER_CACHE_COMPILER_PROPERTIES; + +typedef struct D3D_SHADER_CACHE_APPLICATION_DESC + { + const wchar_t *pExeFilename; + const wchar_t *pName; + D3D_VERSION_NUMBER Version; + const wchar_t *pEngineName; + D3D_VERSION_NUMBER EngineVersion; + } D3D_SHADER_CACHE_APPLICATION_DESC; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0002_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0002_v0_0_s_ifspec; + +#ifndef __ID3DShaderCacheApplication_INTERFACE_DEFINED__ +#define __ID3DShaderCacheApplication_INTERFACE_DEFINED__ + +/* interface ID3DShaderCacheApplication */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3DShaderCacheApplication; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("fc688ee2-1b35-4913-93be-1ca3fa7df39e") + ID3DShaderCacheApplication : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetExePath( + _Out_ const wchar_t **pExePath) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetDesc( + _Out_ D3D_SHADER_CACHE_APPLICATION_DESC *pApplicationDesc) = 0; + + virtual HRESULT STDMETHODCALLTYPE RegisterComponent( + _In_ const wchar_t *pName, + _In_ const wchar_t *pStateObjectDBPath, + _In_ UINT NumPSDB, + _In_reads_(NumPSDB) const D3D_SHADER_CACHE_PSDB_PROPERTIES *pPSDBs, + REFIID riid, + _COM_Outptr_ void **ppvComponent) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveComponent( + _In_ ID3DShaderCacheComponent *pComponent) = 0; + + virtual UINT STDMETHODCALLTYPE GetComponentCount( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetComponent( + _In_ UINT index, + REFIID riid, + _COM_Outptr_ void **ppvComponent) = 0; + + virtual UINT STDMETHODCALLTYPE GetPrecompileTargetCount( + D3D_SHADER_CACHE_TARGET_FLAGS flags) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPrecompileTargets( + _In_ UINT ArraySize, + _In_reads_(ArraySize) D3D_SHADER_CACHE_COMPILER_PROPERTIES *pArray, + D3D_SHADER_CACHE_TARGET_FLAGS flags) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetInstallerName( + _Out_ const wchar_t **pInstallerName) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3DShaderCacheApplicationVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3DShaderCacheApplication * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3DShaderCacheApplication * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3DShaderCacheApplication * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, GetExePath) + HRESULT ( STDMETHODCALLTYPE *GetExePath )( + ID3DShaderCacheApplication * This, + _Out_ const wchar_t **pExePath); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, GetDesc) + HRESULT ( STDMETHODCALLTYPE *GetDesc )( + ID3DShaderCacheApplication * This, + _Out_ D3D_SHADER_CACHE_APPLICATION_DESC *pApplicationDesc); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, RegisterComponent) + HRESULT ( STDMETHODCALLTYPE *RegisterComponent )( + ID3DShaderCacheApplication * This, + _In_ const wchar_t *pName, + _In_ const wchar_t *pStateObjectDBPath, + _In_ UINT NumPSDB, + _In_reads_(NumPSDB) const D3D_SHADER_CACHE_PSDB_PROPERTIES *pPSDBs, + REFIID riid, + _COM_Outptr_ void **ppvComponent); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, RemoveComponent) + HRESULT ( STDMETHODCALLTYPE *RemoveComponent )( + ID3DShaderCacheApplication * This, + _In_ ID3DShaderCacheComponent *pComponent); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, GetComponentCount) + UINT ( STDMETHODCALLTYPE *GetComponentCount )( + ID3DShaderCacheApplication * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, GetComponent) + HRESULT ( STDMETHODCALLTYPE *GetComponent )( + ID3DShaderCacheApplication * This, + _In_ UINT index, + REFIID riid, + _COM_Outptr_ void **ppvComponent); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, GetPrecompileTargetCount) + UINT ( STDMETHODCALLTYPE *GetPrecompileTargetCount )( + ID3DShaderCacheApplication * This, + D3D_SHADER_CACHE_TARGET_FLAGS flags); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, GetPrecompileTargets) + HRESULT ( STDMETHODCALLTYPE *GetPrecompileTargets )( + ID3DShaderCacheApplication * This, + _In_ UINT ArraySize, + _In_reads_(ArraySize) D3D_SHADER_CACHE_COMPILER_PROPERTIES *pArray, + D3D_SHADER_CACHE_TARGET_FLAGS flags); + + DECLSPEC_XFGVIRT(ID3DShaderCacheApplication, GetInstallerName) + HRESULT ( STDMETHODCALLTYPE *GetInstallerName )( + ID3DShaderCacheApplication * This, + _Out_ const wchar_t **pInstallerName); + + END_INTERFACE + } ID3DShaderCacheApplicationVtbl; + + interface ID3DShaderCacheApplication + { + CONST_VTBL struct ID3DShaderCacheApplicationVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3DShaderCacheApplication_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3DShaderCacheApplication_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3DShaderCacheApplication_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3DShaderCacheApplication_GetExePath(This,pExePath) \ + ( (This)->lpVtbl -> GetExePath(This,pExePath) ) + +#define ID3DShaderCacheApplication_GetDesc(This,pApplicationDesc) \ + ( (This)->lpVtbl -> GetDesc(This,pApplicationDesc) ) + +#define ID3DShaderCacheApplication_RegisterComponent(This,pName,pStateObjectDBPath,NumPSDB,pPSDBs,riid,ppvComponent) \ + ( (This)->lpVtbl -> RegisterComponent(This,pName,pStateObjectDBPath,NumPSDB,pPSDBs,riid,ppvComponent) ) + +#define ID3DShaderCacheApplication_RemoveComponent(This,pComponent) \ + ( (This)->lpVtbl -> RemoveComponent(This,pComponent) ) + +#define ID3DShaderCacheApplication_GetComponentCount(This) \ + ( (This)->lpVtbl -> GetComponentCount(This) ) + +#define ID3DShaderCacheApplication_GetComponent(This,index,riid,ppvComponent) \ + ( (This)->lpVtbl -> GetComponent(This,index,riid,ppvComponent) ) + +#define ID3DShaderCacheApplication_GetPrecompileTargetCount(This,flags) \ + ( (This)->lpVtbl -> GetPrecompileTargetCount(This,flags) ) + +#define ID3DShaderCacheApplication_GetPrecompileTargets(This,ArraySize,pArray,flags) \ + ( (This)->lpVtbl -> GetPrecompileTargets(This,ArraySize,pArray,flags) ) + +#define ID3DShaderCacheApplication_GetInstallerName(This,pInstallerName) \ + ( (This)->lpVtbl -> GetInstallerName(This,pInstallerName) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3DShaderCacheApplication_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3dshadercacheregistration_0000_0003 */ +/* [local] */ + +typedef struct SC_HANDLE__ *SC_HANDLE; + + + +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0003_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0003_v0_0_s_ifspec; + +#ifndef __ID3DShaderCacheInstaller_INTERFACE_DEFINED__ +#define __ID3DShaderCacheInstaller_INTERFACE_DEFINED__ + +/* interface ID3DShaderCacheInstaller */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3DShaderCacheInstaller; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("bbe30de1-6318-4526-ae17-776693191bb4") + ID3DShaderCacheInstaller : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE RegisterDriverUpdateListener( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE UnregisterDriverUpdateListener( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE RegisterServiceDriverUpdateTrigger( + SC_HANDLE hServiceHandle) = 0; + + virtual HRESULT STDMETHODCALLTYPE UnregisterServiceDriverUpdateTrigger( + SC_HANDLE hServiceHandle) = 0; + + virtual HRESULT STDMETHODCALLTYPE RegisterApplication( + _In_ const wchar_t *pExePath, + _In_ const D3D_SHADER_CACHE_APPLICATION_DESC *pApplicationDesc, + REFIID riid, + _COM_Outptr_ void **ppvApp) = 0; + + virtual HRESULT STDMETHODCALLTYPE RemoveApplication( + _In_ ID3DShaderCacheApplication *pApplication) = 0; + + virtual UINT STDMETHODCALLTYPE GetApplicationCount( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetApplication( + _In_ UINT index, + REFIID riid, + _COM_Outptr_ void **ppvApp) = 0; + + virtual HRESULT STDMETHODCALLTYPE ClearAllState( void) = 0; + + virtual UINT STDMETHODCALLTYPE GetMaxPrecompileTargetCount( void) = 0; + + virtual HRESULT STDMETHODCALLTYPE GetPrecompileTargets( + _In_opt_ const D3D_SHADER_CACHE_APPLICATION_DESC *pApplicationDesc, + _Inout_ UINT *pArraySize, + _Out_writes_(*pArraySize) D3D_SHADER_CACHE_COMPILER_PROPERTIES *pArray, + D3D_SHADER_CACHE_TARGET_FLAGS flags) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3DShaderCacheInstallerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3DShaderCacheInstaller * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3DShaderCacheInstaller * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3DShaderCacheInstaller * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, RegisterDriverUpdateListener) + HRESULT ( STDMETHODCALLTYPE *RegisterDriverUpdateListener )( + ID3DShaderCacheInstaller * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, UnregisterDriverUpdateListener) + HRESULT ( STDMETHODCALLTYPE *UnregisterDriverUpdateListener )( + ID3DShaderCacheInstaller * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, RegisterServiceDriverUpdateTrigger) + HRESULT ( STDMETHODCALLTYPE *RegisterServiceDriverUpdateTrigger )( + ID3DShaderCacheInstaller * This, + SC_HANDLE hServiceHandle); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, UnregisterServiceDriverUpdateTrigger) + HRESULT ( STDMETHODCALLTYPE *UnregisterServiceDriverUpdateTrigger )( + ID3DShaderCacheInstaller * This, + SC_HANDLE hServiceHandle); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, RegisterApplication) + HRESULT ( STDMETHODCALLTYPE *RegisterApplication )( + ID3DShaderCacheInstaller * This, + _In_ const wchar_t *pExePath, + _In_ const D3D_SHADER_CACHE_APPLICATION_DESC *pApplicationDesc, + REFIID riid, + _COM_Outptr_ void **ppvApp); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, RemoveApplication) + HRESULT ( STDMETHODCALLTYPE *RemoveApplication )( + ID3DShaderCacheInstaller * This, + _In_ ID3DShaderCacheApplication *pApplication); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, GetApplicationCount) + UINT ( STDMETHODCALLTYPE *GetApplicationCount )( + ID3DShaderCacheInstaller * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, GetApplication) + HRESULT ( STDMETHODCALLTYPE *GetApplication )( + ID3DShaderCacheInstaller * This, + _In_ UINT index, + REFIID riid, + _COM_Outptr_ void **ppvApp); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, ClearAllState) + HRESULT ( STDMETHODCALLTYPE *ClearAllState )( + ID3DShaderCacheInstaller * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, GetMaxPrecompileTargetCount) + UINT ( STDMETHODCALLTYPE *GetMaxPrecompileTargetCount )( + ID3DShaderCacheInstaller * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstaller, GetPrecompileTargets) + HRESULT ( STDMETHODCALLTYPE *GetPrecompileTargets )( + ID3DShaderCacheInstaller * This, + _In_opt_ const D3D_SHADER_CACHE_APPLICATION_DESC *pApplicationDesc, + _Inout_ UINT *pArraySize, + _Out_writes_(*pArraySize) D3D_SHADER_CACHE_COMPILER_PROPERTIES *pArray, + D3D_SHADER_CACHE_TARGET_FLAGS flags); + + END_INTERFACE + } ID3DShaderCacheInstallerVtbl; + + interface ID3DShaderCacheInstaller + { + CONST_VTBL struct ID3DShaderCacheInstallerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3DShaderCacheInstaller_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3DShaderCacheInstaller_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3DShaderCacheInstaller_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3DShaderCacheInstaller_RegisterDriverUpdateListener(This) \ + ( (This)->lpVtbl -> RegisterDriverUpdateListener(This) ) + +#define ID3DShaderCacheInstaller_UnregisterDriverUpdateListener(This) \ + ( (This)->lpVtbl -> UnregisterDriverUpdateListener(This) ) + +#define ID3DShaderCacheInstaller_RegisterServiceDriverUpdateTrigger(This,hServiceHandle) \ + ( (This)->lpVtbl -> RegisterServiceDriverUpdateTrigger(This,hServiceHandle) ) + +#define ID3DShaderCacheInstaller_UnregisterServiceDriverUpdateTrigger(This,hServiceHandle) \ + ( (This)->lpVtbl -> UnregisterServiceDriverUpdateTrigger(This,hServiceHandle) ) + +#define ID3DShaderCacheInstaller_RegisterApplication(This,pExePath,pApplicationDesc,riid,ppvApp) \ + ( (This)->lpVtbl -> RegisterApplication(This,pExePath,pApplicationDesc,riid,ppvApp) ) + +#define ID3DShaderCacheInstaller_RemoveApplication(This,pApplication) \ + ( (This)->lpVtbl -> RemoveApplication(This,pApplication) ) + +#define ID3DShaderCacheInstaller_GetApplicationCount(This) \ + ( (This)->lpVtbl -> GetApplicationCount(This) ) + +#define ID3DShaderCacheInstaller_GetApplication(This,index,riid,ppvApp) \ + ( (This)->lpVtbl -> GetApplication(This,index,riid,ppvApp) ) + +#define ID3DShaderCacheInstaller_ClearAllState(This) \ + ( (This)->lpVtbl -> ClearAllState(This) ) + +#define ID3DShaderCacheInstaller_GetMaxPrecompileTargetCount(This) \ + ( (This)->lpVtbl -> GetMaxPrecompileTargetCount(This) ) + +#define ID3DShaderCacheInstaller_GetPrecompileTargets(This,pApplicationDesc,pArraySize,pArray,flags) \ + ( (This)->lpVtbl -> GetPrecompileTargets(This,pApplicationDesc,pArraySize,pArray,flags) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3DShaderCacheInstaller_INTERFACE_DEFINED__ */ + + +#ifndef __ID3DShaderCacheExplorer_INTERFACE_DEFINED__ +#define __ID3DShaderCacheExplorer_INTERFACE_DEFINED__ + +/* interface ID3DShaderCacheExplorer */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3DShaderCacheExplorer; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("90432322-32f5-487f-9264-e9390fa58b2a") + ID3DShaderCacheExplorer : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE GetApplicationFromExePath( + _In_ const wchar_t *pFullExePath, + REFIID riid, + _COM_Outptr_ void **ppvApp) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3DShaderCacheExplorerVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3DShaderCacheExplorer * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3DShaderCacheExplorer * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3DShaderCacheExplorer * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheExplorer, GetApplicationFromExePath) + HRESULT ( STDMETHODCALLTYPE *GetApplicationFromExePath )( + ID3DShaderCacheExplorer * This, + _In_ const wchar_t *pFullExePath, + REFIID riid, + _COM_Outptr_ void **ppvApp); + + END_INTERFACE + } ID3DShaderCacheExplorerVtbl; + + interface ID3DShaderCacheExplorer + { + CONST_VTBL struct ID3DShaderCacheExplorerVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3DShaderCacheExplorer_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3DShaderCacheExplorer_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3DShaderCacheExplorer_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3DShaderCacheExplorer_GetApplicationFromExePath(This,pFullExePath,riid,ppvApp) \ + ( (This)->lpVtbl -> GetApplicationFromExePath(This,pFullExePath,riid,ppvApp) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3DShaderCacheExplorer_INTERFACE_DEFINED__ */ + + +#ifndef __ID3DShaderCacheInstallerFactory_INTERFACE_DEFINED__ +#define __ID3DShaderCacheInstallerFactory_INTERFACE_DEFINED__ + +/* interface ID3DShaderCacheInstallerFactory */ +/* [unique][local][object][uuid] */ + + +EXTERN_C const IID IID_ID3DShaderCacheInstallerFactory; + +#if defined(__cplusplus) && !defined(CINTERFACE) + + MIDL_INTERFACE("09b2dfe4-840f-401a-804c-0dd8aadc9e9f") + ID3DShaderCacheInstallerFactory : public IUnknown + { + public: + virtual HRESULT STDMETHODCALLTYPE CreateInstaller( + _In_ ID3DShaderCacheInstallerClient *pClient, + REFIID riid, + _COM_Outptr_ void **ppvInstaller) = 0; + + virtual HRESULT STDMETHODCALLTYPE CreateExplorer( + IUnknown *pUnknown, + REFIID riid, + _COM_Outptr_ void **ppvExplorer) = 0; + + }; + + +#else /* C style interface */ + + typedef struct ID3DShaderCacheInstallerFactoryVtbl + { + BEGIN_INTERFACE + + DECLSPEC_XFGVIRT(IUnknown, QueryInterface) + HRESULT ( STDMETHODCALLTYPE *QueryInterface )( + ID3DShaderCacheInstallerFactory * This, + REFIID riid, + _COM_Outptr_ void **ppvObject); + + DECLSPEC_XFGVIRT(IUnknown, AddRef) + ULONG ( STDMETHODCALLTYPE *AddRef )( + ID3DShaderCacheInstallerFactory * This); + + DECLSPEC_XFGVIRT(IUnknown, Release) + ULONG ( STDMETHODCALLTYPE *Release )( + ID3DShaderCacheInstallerFactory * This); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstallerFactory, CreateInstaller) + HRESULT ( STDMETHODCALLTYPE *CreateInstaller )( + ID3DShaderCacheInstallerFactory * This, + _In_ ID3DShaderCacheInstallerClient *pClient, + REFIID riid, + _COM_Outptr_ void **ppvInstaller); + + DECLSPEC_XFGVIRT(ID3DShaderCacheInstallerFactory, CreateExplorer) + HRESULT ( STDMETHODCALLTYPE *CreateExplorer )( + ID3DShaderCacheInstallerFactory * This, + IUnknown *pUnknown, + REFIID riid, + _COM_Outptr_ void **ppvExplorer); + + END_INTERFACE + } ID3DShaderCacheInstallerFactoryVtbl; + + interface ID3DShaderCacheInstallerFactory + { + CONST_VTBL struct ID3DShaderCacheInstallerFactoryVtbl *lpVtbl; + }; + + + +#ifdef COBJMACROS + + +#define ID3DShaderCacheInstallerFactory_QueryInterface(This,riid,ppvObject) \ + ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) + +#define ID3DShaderCacheInstallerFactory_AddRef(This) \ + ( (This)->lpVtbl -> AddRef(This) ) + +#define ID3DShaderCacheInstallerFactory_Release(This) \ + ( (This)->lpVtbl -> Release(This) ) + + +#define ID3DShaderCacheInstallerFactory_CreateInstaller(This,pClient,riid,ppvInstaller) \ + ( (This)->lpVtbl -> CreateInstaller(This,pClient,riid,ppvInstaller) ) + +#define ID3DShaderCacheInstallerFactory_CreateExplorer(This,pUnknown,riid,ppvExplorer) \ + ( (This)->lpVtbl -> CreateExplorer(This,pUnknown,riid,ppvExplorer) ) + +#endif /* COBJMACROS */ + + +#endif /* C style interface */ + + + + +#endif /* __ID3DShaderCacheInstallerFactory_INTERFACE_DEFINED__ */ + + +/* interface __MIDL_itf_d3dshadercacheregistration_0000_0006 */ +/* [local] */ + +DEFINE_GUID(IID_ID3DShaderCacheInstallerClient,0xa16ee930,0xd9f6,0x4222,0xa5,0x14,0x24,0x44,0x73,0xe5,0xd2,0x66); +DEFINE_GUID(IID_ID3DShaderCacheComponent,0xeed1bf00,0xf5c7,0x4cf7,0x88,0x5c,0xd0,0xf9,0xc0,0xcb,0x48,0x28); +DEFINE_GUID(IID_ID3DShaderCacheApplication,0xfc688ee2,0x1b35,0x4913,0x93,0xbe,0x1c,0xa3,0xfa,0x7d,0xf3,0x9e); +DEFINE_GUID(IID_ID3DShaderCacheInstaller,0xbbe30de1,0x6318,0x4526,0xae,0x17,0x77,0x66,0x93,0x19,0x1b,0xb4); +DEFINE_GUID(IID_ID3DShaderCacheExplorer,0x90432322,0x32f5,0x487f,0x92,0x64,0xe9,0x39,0x0f,0xa5,0x8b,0x2a); +DEFINE_GUID(IID_ID3DShaderCacheInstallerFactory,0x09b2dfe4,0x840f,0x401a,0x80,0x4c,0x0d,0xd8,0xaa,0xdc,0x9e,0x9f); + + +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0006_v0_0_c_ifspec; +extern RPC_IF_HANDLE __MIDL_itf_d3dshadercacheregistration_0000_0006_v0_0_s_ifspec; + +/* Additional Prototypes for ALL interfaces */ + +/* end of Additional Prototypes */ + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/thirdparty/directx_headers/include/directx/d3dx12.h b/thirdparty/directx_headers/include/directx/d3dx12.h index 1187816c1e4..e8ec24e379b 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12.h +++ b/thirdparty/directx_headers/include/directx/d3dx12.h @@ -33,3 +33,4 @@ #endif //__D3DX12_H__ + diff --git a/thirdparty/directx_headers/include/directx/d3dx12_barriers.h b/thirdparty/directx_headers/include/directx/d3dx12_barriers.h index 2c2b135a62c..1bd7a749779 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_barriers.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_barriers.h @@ -190,3 +190,4 @@ public: #endif // defined( __cplusplus ) #endif // __D3DX12_BARRIERS_H__ + diff --git a/thirdparty/directx_headers/include/directx/d3dx12_check_feature_support.h b/thirdparty/directx_headers/include/directx/d3dx12_check_feature_support.h index 433a4ee79ad..725fb7fbbee 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_check_feature_support.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_check_feature_support.h @@ -1,4 +1,4 @@ -//********************************************************* +//********************************************************* // // Copyright (c) Microsoft Corporation. // Licensed under the MIT License (MIT). @@ -231,6 +231,15 @@ public: // Function declaration BOOL ComputeOnlyWriteWatchSupported() const noexcept; #endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + D3D12_EXECUTE_INDIRECT_TIER ExecuteIndirectTier() const noexcept; + D3D12_WORK_GRAPHS_TIER WorkGraphsTier() const noexcept; +#endif + +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617) + D3D12_TIGHT_ALIGNMENT_TIER TightAlignmentSupportTier() const noexcept; +#endif + private: // Private structs and helpers declaration struct ProtectedResourceSessionTypesLocal : D3D12_FEATURE_DATA_PROTECTED_RESOURCE_SESSION_TYPES { @@ -317,6 +326,12 @@ private: // Member data #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) D3D12_FEATURE_DATA_D3D12_OPTIONS20 m_dOptions20; #endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + D3D12_FEATURE_DATA_D3D12_OPTIONS21 m_dOptions21; +#endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617) + D3D12_FEATURE_DATA_TIGHT_ALIGNMENT m_dTightAlignment; +#endif }; // Implementations for CD3DX12FeatureSupport functions @@ -408,6 +423,12 @@ inline CD3DX12FeatureSupport::CD3DX12FeatureSupport() noexcept #if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) , m_dOptions20{} #endif +#if defined (D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) +, m_dOptions21{} +#endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617) +, m_dTightAlignment{} +#endif {} inline HRESULT CD3DX12FeatureSupport::Init(ID3D12Device* pDevice) @@ -576,6 +597,20 @@ inline HRESULT CD3DX12FeatureSupport::Init(ID3D12Device* pDevice) } #endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS21, &m_dOptions21, sizeof(m_dOptions21)))) + { + m_dOptions21 = {}; + } +#endif + +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617) + if (FAILED(m_pDevice->CheckFeatureSupport(D3D12_FEATURE_D3D12_TIGHT_ALIGNMENT, &m_dTightAlignment, sizeof(m_dTightAlignment)))) + { + m_dTightAlignment = {}; + } +#endif + // Initialize per-node feature support data structures const UINT uNodeCount = m_pDevice->GetNodeCount(); m_dProtectedResourceSessionSupport.resize(uNodeCount); @@ -948,6 +983,17 @@ FEATURE_SUPPORT_GET(UINT, m_dOptions19, MaxViewDescriptorHeapSize); FEATURE_SUPPORT_GET(BOOL, m_dOptions20, ComputeOnlyWriteWatchSupported); #endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) +// 50: Options21 +FEATURE_SUPPORT_GET(D3D12_EXECUTE_INDIRECT_TIER, m_dOptions21, ExecuteIndirectTier); +FEATURE_SUPPORT_GET(D3D12_WORK_GRAPHS_TIER, m_dOptions21, WorkGraphsTier); +#endif + +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 617) +// 51: TightAlignment +FEATURE_SUPPORT_GET_NAME(D3D12_TIGHT_ALIGNMENT_TIER, m_dTightAlignment, SupportTier, TightAlignmentSupportTier); +#endif + // Helper function to decide the highest shader model supported by the system // Stores the result in m_dShaderModel // Must be updated whenever a new shader model is added to the d3d12.h header @@ -958,6 +1004,9 @@ inline HRESULT CD3DX12FeatureSupport::QueryHighestShaderModel() const D3D_SHADER_MODEL allModelVersions[] = { +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + D3D_SHADER_MODEL_6_9, +#endif #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) D3D_SHADER_MODEL_6_8, #endif @@ -1054,8 +1103,12 @@ inline HRESULT CD3DX12FeatureSupport::QueryHighestFeatureLevel() D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1, +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 5) D3D_FEATURE_LEVEL_1_0_CORE, +#endif +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 611) D3D_FEATURE_LEVEL_1_0_GENERIC +#endif }; D3D12_FEATURE_DATA_FEATURE_LEVELS dFeatureLevel; @@ -1105,3 +1158,5 @@ inline HRESULT CD3DX12FeatureSupport::QueryProtectedResourceSessionTypes(UINT No #undef FEATURE_SUPPORT_GET_NODE_INDEXED_NAME // end CD3DX12FeatureSupport + + diff --git a/thirdparty/directx_headers/include/directx/d3dx12_core.h b/thirdparty/directx_headers/include/directx/d3dx12_core.h index 593f7637a32..092a039a943 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_core.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_core.h @@ -35,6 +35,126 @@ inline ID3D12CommandList * const * CommandListCast(t_CommandListType * const * p return reinterpret_cast(pp); } +#ifdef D3DX12_USE_ARRAY_COM_PTR +#include +//------------------------------------------------------------------------------------------------ +// CArrayComPtr - Useful RAII container of raw IUnknown pointers. +template +class CArrayComPtr +{ + std::vector<_T *> m_array; + +public: + class CProxyPtr + { + _T *&pObj; + + CProxyPtr(_T *&obj) : + pObj(obj) {} + + public: + operator _T*() { return pObj; } + _T **operator&() { return &pObj; } + CProxyPtr &operator=(_T*&obj) + { + if(pObj) + pObj->Release(); + + pObj = obj; + + if(pObj) + pObj->AddRef(); + } + + friend class CArrayComPtr<_T>; + }; + +public: + CArrayComPtr() = default; + + CArrayComPtr(size_t size) : + m_array(size) { + } + + CArrayComPtr(const CArrayComPtr &o) + { + m_array = o.m_array; + for (size_t i = 0; i < m_array.size(); ++i) + { + m_array[i]->AddRef(); + } + } + + CArrayComPtr(CArrayComPtr &&o) = default; + + ~CArrayComPtr() + { + for (auto ptr : m_array) + { + if (ptr) + { + ptr->Release(); + } + } + } + + _T *const *Get() { return m_array.data(); } + + void Assign(size_t index, _T *ptr) + { + if (index >= m_array.size()) + { + Resize(index + 1); + } + + // Release the old pointer if it exists + if (m_array[index]) + { + m_array[index]->Release(); + } + + // Assign the new pointer and AddRef it if not null + m_array[index] = ptr; + if (ptr) + { + ptr->AddRef(); + } + } + + void Resize(size_t size) + { + // If shrinking, release any pointers that will be discarded + if (size < m_array.size()) + { + for (size_t i = size; i < m_array.size(); ++i) + { + if (m_array[i]) + { + m_array[i]->Release(); + } + } + } + + // Resize the vector, initializing new elements to nullptr + m_array.resize(size, nullptr); + } + + void PushBack(_T *ptr) + { + // AddRef if not null + if (ptr) + { + ptr->AddRef(); + } + m_array.push_back(ptr); + } + + CProxyPtr operator[](size_t index) + { + return CProxyPtr(m_array[index]); + } +}; +#endif //------------------------------------------------------------------------------------------------ inline bool operator==( const D3D12_VIEWPORT& l, const D3D12_VIEWPORT& r ) noexcept { @@ -721,7 +841,7 @@ struct CD3DX12_RASTERIZER_DESC2 : public D3D12_RASTERIZER_DESC2 } operator D3D12_RASTERIZER_DESC() const noexcept { - return (D3D12_RASTERIZER_DESC)CD3DX12_RASTERIZER_DESC1((D3D12_RASTERIZER_DESC1)*this); + return static_cast(CD3DX12_RASTERIZER_DESC1(static_cast(*this))); } }; #endif // D3D12_SDK_VERSION >= 610 @@ -1446,7 +1566,9 @@ inline bool operator!=( const D3D12_RESOURCE_DESC1& l, const D3D12_RESOURCE_DESC // If expansion has occured, returns LclDesc, else returns the original pDesc inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc( CD3DX12_RESOURCE_DESC1& LclDesc, - const CD3DX12_RESOURCE_DESC1* pDesc) + const CD3DX12_RESOURCE_DESC1* pDesc, + const bool tightAlignmentSupported = false, + const bool alignAsCommitted = false) { // Expand mip levels: if (pDesc->MipLevels == 0 || pDesc->Alignment == 0) @@ -1464,7 +1586,7 @@ inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc( } return uiRet; }; - auto Max = [](UINT64 const & a, UINT64 const & b) + auto Max = [](UINT64 const& a, UINT64 const& b) { return (a < b) ? b : a; }; @@ -1481,11 +1603,20 @@ inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc( { LclDesc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; } + else if (!(tightAlignmentSupported && (pDesc->Flags & D3D12_RESOURCE_FLAG_USE_TIGHT_ALIGNMENT)) + || (pDesc->Flags & D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER)) + { + LclDesc.Alignment = + (pDesc->SampleDesc.Count > 1 ? D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT : D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT); + } else { - LclDesc.Alignment = - (pDesc->SampleDesc.Count > 1 ? D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT : D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT); - } + // Tight alignment is supported and we aren't a cross adapter resource, now just need to set the alignment field to the minimum alignment for each type + if(alignAsCommitted) + LclDesc.Alignment = D3D12_TIGHT_ALIGNMENT_MIN_COMMITTED_RESOURCE_ALIGNMENT; + else + LclDesc.Alignment = D3D12_TIGHT_ALIGNMENT_MIN_PLACED_RESOURCE_ALIGNMENT; + } } return &LclDesc; } @@ -1495,6 +1626,390 @@ inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc( } } + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SHADER_RESOURCE_VIEW_DESC : public D3D12_SHADER_RESOURCE_VIEW_DESC +{ + CD3DX12_SHADER_RESOURCE_VIEW_DESC() = default; + explicit CD3DX12_SHADER_RESOURCE_VIEW_DESC( const D3D12_SHADER_RESOURCE_VIEW_DESC& o ) noexcept : + D3D12_SHADER_RESOURCE_VIEW_DESC(o) + {} + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC StructuredBuffer( + UINT NumElements, + UINT StructureByteStride, + UINT64 FirstElement = 0) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_UNKNOWN; + desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = StructureByteStride; + desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC RawBuffer( + UINT NumElements, + UINT64 FirstElement = 0) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_R32_UINT; + desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = 0; + desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TypedBuffer( + DXGI_FORMAT Format, + UINT NumElements, + UINT64 FirstElement = 0, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = 0; + desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex1D( + DXGI_FORMAT Format, + UINT MipLevels = -1, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture1D.MostDetailedMip = MostDetailedMip; + desc.Texture1D.MipLevels = MipLevels; + desc.Texture1D.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex1DArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT MipLevels = -1, + UINT FirstArraySlice = 0, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture1DArray.MostDetailedMip = MostDetailedMip; + desc.Texture1DArray.MipLevels = MipLevels; + desc.Texture1DArray.FirstArraySlice = FirstArraySlice; + desc.Texture1DArray.ArraySize = ArraySize; + desc.Texture1DArray.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2D( + DXGI_FORMAT Format, + UINT MipLevels = -1, + UINT MostDetailedMip = 0, + UINT PlaneSlice = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture2D.MostDetailedMip = MostDetailedMip; + desc.Texture2D.MipLevels = MipLevels; + desc.Texture2D.PlaneSlice = PlaneSlice; + desc.Texture2D.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT MipLevels = -1, + UINT FirstArraySlice = 0, + UINT MostDetailedMip = 0, + UINT PlaneSlice = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture2DArray.MostDetailedMip = MostDetailedMip; + desc.Texture2DArray.MipLevels = MipLevels; + desc.Texture2DArray.FirstArraySlice = FirstArraySlice; + desc.Texture2DArray.ArraySize = ArraySize; + desc.Texture2DArray.PlaneSlice = PlaneSlice; + desc.Texture2DArray.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DMS( + DXGI_FORMAT Format, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + // desc.Texture2DMS.UnusedField_NothingToDefine = 0; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DMSArray( + DXGI_FORMAT Format, + UINT ArraySize, + UINT FirstArraySlice = 0, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture2DMSArray.ArraySize = ArraySize; + desc.Texture2DMSArray.FirstArraySlice = FirstArraySlice; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex3D( + DXGI_FORMAT Format, + UINT MipLevels = -1, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.Texture3D.MostDetailedMip = MostDetailedMip; + desc.Texture3D.MipLevels = MipLevels; + desc.Texture3D.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TexCube( + DXGI_FORMAT Format, + UINT MipLevels = -1, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.TextureCube.MostDetailedMip = MostDetailedMip; + desc.TextureCube.MipLevels = MipLevels; + desc.TextureCube.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TexCubeArray( + DXGI_FORMAT Format, + UINT NumCubes, + UINT MipLevels = -1, + UINT First2DArrayFace = 0, + UINT MostDetailedMip = 0, + FLOAT ResourceMinLODClamp = 0.0f, + UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY; + desc.Shader4ComponentMapping = Shader4ComponentMapping; + desc.TextureCubeArray.NumCubes = NumCubes; + desc.TextureCubeArray.MostDetailedMip = MostDetailedMip; + desc.TextureCubeArray.MipLevels = MipLevels; + desc.TextureCubeArray.First2DArrayFace = First2DArrayFace; + desc.TextureCubeArray.ResourceMinLODClamp = ResourceMinLODClamp; + return desc; + } + + static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC RaytracingAccelStruct( + D3D12_GPU_VIRTUAL_ADDRESS Location) noexcept + { + CD3DX12_SHADER_RESOURCE_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_UNKNOWN; + desc.ViewDimension = D3D12_SRV_DIMENSION_RAYTRACING_ACCELERATION_STRUCTURE; + desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + desc.RaytracingAccelerationStructure.Location = Location; + return desc; + } +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_UNORDERED_ACCESS_VIEW_DESC : public D3D12_UNORDERED_ACCESS_VIEW_DESC +{ + CD3DX12_UNORDERED_ACCESS_VIEW_DESC() = default; + explicit CD3DX12_UNORDERED_ACCESS_VIEW_DESC( const D3D12_UNORDERED_ACCESS_VIEW_DESC& o ) noexcept : + D3D12_UNORDERED_ACCESS_VIEW_DESC(o) + {} + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC StructuredBuffer( + UINT NumElements, + UINT StructureByteStride, + UINT64 FirstElement = 0, + UINT64 CounterOffsetInBytes = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_UNKNOWN; + desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = StructureByteStride; + desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC RawBuffer( + UINT NumElements, + UINT64 FirstElement = 0, + UINT64 CounterOffsetInBytes = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = DXGI_FORMAT_R32_UINT; + desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = 0; + desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW; + desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC TypedBuffer( + DXGI_FORMAT Format, + UINT NumElements, + UINT64 FirstElement = 0, + UINT64 CounterOffsetInBytes = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; + desc.Buffer.FirstElement = FirstElement; + desc.Buffer.NumElements = NumElements; + desc.Buffer.StructureByteStride = 0; + desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; + desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex1D( + DXGI_FORMAT Format, + UINT MipSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1D; + desc.Texture1D.MipSlice = MipSlice; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex1DArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT FirstArraySlice = 0, + UINT MipSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1DARRAY; + desc.Texture1DArray.MipSlice = MipSlice; + desc.Texture1DArray.FirstArraySlice = FirstArraySlice; + desc.Texture1DArray.ArraySize = ArraySize; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2D( + DXGI_FORMAT Format, + UINT MipSlice = 0, + UINT PlaneSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D; + desc.Texture2D.MipSlice = MipSlice; + desc.Texture2D.PlaneSlice = PlaneSlice; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT FirstArraySlice = 0, + UINT MipSlice = 0, + UINT PlaneSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY; + desc.Texture2DArray.MipSlice = MipSlice; + desc.Texture2DArray.FirstArraySlice = FirstArraySlice; + desc.Texture2DArray.ArraySize = ArraySize; + desc.Texture2DArray.PlaneSlice = PlaneSlice; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DMS( + DXGI_FORMAT Format) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DMS; + //desc.Texture2DMS.UnusedField_NothingToDefine = 0; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DMSArray( + DXGI_FORMAT Format, + UINT ArraySize = -1, + UINT FirstArraySlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY; + desc.Texture2DMSArray.FirstArraySlice = FirstArraySlice; + desc.Texture2DMSArray.ArraySize = ArraySize; + return desc; + } + + static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex3D( + DXGI_FORMAT Format, + UINT WSize = -1, + UINT FirstWSlice = 0, + UINT MipSlice = 0) noexcept + { + CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc; + desc.Format = Format; + desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE3D; + desc.Texture3D.MipSlice = MipSlice; + desc.Texture3D.FirstWSlice = FirstWSlice; + desc.Texture3D.WSize = WSize; + return desc; + } +}; + //------------------------------------------------------------------------------------------------ struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC { @@ -1532,4 +2047,26 @@ struct CD3DX12_RT_FORMAT_ARRAY : public D3D12_RT_FORMAT_ARRAY memcpy(RTFormats, pFormats, sizeof(RTFormats)); // assumes ARRAY_SIZE(pFormats) == ARRAY_SIZE(RTFormats) } -}; \ No newline at end of file +}; + +//------------------------------------------------------------------------------------------------ +struct CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC : public D3D12_SERIALIZED_ROOT_SIGNATURE_DESC +{ + CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC() = default; + explicit CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC& o) noexcept : + D3D12_SERIALIZED_ROOT_SIGNATURE_DESC(o) + { + } + explicit CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC( CD3DX12_DEFAULT ) noexcept + { + pSerializedBlob = nullptr; + SerializedBlobSizeInBytes = 0; + } + explicit CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC( const void* pData, SIZE_T size) noexcept + { + pSerializedBlob = pData; + SerializedBlobSizeInBytes = size; + } +}; + + diff --git a/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h b/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h index 27c7f204485..456583bb7e6 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h @@ -11,8 +11,8 @@ #error D3DX12 requires C++ #endif -#include "d3d12.h" #include "d3dx12_default.h" +#include "d3d12.h" #include "d3dx12_core.h" //------------------------------------------------------------------------------------------------ @@ -25,7 +25,7 @@ struct DefaultSampleMask { operator UINT() noexcept { return UINT_MAX; } }; struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() noexcept { return DXGI_SAMPLE_DESC{1, 0}; } }; -#if defined(_MSC_VER) +#ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4324) #endif @@ -44,7 +44,7 @@ public: InnerStructType* operator&() noexcept { return &pssInner; } InnerStructType const* operator&() const noexcept { return &pssInner; } }; -#if defined(_MSC_VER) +#ifdef _MSC_VER #pragma warning(pop) #endif typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; @@ -81,6 +81,9 @@ typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< DXGI_SAMPLE_DESC, typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SAMPLE_MASK, DefaultSampleMask> CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK; typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_CACHED_PIPELINE_STATE, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_CACHED_PSO> CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO; typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< CD3DX12_VIEW_INSTANCING_DESC, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING, CD3DX12_DEFAULT> CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING; +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618) +typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT CD3DX12_PIPELINE_STATE_STREAM_SERIALIZED_ROOT_SIGNATURE; +#endif //------------------------------------------------------------------------------------------------ // Stream Parser Helpers @@ -122,11 +125,17 @@ struct ID3DX12PipelineParserCallbacks virtual void SampleMaskCb(UINT) {} virtual void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC&) {} virtual void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE&) {} +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618) + virtual void SerializedRootSignatureCb(const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC&) {} +#endif // Error Callbacks virtual void ErrorBadInputParameter(UINT /*ParameterIndex*/) {} virtual void ErrorDuplicateSubobject(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE /*DuplicateType*/) {} virtual void ErrorUnknownSubobject(UINT /*UnknownTypeValue*/) {} +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613) + virtual void FinalizeCb() {} +#endif virtual ~ID3DX12PipelineParserCallbacks() = default; }; @@ -151,6 +160,131 @@ struct D3DX12_MESH_SHADER_PIPELINE_STATE_DESC D3D12_PIPELINE_STATE_FLAGS Flags; }; +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618) +struct CD3DX12_PIPELINE_STATE_STREAM6 +{ + CD3DX12_PIPELINE_STATE_STREAM6() = default; + // Mesh and amplification shaders must be set manually, since they do not have representation in D3D12_GRAPHICS_PIPELINE_STATE_DESC + CD3DX12_PIPELINE_STATE_STREAM6(const D3D12_GRAPHICS_PIPELINE_STATE_DESC& Desc) noexcept + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , InputLayout(Desc.InputLayout) + , IBStripCutValue(Desc.IBStripCutValue) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , VS(Desc.VS) + , GS(Desc.GS) + , StreamOutput(Desc.StreamOutput) + , HS(Desc.HS) + , DS(Desc.DS) + , PS(Desc.PS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + , SerializedRootSignature(CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT())) + { + } + CD3DX12_PIPELINE_STATE_STREAM6(const D3DX12_MESH_SHADER_PIPELINE_STATE_DESC& Desc) noexcept + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) + , PS(Desc.PS) + , AS(Desc.AS) + , MS(Desc.MS) + , BlendState(CD3DX12_BLEND_DESC(Desc.BlendState)) + , DepthStencilState(CD3DX12_DEPTH_STENCIL_DESC2(Desc.DepthStencilState)) + , DSVFormat(Desc.DSVFormat) + , RasterizerState(CD3DX12_RASTERIZER_DESC2(Desc.RasterizerState)) + , RTVFormats(CD3DX12_RT_FORMAT_ARRAY(Desc.RTVFormats, Desc.NumRenderTargets)) + , SampleDesc(Desc.SampleDesc) + , SampleMask(Desc.SampleMask) + , CachedPSO(Desc.CachedPSO) + , ViewInstancingDesc(CD3DX12_VIEW_INSTANCING_DESC(CD3DX12_DEFAULT())) + , SerializedRootSignature(CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT())) + { + } + CD3DX12_PIPELINE_STATE_STREAM6(const D3D12_COMPUTE_PIPELINE_STATE_DESC& Desc) noexcept + : Flags(Desc.Flags) + , NodeMask(Desc.NodeMask) + , pRootSignature(Desc.pRootSignature) + , CS(CD3DX12_SHADER_BYTECODE(Desc.CS)) + , CachedPSO(Desc.CachedPSO) + , SerializedRootSignature(CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(CD3DX12_DEFAULT())) + { + static_cast(DepthStencilState).DepthEnable = false; + } + CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; + CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; + CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_INPUT_LAYOUT InputLayout; + CD3DX12_PIPELINE_STATE_STREAM_IB_STRIP_CUT_VALUE IBStripCutValue; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; + CD3DX12_PIPELINE_STATE_STREAM_VS VS; + CD3DX12_PIPELINE_STATE_STREAM_GS GS; + CD3DX12_PIPELINE_STATE_STREAM_STREAM_OUTPUT StreamOutput; + CD3DX12_PIPELINE_STATE_STREAM_HS HS; + CD3DX12_PIPELINE_STATE_STREAM_DS DS; + CD3DX12_PIPELINE_STATE_STREAM_PS PS; + CD3DX12_PIPELINE_STATE_STREAM_AS AS; + CD3DX12_PIPELINE_STATE_STREAM_MS MS; + CD3DX12_PIPELINE_STATE_STREAM_CS CS; + CD3DX12_PIPELINE_STATE_STREAM_BLEND_DESC BlendState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL2 DepthStencilState; + CD3DX12_PIPELINE_STATE_STREAM_DEPTH_STENCIL_FORMAT DSVFormat; + CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER2 RasterizerState; + CD3DX12_PIPELINE_STATE_STREAM_RENDER_TARGET_FORMATS RTVFormats; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_DESC SampleDesc; + CD3DX12_PIPELINE_STATE_STREAM_SAMPLE_MASK SampleMask; + CD3DX12_PIPELINE_STATE_STREAM_CACHED_PSO CachedPSO; + CD3DX12_PIPELINE_STATE_STREAM_VIEW_INSTANCING ViewInstancingDesc; + CD3DX12_PIPELINE_STATE_STREAM_SERIALIZED_ROOT_SIGNATURE SerializedRootSignature; + + D3D12_GRAPHICS_PIPELINE_STATE_DESC GraphicsDescV0() const noexcept + { + D3D12_GRAPHICS_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.InputLayout = this->InputLayout; + D.IBStripCutValue = this->IBStripCutValue; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.VS = this->VS; + D.GS = this->GS; + D.StreamOutput = this->StreamOutput; + D.HS = this->HS; + D.DS = this->DS; + D.PS = this->PS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEPTH_STENCIL_DESC2(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = CD3DX12_RASTERIZER_DESC2(D3D12_RASTERIZER_DESC2(this->RasterizerState)); + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; + return D; + } + D3D12_COMPUTE_PIPELINE_STATE_DESC ComputeDescV0() const noexcept + { + D3D12_COMPUTE_PIPELINE_STATE_DESC D; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.CS = this->CS; + D.CachedPSO = this->CachedPSO; + return D; + } +}; +#endif + #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) // Use CD3DX12_PIPELINE_STATE_STREAM5 for D3D12_RASTERIZER_DESC2 when CheckFeatureSupport returns true for Options19::RasterizerDesc2Supported is true // Use CD3DX12_PIPELINE_STATE_STREAM4 for D3D12_RASTERIZER_DESC1 when CheckFeatureSupport returns true for Options16::DynamicDepthBiasSupported is true @@ -764,6 +898,7 @@ struct CD3DX12_PIPELINE_MESH_STATE_STREAM : Flags(Desc.Flags) , NodeMask(Desc.NodeMask) , pRootSignature(Desc.pRootSignature) + , PrimitiveTopologyType(Desc.PrimitiveTopologyType) , PS(Desc.PS) , AS(Desc.AS) , MS(Desc.MS) @@ -780,6 +915,7 @@ struct CD3DX12_PIPELINE_MESH_STATE_STREAM CD3DX12_PIPELINE_STATE_STREAM_FLAGS Flags; CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK NodeMask; CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE pRootSignature; + CD3DX12_PIPELINE_STATE_STREAM_PRIMITIVE_TOPOLOGY PrimitiveTopologyType; CD3DX12_PIPELINE_STATE_STREAM_PS PS; CD3DX12_PIPELINE_STATE_STREAM_AS AS; CD3DX12_PIPELINE_STATE_STREAM_MS MS; @@ -795,21 +931,22 @@ struct CD3DX12_PIPELINE_MESH_STATE_STREAM D3DX12_MESH_SHADER_PIPELINE_STATE_DESC MeshShaderDescV0() const noexcept { D3DX12_MESH_SHADER_PIPELINE_STATE_DESC D; - D.Flags = this->Flags; - D.NodeMask = this->NodeMask; - D.pRootSignature = this->pRootSignature; - D.PS = this->PS; - D.AS = this->AS; - D.MS = this->MS; - D.BlendState = this->BlendState; - D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); - D.DSVFormat = this->DSVFormat; - D.RasterizerState = this->RasterizerState; - D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; + D.Flags = this->Flags; + D.NodeMask = this->NodeMask; + D.pRootSignature = this->pRootSignature; + D.PrimitiveTopologyType = this->PrimitiveTopologyType; + D.PS = this->PS; + D.AS = this->AS; + D.MS = this->MS; + D.BlendState = this->BlendState; + D.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEPTH_STENCIL_DESC1(this->DepthStencilState)); + D.DSVFormat = this->DSVFormat; + D.RasterizerState = this->RasterizerState; + D.NumRenderTargets = D3D12_RT_FORMAT_ARRAY(this->RTVFormats).NumRenderTargets; memcpy(D.RTVFormats, D3D12_RT_FORMAT_ARRAY(this->RTVFormats).RTFormats, sizeof(D.RTVFormats)); - D.SampleDesc = this->SampleDesc; - D.SampleMask = this->SampleMask; - D.CachedPSO = this->CachedPSO; + D.SampleDesc = this->SampleDesc; + D.SampleMask = this->SampleMask; + D.CachedPSO = this->CachedPSO; return D; } }; @@ -907,6 +1044,7 @@ struct CD3DX12_PIPELINE_STATE_STREAM } }; + struct CD3DX12_PIPELINE_STATE_STREAM2_PARSE_HELPER : public ID3DX12PipelineParserCallbacks { CD3DX12_PIPELINE_STATE_STREAM2 PipelineStream; @@ -1102,7 +1240,87 @@ private: }; #endif // D3D12_SDK_VERSION >= 608 -#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613) +// This SDK 613 version has better primitive topology default handling than the v610 equivalent below. +struct CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM5 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER() noexcept + : SeenDSS(false), + SeenMS(false), + SeenTopology(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; } + void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; } + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; } + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; } + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; } + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override + { + PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; + SeenTopology = true; + } + void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; } + void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; } + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; } + void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; } + void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; } + void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; } + void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; } + void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; } + void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; SeenMS = true; } + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); } + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override {PipelineStream.DSVFormat = DSVFormat;} + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } + void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } + void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; } + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; } + void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; } + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); } + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; } + void FinalizeCb() override + { + if (!SeenDSS && PipelineStream.DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + if (!SeenTopology && SeenMS) + { + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED; + } + } + +private: + bool SeenDSS; + bool SeenMS; + bool SeenTopology; +}; +#elif defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 610) struct CD3DX12_PIPELINE_STATE_STREAM5_PARSE_HELPER : public ID3DX12PipelineParserCallbacks { CD3DX12_PIPELINE_STATE_STREAM5 PipelineStream; @@ -1171,6 +1389,88 @@ private: }; #endif // D3D12_SDK_VERSION >= 610 +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618) +struct CD3DX12_PIPELINE_STATE_STREAM6_PARSE_HELPER : public ID3DX12PipelineParserCallbacks +{ + CD3DX12_PIPELINE_STATE_STREAM6 PipelineStream; + CD3DX12_PIPELINE_STATE_STREAM6_PARSE_HELPER() noexcept + : SeenDSS(false), + SeenMS(false), + SeenTopology(false) + { + // Adjust defaults to account for absent members. + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE; + + // Depth disabled if no DSV format specified. + static_cast(PipelineStream.DepthStencilState).DepthEnable = false; + } + + // ID3DX12PipelineParserCallbacks + void FlagsCb(D3D12_PIPELINE_STATE_FLAGS Flags) override { PipelineStream.Flags = Flags; } + void NodeMaskCb(UINT NodeMask) override { PipelineStream.NodeMask = NodeMask; } + void RootSignatureCb(ID3D12RootSignature* pRootSignature) override { PipelineStream.pRootSignature = pRootSignature; } + void InputLayoutCb(const D3D12_INPUT_LAYOUT_DESC& InputLayout) override { PipelineStream.InputLayout = InputLayout; } + void IBStripCutValueCb(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue) override { PipelineStream.IBStripCutValue = IBStripCutValue; } + void PrimitiveTopologyTypeCb(D3D12_PRIMITIVE_TOPOLOGY_TYPE PrimitiveTopologyType) override + { + PipelineStream.PrimitiveTopologyType = PrimitiveTopologyType; + SeenTopology = true; + } + void VSCb(const D3D12_SHADER_BYTECODE& VS) override { PipelineStream.VS = VS; } + void GSCb(const D3D12_SHADER_BYTECODE& GS) override { PipelineStream.GS = GS; } + void StreamOutputCb(const D3D12_STREAM_OUTPUT_DESC& StreamOutput) override { PipelineStream.StreamOutput = StreamOutput; } + void HSCb(const D3D12_SHADER_BYTECODE& HS) override { PipelineStream.HS = HS; } + void DSCb(const D3D12_SHADER_BYTECODE& DS) override { PipelineStream.DS = DS; } + void PSCb(const D3D12_SHADER_BYTECODE& PS) override { PipelineStream.PS = PS; } + void CSCb(const D3D12_SHADER_BYTECODE& CS) override { PipelineStream.CS = CS; } + void ASCb(const D3D12_SHADER_BYTECODE& AS) override { PipelineStream.AS = AS; } + void MSCb(const D3D12_SHADER_BYTECODE& MS) override { PipelineStream.MS = MS; SeenMS = true; } + void BlendStateCb(const D3D12_BLEND_DESC& BlendState) override { PipelineStream.BlendState = CD3DX12_BLEND_DESC(BlendState); } + void DepthStencilStateCb(const D3D12_DEPTH_STENCIL_DESC& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState1Cb(const D3D12_DEPTH_STENCIL_DESC1& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); + SeenDSS = true; + } + void DepthStencilState2Cb(const D3D12_DEPTH_STENCIL_DESC2& DepthStencilState) override + { + PipelineStream.DepthStencilState = CD3DX12_DEPTH_STENCIL_DESC2(DepthStencilState); + SeenDSS = true; + } + void DSVFormatCb(DXGI_FORMAT DSVFormat) override { PipelineStream.DSVFormat = DSVFormat; } + void RasterizerStateCb(const D3D12_RASTERIZER_DESC& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } + void RasterizerState1Cb(const D3D12_RASTERIZER_DESC1& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } + void RasterizerState2Cb(const D3D12_RASTERIZER_DESC2& RasterizerState) override { PipelineStream.RasterizerState = CD3DX12_RASTERIZER_DESC2(RasterizerState); } + void RTVFormatsCb(const D3D12_RT_FORMAT_ARRAY& RTVFormats) override { PipelineStream.RTVFormats = RTVFormats; } + void SampleDescCb(const DXGI_SAMPLE_DESC& SampleDesc) override { PipelineStream.SampleDesc = SampleDesc; } + void SampleMaskCb(UINT SampleMask) override { PipelineStream.SampleMask = SampleMask; } + void ViewInstancingCb(const D3D12_VIEW_INSTANCING_DESC& ViewInstancingDesc) override { PipelineStream.ViewInstancingDesc = CD3DX12_VIEW_INSTANCING_DESC(ViewInstancingDesc); } + void CachedPSOCb(const D3D12_CACHED_PIPELINE_STATE& CachedPSO) override { PipelineStream.CachedPSO = CachedPSO; } + void FinalizeCb() override + { + if (!SeenDSS && PipelineStream.DSVFormat != DXGI_FORMAT_UNKNOWN) + { + // Re-enable depth for the default state. + static_cast(PipelineStream.DepthStencilState).DepthEnable = true; + } + if (!SeenTopology && SeenMS) + { + PipelineStream.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED; + } + } + void SerializedRootSignatureCb(const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC& SerializedRootSignature) override { PipelineStream.SerializedRootSignature = CD3DX12_SERIALIZED_ROOT_SIGNATURE_DESC(SerializedRootSignature); } + +private: + bool SeenDSS; + bool SeenMS; + bool SeenTopology; +}; +#endif // D3D12_SDK_VERSION >= 618 + struct CD3DX12_PIPELINE_STATE_STREAM_PARSE_HELPER : public ID3DX12PipelineParserCallbacks { CD3DX12_PIPELINE_STATE_STREAM1 PipelineStream; @@ -1229,6 +1529,7 @@ private: bool SeenDSS; }; + inline D3D12_PIPELINE_STATE_SUBOBJECT_TYPE D3DX12GetBaseSubobjectType(D3D12_PIPELINE_STATE_SUBOBJECT_TYPE SubobjectType) noexcept { switch (SubobjectType) @@ -1397,11 +1698,21 @@ inline HRESULT D3DX12ParsePipelineStream(const D3D12_PIPELINE_STATE_STREAM_DESC& pCallbacks->ViewInstancingCb(*reinterpret_cast(pStream)); SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM1::ViewInstancingDesc); break; +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618) + case D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_SERIALIZED_ROOT_SIGNATURE: + pCallbacks->SerializedRootSignatureCb(*reinterpret_cast(pStream)); + SizeOfSubobject = sizeof(CD3DX12_PIPELINE_STATE_STREAM6::SerializedRootSignature); + break; +#endif default: pCallbacks->ErrorUnknownSubobject(SubobjectType); return E_INVALIDARG; } } +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 613) + pCallbacks->FinalizeCb(); +#endif return S_OK; } + diff --git a/thirdparty/directx_headers/include/directx/d3dx12_property_format_table.h b/thirdparty/directx_headers/include/directx/d3dx12_property_format_table.h index 301100c034f..66c7600f55d 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_property_format_table.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_property_format_table.h @@ -62,8 +62,10 @@ public: static LPCSTR GetName (DXGI_FORMAT Format, bool bHideInternalFormats = true); static bool IsSRGBFormat (DXGI_FORMAT Format); static UINT GetBitsPerStencil (DXGI_FORMAT Format); + static UINT GetBitsPerDepth (DXGI_FORMAT Format); static void GetFormatReturnTypes (DXGI_FORMAT Format, D3D_FORMAT_COMPONENT_INTERPRETATION* pInterpretations); // return array of 4 components static UINT GetNumComponentsInFormat(DXGI_FORMAT Format); + static UINT GetMinNumComponentsInFormats(DXGI_FORMAT FormatA, DXGI_FORMAT FormatB); // Converts the sequential component index (range from 0 to GetNumComponentsInFormat()) to // the absolute component index (range 0 to 3). @@ -116,6 +118,8 @@ public: static UINT GetDetailTableIndex (DXGI_FORMAT Format); static UINT GetDetailTableIndexNoThrow (DXGI_FORMAT Format); static UINT GetDetailTableIndexThrow (DXGI_FORMAT Format); + static bool SupportsDepth (DXGI_FORMAT Format); + static bool SupportsStencil (DXGI_FORMAT Format); private: static const FORMAT_DETAIL* GetFormatDetail (DXGI_FORMAT Format); diff --git a/thirdparty/directx_headers/include/directx/d3dx12_render_pass.h b/thirdparty/directx_headers/include/directx/d3dx12_render_pass.h index fc032f86cda..c88fbdf1bc9 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_render_pass.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_render_pass.h @@ -60,6 +60,8 @@ inline bool operator==( const D3D12_RENDER_PASS_BEGINNING_ACCESS &a, const D3D12 if (!(a.PreserveLocal == b.PreserveLocal)) return false; break; #endif + default: + break; } return true; } @@ -79,8 +81,9 @@ inline bool operator==(const D3D12_RENDER_PASS_ENDING_ACCESS& a, const D3D12_REN if (!(a.PreserveLocal == b.PreserveLocal)) return false; break; #endif + default: + break; } - return true; } diff --git a/thirdparty/directx_headers/include/directx/d3dx12_resource_helpers.h b/thirdparty/directx_headers/include/directx/d3dx12_resource_helpers.h index 902ec0cd6ee..5c1c980d622 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_resource_helpers.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_resource_helpers.h @@ -11,9 +11,9 @@ #error D3DX12 requires C++ #endif +#include "d3dx12_property_format_table.h" #include "d3d12.h" #include "d3dx12_core.h" -#include "d3dx12_property_format_table.h" //------------------------------------------------------------------------------------------------ template inline void D3D12DecomposeSubresource( UINT Subresource, UINT MipLevels, UINT ArraySize, _Out_ T& MipSlice, _Out_ U& ArraySlice, _Out_ V& PlaneSlice ) noexcept @@ -395,9 +395,11 @@ inline T D3DX12AlignAtLeast(T uValue, T uAlign) inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc( D3D12_RESOURCE_DESC1& LclDesc, - const D3D12_RESOURCE_DESC1* pDesc) + const D3D12_RESOURCE_DESC1* pDesc, + const bool tightAlignmentSupported = false, + const bool alignAsCommitted = false) { - return D3DX12ConditionallyExpandAPIDesc(static_cast(LclDesc), static_cast(pDesc)); + return D3DX12ConditionallyExpandAPIDesc(static_cast(LclDesc), static_cast(pDesc), tightAlignmentSupported, alignAsCommitted); } #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 606) @@ -429,6 +431,12 @@ inline bool D3DX12GetCopyableFootprints( // Check if its a valid format D3DX12_ASSERT(D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FormatExists(Format)); + // D3DX12GetCopyableFootprints does not support buffers with width larger than UINT_MAX. + if (ResourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && ResourceDesc.Width >= UINT_MAX) + { + return false; + } + const UINT WidthAlignment = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetWidthAlignment( Format ); const UINT HeightAlignment = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetHeightAlignment( Format ); const UINT16 DepthAlignment = UINT16( D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDepthAlignment( Format ) ); @@ -460,7 +468,7 @@ inline bool D3DX12GetCopyableFootprints( UINT32 MinPlanePitchWidth, PlaneWidth, PlaneHeight; D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetPlaneSubsampledSizeAndFormatForCopyableLayout(PlaneSlice, Format, (UINT)Width, Height, /*_Out_*/ PlaneFormat, /*_Out_*/ MinPlanePitchWidth, /* _Out_ */ PlaneWidth, /*_Out_*/ PlaneHeight); - D3D12_SUBRESOURCE_FOOTPRINT LocalPlacement; + D3D12_SUBRESOURCE_FOOTPRINT LocalPlacement = {}; auto& Placement = pLayouts ? pLayouts[uSubRes].Footprint : LocalPlacement; Placement.Format = PlaneFormat; Placement.Width = PlaneWidth; @@ -600,3 +608,5 @@ inline bool D3DX12GetCopyableFootprints( } #endif // D3D12_SDK_VERSION >= 606 + + diff --git a/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h b/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h index 2da79d10f12..bf9a2c91015 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h @@ -995,6 +995,11 @@ struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE // To help enable root signature 1.1 features when they are available and not require maintaining // two code paths for building root signatures, this helper method reconstructs a 1.0 signature when // 1.1 is not supported. +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcovered-switch-default" +#endif + inline HRESULT D3DX12SerializeVersionedRootSignature( _In_ HMODULE pLibD3D12, _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, @@ -1060,32 +1065,38 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( break; case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: - const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; - - const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; - void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; - if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) { - hr = E_OUTOFMEMORY; - } - auto pDescriptorRanges_1_0 = static_cast(pDescriptorRanges); + const D3D12_ROOT_DESCRIPTOR_TABLE1& table_1_1 = desc_1_1.pParameters[n].DescriptorTable; - if (SUCCEEDED(hr)) - { - for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + const SIZE_T DescriptorRangesSize = sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges; + void* pDescriptorRanges = (DescriptorRangesSize > 0 && SUCCEEDED(hr)) ? HeapAlloc(GetProcessHeap(), 0, DescriptorRangesSize) : nullptr; + if (DescriptorRangesSize > 0 && pDescriptorRanges == nullptr) { - __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); - pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; - pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; - pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; - pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; - pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + hr = E_OUTOFMEMORY; } - } + auto pDescriptorRanges_1_0 = static_cast(pDescriptorRanges); - D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; - table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; - table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + if (SUCCEEDED(hr)) + { + for (UINT x = 0; x < table_1_1.NumDescriptorRanges; x++) + { + __analysis_assume(DescriptorRangesSize == sizeof(D3D12_DESCRIPTOR_RANGE) * table_1_1.NumDescriptorRanges); + pDescriptorRanges_1_0[x].BaseShaderRegister = table_1_1.pDescriptorRanges[x].BaseShaderRegister; + pDescriptorRanges_1_0[x].NumDescriptors = table_1_1.pDescriptorRanges[x].NumDescriptors; + pDescriptorRanges_1_0[x].OffsetInDescriptorsFromTableStart = table_1_1.pDescriptorRanges[x].OffsetInDescriptorsFromTableStart; + pDescriptorRanges_1_0[x].RangeType = table_1_1.pDescriptorRanges[x].RangeType; + pDescriptorRanges_1_0[x].RegisterSpace = table_1_1.pDescriptorRanges[x].RegisterSpace; + } + } + + D3D12_ROOT_DESCRIPTOR_TABLE& table_1_0 = pParameters_1_0[n].DescriptorTable; + table_1_0.NumDescriptorRanges = table_1_1.NumDescriptorRanges; + table_1_0.pDescriptorRanges = pDescriptorRanges_1_0; + } + break; + + default: + break; } } } @@ -1143,6 +1154,9 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( return hr; } + + default: + break; } break; @@ -1199,12 +1213,21 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( } #endif + default: + break; } + break; + #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) case D3D_ROOT_SIGNATURE_VERSION_1_2: #endif + default: return d3d_D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); } return E_INVALIDARG; } + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif diff --git a/thirdparty/directx_headers/include/directx/d3dx12_state_object.h b/thirdparty/directx_headers/include/directx/d3dx12_state_object.h index 74dc6ca2d9f..579ecc8f89e 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_state_object.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_state_object.h @@ -11,7 +11,9 @@ #error D3DX12 requires C++ #endif +#include "d3dx12_default.h" #include "d3d12.h" +#include "d3dx12_core.h" //================================================================================================ // D3DX12 State Object Creation Helpers @@ -27,6 +29,8 @@ // //================================================================================================ #include +#include +#include #include #include #include @@ -55,9 +59,16 @@ public: Init(Type); } void SetStateObjectType(D3D12_STATE_OBJECT_TYPE Type) noexcept { m_Desc.Type = Type; } - operator const D3D12_STATE_OBJECT_DESC&() + CD3DX12_STATE_OBJECT_DESC(const CD3DX12_STATE_OBJECT_DESC& other) = delete; + CD3DX12_STATE_OBJECT_DESC& operator=(const CD3DX12_STATE_OBJECT_DESC& other) = delete; + CD3DX12_STATE_OBJECT_DESC(CD3DX12_STATE_OBJECT_DESC&& other) = default; + CD3DX12_STATE_OBJECT_DESC& operator=(CD3DX12_STATE_OBJECT_DESC&& other) = default; + operator const D3D12_STATE_OBJECT_DESC& () { - // Do final preparation work +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + m_RepointedSubobjectVectors.clear(); + m_RepointedPrograms.clear(); +#endif m_RepointedAssociations.clear(); m_SubobjectArray.clear(); m_SubobjectArray.reserve(m_Desc.NumSubobjects); @@ -85,12 +96,36 @@ public: m_RepointedAssociations.push_back(Repointed); m_SubobjectArray[i].pDesc = &m_RepointedAssociations.back(); } +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + else if (m_SubobjectArray[i].Type == D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM) + { + auto originalGenericProgramDesc = + static_cast(m_SubobjectArray[i].pDesc); + D3D12_GENERIC_PROGRAM_DESC Repointed = *originalGenericProgramDesc; + if (originalGenericProgramDesc->NumSubobjects > 0) + { + m_RepointedSubobjectVectors.emplace_back(std::vector()); + std::vector& repointedGenericProgramSubobjects = m_RepointedSubobjectVectors.back(); + repointedGenericProgramSubobjects.resize(originalGenericProgramDesc->NumSubobjects); + for (UINT s = 0; s < originalGenericProgramDesc->NumSubobjects; s++) + { + auto pWrapper = + static_cast(originalGenericProgramDesc->ppSubobjects[s]); + repointedGenericProgramSubobjects[s] = pWrapper->pSubobjectArrayLocation; + } + // Below: using ugly way to get pointer in case .data() is not defined + Repointed.ppSubobjects = &repointedGenericProgramSubobjects[0]; + } + m_RepointedPrograms.push_back(Repointed); + m_SubobjectArray[i].pDesc = &m_RepointedPrograms.back(); + } +#endif } // Below: using ugly way to get pointer in case .data() is not defined m_Desc.pSubobjects = m_Desc.NumSubobjects ? &m_SubobjectArray[0] : nullptr; return m_Desc; } - operator const D3D12_STATE_OBJECT_DESC*() + operator const D3D12_STATE_OBJECT_DESC* () { // Cast calls the above final preparation work return &static_cast(*this); @@ -129,6 +164,14 @@ public: return pSubobject; } + template + T* CreateSubobject(U&& arg) + { + T* pSubobject = new T(std::forward(arg), *this); + m_OwnedSubobjectHelpers.emplace_back(pSubobject); + return pSubobject; + } + private: D3D12_STATE_SUBOBJECT* TrackSubobject(D3D12_STATE_SUBOBJECT_TYPE Type, void* pDesc) { @@ -148,6 +191,10 @@ private: m_SubobjectList.clear(); m_SubobjectArray.clear(); m_RepointedAssociations.clear(); +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + m_RepointedSubobjectVectors.clear(); + m_RepointedPrograms.clear(); +#endif } typedef struct SUBOBJECT_WRAPPER : public D3D12_STATE_SUBOBJECT { @@ -160,13 +207,21 @@ private: std::vector m_SubobjectArray; // Built at the end, copying list contents std::list - m_RepointedAssociations; // subobject type that contains pointers to other subobjects, - // repointed to flattened array + m_RepointedAssociations; // subobject type that contains pointers to other subobjects, + // repointed to flattened array +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + std::list> + m_RepointedSubobjectVectors; + std::list + m_RepointedPrograms; +#endif + + template class StringContainer { public: - LPCWSTR LocalCopy(LPCWSTR string, bool bSingleString = false) + CStr LocalCopy(CStr string, bool bSingleString = false) { if (string) { @@ -188,38 +243,33 @@ private: } void clear() noexcept { m_Strings.clear(); } private: - std::list m_Strings; + std::list m_Strings; }; +public: class SUBOBJECT_HELPER_BASE { public: SUBOBJECT_HELPER_BASE() noexcept { Init(); } virtual ~SUBOBJECT_HELPER_BASE() = default; virtual D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept = 0; + SUBOBJECT_HELPER_BASE(const SUBOBJECT_HELPER_BASE& other) = delete; + SUBOBJECT_HELPER_BASE& operator=(const SUBOBJECT_HELPER_BASE& other) = delete; + SUBOBJECT_HELPER_BASE(SUBOBJECT_HELPER_BASE&& other) = default; + SUBOBJECT_HELPER_BASE& operator=(SUBOBJECT_HELPER_BASE&& other) = default; void AddToStateObject(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) { m_pSubobject = ContainingStateObject.TrackSubobject(Type(), Data()); } + operator const D3D12_STATE_SUBOBJECT& () const noexcept { return *m_pSubobject; } protected: virtual void* Data() noexcept = 0; void Init() noexcept { m_pSubobject = nullptr; } D3D12_STATE_SUBOBJECT* m_pSubobject; }; -#if(__cplusplus >= 201103L) - std::list> m_OwnedSubobjectHelpers; -#else - class OWNED_HELPER - { - public: - OWNED_HELPER(const SUBOBJECT_HELPER_BASE* pHelper) noexcept { m_pHelper = pHelper; } - ~OWNED_HELPER() { delete m_pHelper; } - const SUBOBJECT_HELPER_BASE* m_pHelper; - }; - - std::list m_OwnedSubobjectHelpers; -#endif +private: + std::list> m_OwnedSubobjectHelpers; friend class CD3DX12_DXIL_LIBRARY_SUBOBJECT; friend class CD3DX12_EXISTING_COLLECTION_SUBOBJECT; @@ -233,6 +283,40 @@ private: friend class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT; friend class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT; friend class CD3DX12_NODE_MASK_SUBOBJECT; + //TODO: SDK Version check should include all the newly added subobject type for the public release. + // The SDK version check will be changed based on when we release state objects. +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + friend class CD3DX12_GENERIC_PROGRAM_SUBOBJECT; + friend class CD3DX12_WORK_GRAPH_SUBOBJECT; + friend class CD3DX12_STREAM_OUTPUT_SUBOBJECT; + friend class CD3DX12_BLEND_SUBOBJECT; + friend class CD3DX12_RASTERIZER_SUBOBJECT; + friend class CD3DX12_DEPTH_STENCIL2_SUBOBJECT; + friend class CD3DX12_INPUT_LAYOUT_SUBOBJECT; + friend class CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT; + friend class CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT; + friend class CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT; + friend class CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT; + friend class CD3DX12_SAMPLE_DESC_SUBOBJECT; + friend class CD3DX12_FLAGS_SUBOBJECT; + friend class CD3DX12_VIEW_INSTANCING_SUBOBJECT; + friend class CD3DX12_DEPTH_STENCIL_SUBOBJECT; + friend class CD3DX12_DEPTH_STENCIL1_SUBOBJECT; + friend class CD3DX12_SAMPLE_MASK_SUBOBJECT; + friend class CD3DX12_NODE_OUTPUT_OVERRIDES; + friend class CD3DX12_NODE_HELPER_BASE; + friend class CD3DX12_SHADER_NODE; + friend class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES; + friend class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES; + friend class CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES; + friend class CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES; +#endif // D3D12_SDK_VERSION >= 612 +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618) + friend class CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT; + friend class CD3DX12_COMPILER_EXISTING_COLLECTION_SUBOBJECT; + friend class CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT; +#endif }; //------------------------------------------------------------------------------------------------ @@ -249,6 +333,10 @@ public: Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_DXIL_LIBRARY_SUBOBJECT(const CD3DX12_DXIL_LIBRARY_SUBOBJECT& other) = delete; + CD3DX12_DXIL_LIBRARY_SUBOBJECT& operator=(const CD3DX12_DXIL_LIBRARY_SUBOBJECT& other) = delete; + CD3DX12_DXIL_LIBRARY_SUBOBJECT(CD3DX12_DXIL_LIBRARY_SUBOBJECT&& other) = default; + CD3DX12_DXIL_LIBRARY_SUBOBJECT& operator=(CD3DX12_DXIL_LIBRARY_SUBOBJECT&& other) = default; void SetDXILLibrary(const D3D12_SHADER_BYTECODE* pCode) noexcept { static const D3D12_SHADER_BYTECODE Default = {}; @@ -286,7 +374,6 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_DXIL_LIBRARY_DESC&() const noexcept { return m_Desc; } private: void Init() noexcept @@ -298,7 +385,7 @@ private: } void* Data() noexcept override { return &m_Desc; } D3D12_DXIL_LIBRARY_DESC m_Desc; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; std::vector m_Exports; }; @@ -316,6 +403,10 @@ public: Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(const CD3DX12_EXISTING_COLLECTION_SUBOBJECT& other) = delete; + CD3DX12_EXISTING_COLLECTION_SUBOBJECT& operator=(const CD3DX12_EXISTING_COLLECTION_SUBOBJECT& other) = delete; + CD3DX12_EXISTING_COLLECTION_SUBOBJECT(CD3DX12_EXISTING_COLLECTION_SUBOBJECT&& other) = default; + CD3DX12_EXISTING_COLLECTION_SUBOBJECT& operator=(CD3DX12_EXISTING_COLLECTION_SUBOBJECT&& other) = default; void SetExistingCollection(ID3D12StateObject*pExistingCollection) noexcept { m_Desc.pExistingCollection = pExistingCollection; @@ -353,7 +444,6 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_EXISTING_COLLECTION_DESC&() const noexcept { return m_Desc; } private: void Init() noexcept @@ -367,7 +457,7 @@ private: void* Data() noexcept override { return &m_Desc; } D3D12_EXISTING_COLLECTION_DESC m_Desc; D3DX12_COM_PTR m_CollectionRef; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; std::vector m_Exports; }; @@ -385,6 +475,10 @@ public: Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(const CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& other) = delete; + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& operator=(const CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& other) = delete; + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT(CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT&& other) = default; + CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT& operator=(CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT&& other) = default; void SetSubobjectToAssociate(const D3D12_STATE_SUBOBJECT& SubobjectToAssociate) noexcept { m_Desc.pSubobjectToAssociate = &SubobjectToAssociate; @@ -414,7 +508,6 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const noexcept { return m_Desc; } private: void Init() noexcept @@ -426,7 +519,7 @@ private: } void* Data() noexcept override { return &m_Desc; } D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; std::vector m_Exports; }; @@ -444,6 +537,10 @@ public: Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(const CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& other) = delete; + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& operator=(const CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& other) = delete; + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION(CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&& other) = default; + CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION& operator=(CD3DX12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&& other) = default; void SetSubobjectNameToAssociate(LPCWSTR SubobjectToAssociate) { m_Desc.SubobjectToAssociate = m_SubobjectName.LocalCopy(SubobjectToAssociate, true); @@ -473,7 +570,6 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION&() const noexcept { return m_Desc; } private: void Init() noexcept @@ -486,8 +582,8 @@ private: } void* Data() noexcept override { return &m_Desc; } D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION m_Desc; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; - CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_SubobjectName; std::vector m_Exports; }; @@ -505,6 +601,10 @@ public: Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_HIT_GROUP_SUBOBJECT(const CD3DX12_HIT_GROUP_SUBOBJECT& other) = delete; + CD3DX12_HIT_GROUP_SUBOBJECT& operator=(const CD3DX12_HIT_GROUP_SUBOBJECT& other) = delete; + CD3DX12_HIT_GROUP_SUBOBJECT(CD3DX12_HIT_GROUP_SUBOBJECT&& other) = default; + CD3DX12_HIT_GROUP_SUBOBJECT& operator=(CD3DX12_HIT_GROUP_SUBOBJECT&& other) = default; void SetHitGroupExport(LPCWSTR exportName) { m_Desc.HitGroupExport = m_Strings[0].LocalCopy(exportName, true); @@ -526,7 +626,6 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_HIT_GROUP_DESC&() const noexcept { return m_Desc; } private: void Init() noexcept @@ -541,7 +640,7 @@ private: void* Data() noexcept override { return &m_Desc; } D3D12_HIT_GROUP_DESC m_Desc; static constexpr UINT m_NumStrings = 4; - CD3DX12_STATE_OBJECT_DESC::StringContainer + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings[m_NumStrings]; // one string for every entrypoint name }; @@ -551,14 +650,31 @@ class CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT { public: CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) { Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(const D3D12_RAYTRACING_SHADER_CONFIG &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(const D3D12_RAYTRACING_SHADER_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(const CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& other) = delete; + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& operator=(const CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& other) = delete; + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT(CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT&& other) = default; + CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT& operator=(CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT&& other) = default; void Config(UINT MaxPayloadSizeInBytes, UINT MaxAttributeSizeInBytes) noexcept { m_Desc.MaxPayloadSizeInBytes = MaxPayloadSizeInBytes; @@ -568,13 +684,12 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_RAYTRACING_SHADER_CONFIG&() const noexcept { return m_Desc; } + operator D3D12_RAYTRACING_SHADER_CONFIG&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_RAYTRACING_SHADER_CONFIG m_Desc; @@ -586,14 +701,31 @@ class CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT { public: CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) { Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(const D3D12_RAYTRACING_PIPELINE_CONFIG &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(const D3D12_RAYTRACING_PIPELINE_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(const CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& other) = delete; + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& operator=(const CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& other) = delete; + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT(CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT&& other) = default; + CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT& operator=(CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT&& other) = default; void Config(UINT MaxTraceRecursionDepth) noexcept { m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; @@ -602,13 +734,12 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_RAYTRACING_PIPELINE_CONFIG&() const noexcept { return m_Desc; } + operator D3D12_RAYTRACING_PIPELINE_CONFIG&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_RAYTRACING_PIPELINE_CONFIG m_Desc; @@ -620,14 +751,31 @@ class CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT { public: CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) { Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(const D3D12_RAYTRACING_PIPELINE_CONFIG1 &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(const D3D12_RAYTRACING_PIPELINE_CONFIG1 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(const CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& other) = delete; + CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& operator=(const CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& other) = delete; + CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT(CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT&& other) = default; + CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT& operator=(CD3DX12_RAYTRACING_PIPELINE_CONFIG1_SUBOBJECT&& other) = default; void Config(UINT MaxTraceRecursionDepth, D3D12_RAYTRACING_PIPELINE_FLAGS Flags) noexcept { m_Desc.MaxTraceRecursionDepth = MaxTraceRecursionDepth; @@ -637,13 +785,12 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_RAYTRACING_PIPELINE_CONFIG1&() const noexcept { return m_Desc; } + operator D3D12_RAYTRACING_PIPELINE_CONFIG1&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_RAYTRACING_PIPELINE_CONFIG1 m_Desc; @@ -663,6 +810,10 @@ public: Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(const CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& other) = delete; + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& operator=(const CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& other) = delete; + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT&& other) = default; + CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT&& other) = default; void SetRootSignature(ID3D12RootSignature* pRootSig) noexcept { m_pRootSig = pRootSig; @@ -671,7 +822,6 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator ID3D12RootSignature*() const noexcept { return D3DX12_COM_PTR_GET(m_pRootSig); } private: void Init() noexcept @@ -683,6 +833,7 @@ private: D3DX12_COM_PTR m_pRootSig; }; + //------------------------------------------------------------------------------------------------ class CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE @@ -697,6 +848,10 @@ public: Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(const CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& other) = delete; + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& operator=(const CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& other) = delete; + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT&& other) = default; + CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT&& other) = default; void SetRootSignature(ID3D12RootSignature* pRootSig) noexcept { m_pRootSig = pRootSig; @@ -705,7 +860,6 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator ID3D12RootSignature*() const noexcept { return D3DX12_COM_PTR_GET(m_pRootSig); } private: void Init() noexcept @@ -717,20 +871,205 @@ private: D3DX12_COM_PTR m_pRootSig; }; +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618) +//------------------------------------------------------------------------------------------------ +class CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT() noexcept + : m_Desc({}) + { + Init(); + } + CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(const CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& other) = delete; + CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& operator=(const CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& other) = delete; + CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT&& other) = default; + CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_GLOBAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT&& other) = default; + void SetRootSignature(const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC* pDesc) noexcept + { + if (pDesc) + { + m_Desc.Desc = {}; + m_Desc.Desc.pSerializedBlob = pDesc->pSerializedBlob; + m_Desc.Desc.SerializedBlobSizeInBytes = pDesc->SerializedBlobSizeInBytes; + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_SERIALIZED_ROOT_SIGNATURE; + } + operator const D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE&() const noexcept { return m_Desc; } + operator D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE&() noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() noexcept override { return &m_Desc; } + D3D12_GLOBAL_SERIALIZED_ROOT_SIGNATURE m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT() noexcept + : m_Desc({}) + { + Init(); + } + CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(const CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& other) = delete; + CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& operator=(const CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& other) = delete; + CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT(CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT&& other) = default; + CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT& operator=(CD3DX12_LOCAL_SERIALIZED_ROOT_SIGNATURE_SUBOBJECT&& other) = default; + void SetRootSignature(const D3D12_SERIALIZED_ROOT_SIGNATURE_DESC* pDesc) noexcept + { + if (pDesc) + { + m_Desc.Desc = {}; + m_Desc.Desc.pSerializedBlob = pDesc->pSerializedBlob; + m_Desc.Desc.SerializedBlobSizeInBytes = pDesc->SerializedBlobSizeInBytes; + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_LOCAL_SERIALIZED_ROOT_SIGNATURE; + } + operator const D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE&() const noexcept { return m_Desc; } + operator D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE&() noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() noexcept override { return &m_Desc; } + D3D12_LOCAL_SERIALIZED_ROOT_SIGNATURE m_Desc; +}; + + +//------------------------------------------------------------------------------------------------ +class CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT() noexcept + { + Init(); + } + CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT(const CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT& other) = delete; + CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT& operator=(const CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT& other) = delete; + CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT(CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT&& other) = default; + CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT& operator=(CD3DX12_EXISTING_COLLECTION_BY_KEY_SUBOBJECT&& other) = default; + void SetExistingCollection(const void* pKey, UINT KeySize) noexcept + { + const unsigned char* pKeyBytes = static_cast(pKey); + m_Key.clear(); + m_Key.insert(m_Key.begin(), pKeyBytes, pKeyBytes + KeySize); + m_Desc.pKey = m_Key.data(); + m_Desc.KeySize = KeySize; + } + void DefineExport( + LPCWSTR Name, + LPCWSTR ExportToRename = nullptr, + D3D12_EXPORT_FLAGS Flags = D3D12_EXPORT_FLAG_NONE) + { + D3D12_EXPORT_DESC Export; + Export.Name = m_Strings.LocalCopy(Name); + Export.ExportToRename = m_Strings.LocalCopy(ExportToRename); + Export.Flags = Flags; + m_Exports.push_back(Export); + m_Desc.pExports = &m_Exports[0]; // using ugly way to get pointer in case .data() is not defined + m_Desc.NumExports = static_cast(m_Exports.size()); + } + template + void DefineExports(LPCWSTR(&Exports)[N]) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + void DefineExports(const LPCWSTR* Exports, UINT N) + { + for (UINT i = 0; i < N; i++) + { + DefineExport(Exports[i]); + } + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION_BY_KEY; + } + operator const D3D12_EXISTING_COLLECTION_BY_KEY_DESC&() const noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Strings.clear(); + m_Exports.clear(); + } + void* Data() noexcept override { return &m_Desc; } + D3D12_EXISTING_COLLECTION_BY_KEY_DESC m_Desc; + std::vector m_Key; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_Exports; +}; + +#endif // defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 618) + //------------------------------------------------------------------------------------------------ class CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE { public: CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) { Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(const D3D12_STATE_OBJECT_CONFIG &desc) noexcept + : m_Desc(desc) + { + Init(); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(const D3D12_STATE_OBJECT_CONFIG &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(const CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& other) = delete; + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& operator=(const CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& other) = delete; + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT(CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT&& other) = default; + CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT& operator=(CD3DX12_STATE_OBJECT_CONFIG_SUBOBJECT&& other) = default; void SetFlags(D3D12_STATE_OBJECT_FLAGS Flags) noexcept { m_Desc.Flags = Flags; @@ -739,13 +1078,12 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_STATE_OBJECT_CONFIG&() const noexcept { return m_Desc; } + operator D3D12_STATE_OBJECT_CONFIG&() noexcept { return m_Desc; } private: void Init() noexcept { SUBOBJECT_HELPER_BASE::Init(); - m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } D3D12_STATE_OBJECT_CONFIG m_Desc; @@ -757,14 +1095,31 @@ class CD3DX12_NODE_MASK_SUBOBJECT { public: CD3DX12_NODE_MASK_SUBOBJECT() noexcept + : m_Desc({}) { Init(); } CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) { Init(); AddToStateObject(ContainingStateObject); } + CD3DX12_NODE_MASK_SUBOBJECT(const D3D12_NODE_MASK &desc) noexcept + : m_Desc(desc) + { + Init(); + } + CD3DX12_NODE_MASK_SUBOBJECT(const D3D12_NODE_MASK &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_NODE_MASK_SUBOBJECT(const CD3DX12_NODE_MASK_SUBOBJECT& other) = delete; + CD3DX12_NODE_MASK_SUBOBJECT& operator=(const CD3DX12_NODE_MASK_SUBOBJECT& other) = delete; + CD3DX12_NODE_MASK_SUBOBJECT(CD3DX12_NODE_MASK_SUBOBJECT&& other) = default; + CD3DX12_NODE_MASK_SUBOBJECT& operator=(CD3DX12_NODE_MASK_SUBOBJECT&& other) = default; void SetNodeMask(UINT NodeMask) noexcept { m_Desc.NodeMask = NodeMask; @@ -773,8 +1128,605 @@ public: { return D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK; } - operator const D3D12_STATE_SUBOBJECT&() const noexcept { return *m_pSubobject; } operator const D3D12_NODE_MASK&() const noexcept { return m_Desc; } + operator D3D12_NODE_MASK&() noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + D3D12_NODE_MASK m_Desc; +}; + +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) +//------------------------------------------------------------------------------------------------ +class CD3DX12_STREAM_OUTPUT_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_STREAM_OUTPUT_SUBOBJECT() + { + Init(); + } + CD3DX12_STREAM_OUTPUT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void AddSODeclEntry(const D3D12_SO_DECLARATION_ENTRY &entry) + { + m_soDecalEntries.emplace_back(D3D12_SO_DECLARATION_ENTRY{ + entry.Stream, + m_Strings.LocalCopy(entry.SemanticName), + entry.SemanticIndex, + entry.StartComponent, + entry.ComponentCount, + entry.OutputSlot + }); + m_Desc.NumEntries++; + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pSODeclaration = &m_soDecalEntries[0]; + } + void SetSODeclEntries(const D3D12_SO_DECLARATION_ENTRY* soDeclEntries, UINT numEntries) + { + m_soDecalEntries.resize(numEntries); + for (UINT i = 0; i < numEntries; i++) + { + m_soDecalEntries[i] = D3D12_SO_DECLARATION_ENTRY{ + soDeclEntries[i].Stream, + m_Strings.LocalCopy(soDeclEntries[i].SemanticName), + soDeclEntries[i].SemanticIndex, + soDeclEntries[i].StartComponent, + soDeclEntries[i].ComponentCount, + soDeclEntries[i].OutputSlot + }; + } + m_Desc.NumEntries = numEntries; + // Below: using ugly way to get pointer in case .data() is not defined + if (numEntries > 0) + { + m_Desc.pSODeclaration = &m_soDecalEntries[0]; + } + } + void SetBufferStrides(const UINT* bufferStrides, UINT numStrides) + { + for (UINT i = 0; i < numStrides; ++i) + { + m_Strides[i] = bufferStrides[i]; + } + m_Desc.pBufferStrides = m_Strides; + m_Desc.NumStrides = numStrides; + } + void SetRasterizedStream(UINT rasterizedStream) + { + m_Desc.RasterizedStream = rasterizedStream; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_STREAM_OUTPUT; + } + operator const D3D12_STREAM_OUTPUT_DESC& () const noexcept { return m_Desc; } + +private: + void Init() + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() noexcept override { return &m_Desc; } + D3D12_STREAM_OUTPUT_DESC m_Desc; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector m_soDecalEntries; + UINT m_Strides[D3D12_SO_STREAM_COUNT]; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_BLEND_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_BLEND_SUBOBJECT() + : m_Desc(CD3DX12_BLEND_DESC(D3D12_DEFAULT)) + { + Init(); + } + CD3DX12_BLEND_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_BLEND_DESC(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_BLEND_SUBOBJECT(const D3D12_BLEND_DESC &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_BLEND_SUBOBJECT(const D3D12_BLEND_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetAlphaToCoverageEnable(bool alphaToCoverageEnable) + { + m_Desc.AlphaToCoverageEnable = alphaToCoverageEnable; + } + void SetIndependentBlendEnable(bool independentBlendEnable) + { + m_Desc.IndependentBlendEnable = independentBlendEnable; + } + void SetRenderTarget(UINT renderTargetIndex, const D3D12_RENDER_TARGET_BLEND_DESC& renderTargetBlendDesc) + { + m_Desc.RenderTarget[renderTargetIndex].BlendEnable = renderTargetBlendDesc.BlendEnable; + m_Desc.RenderTarget[renderTargetIndex].BlendOp = renderTargetBlendDesc.BlendOp; + m_Desc.RenderTarget[renderTargetIndex].BlendOpAlpha = renderTargetBlendDesc.BlendOpAlpha; + m_Desc.RenderTarget[renderTargetIndex].DestBlend = renderTargetBlendDesc.DestBlend; + m_Desc.RenderTarget[renderTargetIndex].DestBlendAlpha = renderTargetBlendDesc.DestBlendAlpha; + m_Desc.RenderTarget[renderTargetIndex].LogicOp = renderTargetBlendDesc.LogicOp; + m_Desc.RenderTarget[renderTargetIndex].LogicOpEnable = renderTargetBlendDesc.LogicOpEnable; + m_Desc.RenderTarget[renderTargetIndex].RenderTargetWriteMask = renderTargetBlendDesc.RenderTargetWriteMask; + m_Desc.RenderTarget[renderTargetIndex].SrcBlend = renderTargetBlendDesc.SrcBlend; + m_Desc.RenderTarget[renderTargetIndex].SrcBlendAlpha = renderTargetBlendDesc.SrcBlendAlpha; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_BLEND; + } + operator const D3D12_BLEND_DESC& () const noexcept { return m_Desc; } + operator D3D12_BLEND_DESC& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + CD3DX12_BLEND_DESC m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RASTERIZER_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RASTERIZER_SUBOBJECT() + : m_Desc(CD3DX12_RASTERIZER_DESC2(D3D12_DEFAULT)) + { + Init(); + } + CD3DX12_RASTERIZER_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_RASTERIZER_DESC2(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RASTERIZER_SUBOBJECT(const D3D12_RASTERIZER_DESC2 &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RASTERIZER_SUBOBJECT(const D3D12_RASTERIZER_DESC2 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFillMode(D3D12_FILL_MODE fillMode) + { + m_Desc.FillMode = fillMode; + } + void SetCullMode(D3D12_CULL_MODE cullMode) + { + m_Desc.CullMode = cullMode; + } + void SetFrontCounterClockwise(BOOL frontCounterClockwise) + { + m_Desc.FrontCounterClockwise = frontCounterClockwise; + } + void SetDepthBias(FLOAT depthBias) + { + m_Desc.DepthBias = depthBias; + } + void SetDepthBiasClamp(FLOAT depthBiasClamp) + { + m_Desc.DepthBiasClamp = depthBiasClamp; + } + void SetSlopeScaledDepthBias(FLOAT slopeScaledDepthBias) + { + m_Desc.SlopeScaledDepthBias = slopeScaledDepthBias; + } + void SetDepthClipEnable(BOOL depthClipEnable) + { + m_Desc.DepthClipEnable = depthClipEnable; + } + void SetLineRasterizationMode(D3D12_LINE_RASTERIZATION_MODE lineRasterizationMode) + { + m_Desc.LineRasterizationMode = lineRasterizationMode; + } + void SetForcedSampleCount(UINT forcedSampleCount) + { + m_Desc.ForcedSampleCount = forcedSampleCount; + } + void SetConservativeRaster(D3D12_CONSERVATIVE_RASTERIZATION_MODE conservativeRaster) + { + m_Desc.ConservativeRaster = conservativeRaster; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_RASTERIZER; + } + operator const D3D12_RASTERIZER_DESC2& () const noexcept { return m_Desc; } + operator D3D12_RASTERIZER_DESC2& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + CD3DX12_RASTERIZER_DESC2 m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DEPTH_STENCIL2_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DEPTH_STENCIL2_SUBOBJECT() + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEFAULT)) + { + Init(); + } + CD3DX12_DEPTH_STENCIL2_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC2(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_DEPTH_STENCIL2_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC2 &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_DEPTH_STENCIL2_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC2 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDepthEnable(BOOL depthEnable) + { + m_Desc.DepthEnable = depthEnable; + } + void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask) + { + m_Desc.DepthWriteMask = depthWriteMask; + } + void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc) + { + m_Desc.DepthFunc = depthFunc; + } + void SetStencilEnable(BOOL stencilEnable) + { + m_Desc.StencilEnable = stencilEnable; + } + void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC1 frontFace) + { + m_Desc.FrontFace = { + frontFace.StencilFailOp, + frontFace.StencilDepthFailOp, + frontFace.StencilPassOp, + frontFace.StencilFunc, + frontFace.StencilReadMask, + frontFace.StencilWriteMask + }; + } + void SetBackFace(D3D12_DEPTH_STENCILOP_DESC1 backFace) + { + m_Desc.BackFace = { + backFace.StencilFailOp, + backFace.StencilDepthFailOp, + backFace.StencilPassOp, + backFace.StencilFunc, + backFace.StencilReadMask, + backFace.StencilWriteMask + }; + } + void SetDepthBoundsTestEnable(BOOL depthBoundsTestEnable) + { + m_Desc.DepthBoundsTestEnable = depthBoundsTestEnable; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL2; + } + operator const D3D12_DEPTH_STENCIL_DESC2& () const noexcept { return m_Desc; } + operator D3D12_DEPTH_STENCIL_DESC2& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + CD3DX12_DEPTH_STENCIL_DESC2 m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_INPUT_LAYOUT_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_INPUT_LAYOUT_SUBOBJECT() + { + Init(); + } + CD3DX12_INPUT_LAYOUT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void AddInputLayoutElementDesc(D3D12_INPUT_ELEMENT_DESC inputLayoutElementDesc) + { + m_inputLayoutElements.emplace_back( + D3D12_INPUT_ELEMENT_DESC{ + m_Strings.LocalCopy(inputLayoutElementDesc.SemanticName), + inputLayoutElementDesc.SemanticIndex, + inputLayoutElementDesc.Format, + inputLayoutElementDesc.InputSlot, + inputLayoutElementDesc.AlignedByteOffset, + inputLayoutElementDesc.InputSlotClass, + inputLayoutElementDesc.InstanceDataStepRate + }); + ++m_Desc.NumElements; + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pInputElementDescs = &m_inputLayoutElements[0]; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_INPUT_LAYOUT; + } + operator const D3D12_INPUT_LAYOUT_DESC& () const noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_inputLayoutElements.clear(); + } + void* Data() noexcept override { return &m_Desc; } + D3D12_INPUT_LAYOUT_DESC m_Desc; + std::vector m_inputLayoutElements; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT() + : m_Desc(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED) + { + Init(); + } + CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_IB_STRIP_CUT_VALUE_SUBOBJECT(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetIBStripCutValue(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE ibStripCutValue) + { + m_Desc = ibStripCutValue; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_IB_STRIP_CUT_VALUE; + } + operator const D3D12_INDEX_BUFFER_STRIP_CUT_VALUE& () const noexcept { return m_Desc; } + operator D3D12_INDEX_BUFFER_STRIP_CUT_VALUE& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + D3D12_INDEX_BUFFER_STRIP_CUT_VALUE m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT() + : m_Desc(D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED) + { + Init(); + } + CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(D3D12_PRIMITIVE_TOPOLOGY_TYPE desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_PRIMITIVE_TOPOLOGY_SUBOBJECT(D3D12_PRIMITIVE_TOPOLOGY_TYPE desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE primitiveTopologytype) + { + m_Desc = primitiveTopologytype; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY; + } + operator const D3D12_PRIMITIVE_TOPOLOGY_TYPE& () const noexcept { return m_Desc; } + operator D3D12_PRIMITIVE_TOPOLOGY_TYPE& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + D3D12_PRIMITIVE_TOPOLOGY_TYPE m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT() + : m_Desc({}) + { + Init(); + } + CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(const D3D12_RT_FORMAT_ARRAY &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_RENDER_TARGET_FORMATS_SUBOBJECT(const D3D12_RT_FORMAT_ARRAY &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetNumRenderTargets(UINT numRenderTargets) + { + m_Desc.NumRenderTargets = numRenderTargets; + } + void SetRenderTargetFormat(UINT renderTarget, DXGI_FORMAT renderTargetFormat) + { + m_Desc.RTFormats[renderTarget] = renderTargetFormat; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_RENDER_TARGET_FORMATS; + } + operator const D3D12_RT_FORMAT_ARRAY& () const noexcept { return m_Desc; } + operator D3D12_RT_FORMAT_ARRAY& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + D3D12_RT_FORMAT_ARRAY m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT() + : m_Desc(DXGI_FORMAT_UNKNOWN) + { + Init(); + } + CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(DXGI_FORMAT_UNKNOWN) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(DXGI_FORMAT desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_DEPTH_STENCIL_FORMAT_SUBOBJECT(DXGI_FORMAT desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDepthStencilFormat(DXGI_FORMAT depthStencilFormat) + { + m_Desc = depthStencilFormat; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL_FORMAT; + } + operator const DXGI_FORMAT& () const noexcept { return m_Desc; } + operator DXGI_FORMAT& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + DXGI_FORMAT m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SAMPLE_DESC_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SAMPLE_DESC_SUBOBJECT() + : m_Desc({1, 0}) + { + Init(); + } + CD3DX12_SAMPLE_DESC_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc({1, 0}) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_SAMPLE_DESC_SUBOBJECT(const DXGI_SAMPLE_DESC &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_SAMPLE_DESC_SUBOBJECT(const DXGI_SAMPLE_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetCount(UINT count) + { + m_Desc.Count = count; + } + void SetQuality(UINT quality) + { + m_Desc.Quality = quality; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_DESC; + } + operator const DXGI_SAMPLE_DESC& () const noexcept { return m_Desc; } + operator DXGI_SAMPLE_DESC& () noexcept { return m_Desc; } private: void Init() noexcept { @@ -782,9 +1734,837 @@ private: m_Desc = {}; } void* Data() noexcept override { return &m_Desc; } - D3D12_NODE_MASK m_Desc; + DXGI_SAMPLE_DESC m_Desc; }; +//------------------------------------------------------------------------------------------------ +class CD3DX12_FLAGS_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_FLAGS_SUBOBJECT() + : m_Desc(D3D12_PIPELINE_STATE_FLAG_NONE) + { + Init(); + } + CD3DX12_FLAGS_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(D3D12_PIPELINE_STATE_FLAG_NONE) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_FLAGS_SUBOBJECT(D3D12_PIPELINE_STATE_FLAGS desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_FLAGS_SUBOBJECT(D3D12_PIPELINE_STATE_FLAGS desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetFlags(D3D12_PIPELINE_STATE_FLAGS flags) + { + m_Desc = flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_FLAGS; + } + operator const D3D12_PIPELINE_STATE_FLAGS& () const noexcept { return m_Desc; } + operator D3D12_PIPELINE_STATE_FLAGS& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + D3D12_PIPELINE_STATE_FLAGS m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_VIEW_INSTANCING_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_VIEW_INSTANCING_SUBOBJECT() + { + Init(); + } + CD3DX12_VIEW_INSTANCING_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void AddViewInstanceLocation(D3D12_VIEW_INSTANCE_LOCATION viewInstanceLocation) + { + m_Desc.ViewInstanceCount++; + m_viewInstanceLocations.emplace_back( + D3D12_VIEW_INSTANCE_LOCATION + { + viewInstanceLocation.ViewportArrayIndex, + viewInstanceLocation.RenderTargetArrayIndex + } + ); + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pViewInstanceLocations = &m_viewInstanceLocations[0]; + } + void SetFlags(D3D12_VIEW_INSTANCING_FLAGS flags) + { + m_Desc.Flags = flags; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_VIEW_INSTANCING; + } + operator const D3D12_VIEW_INSTANCING_DESC& () const noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = CD3DX12_VIEW_INSTANCING_DESC(D3D12_DEFAULT); + m_viewInstanceLocations.clear(); + } + void* Data() noexcept override { return &m_Desc; } + CD3DX12_VIEW_INSTANCING_DESC m_Desc; + std::vector m_viewInstanceLocations; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DEPTH_STENCIL_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DEPTH_STENCIL_SUBOBJECT() + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT)) + { + Init(); + } + CD3DX12_DEPTH_STENCIL_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_DEPTH_STENCIL_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_DEPTH_STENCIL_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDepthEnable(BOOL depthEnable) + { + m_Desc.DepthEnable = depthEnable; + } + void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask) + { + m_Desc.DepthWriteMask = depthWriteMask; + } + void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc) + { + m_Desc.DepthFunc = depthFunc; + } + void SetStencilEnable(BOOL stencilEnable) + { + m_Desc.StencilEnable = stencilEnable; + } + void SetStencilReadMask(UINT8 stencilReadMask) + { + m_Desc.StencilReadMask = stencilReadMask; + } + void SetStencilWriteMask(UINT8 stencilWriteMask) + { + m_Desc.StencilWriteMask = stencilWriteMask; + } + void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC frontFace) + { + m_Desc.FrontFace = { + frontFace.StencilFailOp, + frontFace.StencilDepthFailOp, + frontFace.StencilPassOp, + frontFace.StencilFunc + }; + } + void SetBackFace(D3D12_DEPTH_STENCILOP_DESC backFace) + { + m_Desc.BackFace = { + backFace.StencilFailOp, + backFace.StencilDepthFailOp, + backFace.StencilPassOp, + backFace.StencilFunc + }; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL; + } + operator const D3D12_DEPTH_STENCIL_DESC& () const noexcept { return m_Desc; } + operator D3D12_DEPTH_STENCIL_DESC& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + CD3DX12_DEPTH_STENCIL_DESC m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_DEPTH_STENCIL1_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_DEPTH_STENCIL1_SUBOBJECT() + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEFAULT)) + { + Init(); + } + CD3DX12_DEPTH_STENCIL1_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(CD3DX12_DEPTH_STENCIL_DESC1(D3D12_DEFAULT)) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_DEPTH_STENCIL1_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC1 &desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_DEPTH_STENCIL1_SUBOBJECT(const D3D12_DEPTH_STENCIL_DESC1 &desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetDepthEnable(BOOL depthEnable) + { + m_Desc.DepthEnable = depthEnable; + } + void SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK depthWriteMask) + { + m_Desc.DepthWriteMask = depthWriteMask; + } + void SetDepthFunc(D3D12_COMPARISON_FUNC depthFunc) + { + m_Desc.DepthFunc = depthFunc; + } + void SetStencilEnable(BOOL stencilEnable) + { + m_Desc.StencilEnable = stencilEnable; + } + void SetStencilReadMask(UINT8 stencilReadMask) + { + m_Desc.StencilReadMask = stencilReadMask; + } + void SetStencilWriteMask(UINT8 stencilWriteMask) + { + m_Desc.StencilWriteMask = stencilWriteMask; + } + void SetFrontFace(D3D12_DEPTH_STENCILOP_DESC frontFace) + { + m_Desc.FrontFace = { + frontFace.StencilFailOp, + frontFace.StencilDepthFailOp, + frontFace.StencilPassOp, + frontFace.StencilFunc + }; + } + void SetBackFace(D3D12_DEPTH_STENCILOP_DESC backFace) + { + m_Desc.BackFace = { + backFace.StencilFailOp, + backFace.StencilDepthFailOp, + backFace.StencilPassOp, + backFace.StencilFunc + }; + } + void SetDepthBoundsTestEnable(BOOL depthBoundsTestEnable) + { + m_Desc.DepthBoundsTestEnable = depthBoundsTestEnable; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_DEPTH_STENCIL1; + } + operator const D3D12_DEPTH_STENCIL_DESC1& () const noexcept { return m_Desc; } + operator D3D12_DEPTH_STENCIL_DESC1& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + CD3DX12_DEPTH_STENCIL_DESC1 m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SAMPLE_MASK_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_SAMPLE_MASK_SUBOBJECT() + : m_Desc(0xffffffffu) + { + Init(); + } + CD3DX12_SAMPLE_MASK_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(0xffffffffu) + { + Init(); + AddToStateObject(ContainingStateObject); + } + CD3DX12_SAMPLE_MASK_SUBOBJECT(UINT desc) + : m_Desc(desc) + { + Init(); + } + CD3DX12_SAMPLE_MASK_SUBOBJECT(UINT desc, CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + : m_Desc(desc) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetSampleMask(UINT sampleMask) + { + m_Desc = sampleMask; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_SAMPLE_MASK; + } + operator const UINT& () const noexcept { return m_Desc; } + operator UINT& () noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + } + void* Data() noexcept override { return &m_Desc; } + UINT m_Desc; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_GENERIC_PROGRAM_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_GENERIC_PROGRAM_SUBOBJECT() + { + Init(); + } + CD3DX12_GENERIC_PROGRAM_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + void SetProgramName(LPCWSTR ProgramName) + { + m_Desc.ProgramName = m_Strings.LocalCopy(ProgramName); + } + void AddExport(LPCWSTR exportName) + { + m_Exports.emplace_back(m_Strings.LocalCopy(exportName)); + m_Desc.NumExports++; + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.pExports = &m_Exports[0]; + } + void AddSubobject(const D3D12_STATE_SUBOBJECT& subobject) + { + m_Subobjects.emplace_back(&subobject); + m_Desc.NumSubobjects++; + // Below: using ugly way to get pointer in case .data() is not defined + m_Desc.ppSubobjects = &m_Subobjects[0]; + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_GENERIC_PROGRAM; + } + operator const D3D12_GENERIC_PROGRAM_DESC& () const noexcept { return m_Desc; } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + } + void* Data() noexcept override { return &m_Desc; } + D3D12_GENERIC_PROGRAM_DESC m_Desc; + std::vector m_Exports; + std::vector m_Subobjects; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_OUTPUT_OVERRIDES +{ +public: + CD3DX12_NODE_OUTPUT_OVERRIDES(const D3D12_NODE_OUTPUT_OVERRIDES** ppOwner, UINT* pNumOutputOverrides) noexcept + { + m_Desc.clear(); + m_ppOwner = ppOwner; + *m_ppOwner = nullptr; + m_pNumOutputOverrides = pNumOutputOverrides; + *m_pNumOutputOverrides = 0; + } + void NewOutputOverride() + { + m_Desc.emplace_back(D3D12_NODE_OUTPUT_OVERRIDES{}); + *m_ppOwner = m_Desc.data(); + (*m_pNumOutputOverrides)++; + } + void OutputIndex(UINT index) + { + m_Desc.back().OutputIndex = index; + } + void NewName(LPCWSTR Name, UINT ArrayIndex = 0) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(Name),ArrayIndex }); + m_Desc.back().pNewName = &m_NodeIDs.front(); + } + void AllowSparseNodes(BOOL bAllow) + { + m_UINTs.emplace_front((UINT)bAllow); + m_Desc.back().pAllowSparseNodes = (BOOL*)&m_UINTs.front(); + } + void MaxOutputRecords(UINT maxOutputRecords) noexcept + { + m_UINTs.emplace_front(maxOutputRecords); + m_Desc.back().pMaxRecords = &m_UINTs.front(); + } + void MaxOutputRecordsSharedWith(UINT outputIndex) noexcept + { + m_UINTs.emplace_front(outputIndex); + m_Desc.back().pMaxRecordsSharedWithOutputIndex = &m_UINTs.front(); + } +private: + std::vector m_Desc; + // Cached parameters + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::forward_list m_UINTs; + std::forward_list m_NodeIDs; + const D3D12_NODE_OUTPUT_OVERRIDES** m_ppOwner; + UINT* m_pNumOutputOverrides; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_WORK_GRAPH_SUBOBJECT; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_NODE_HELPER_BASE +{ +protected: + struct Backreference + { + CD3DX12_WORK_GRAPH_SUBOBJECT *m_pGraph; + UINT m_NodeIndex; + }; +public: + CD3DX12_NODE_HELPER_BASE(const Backreference &BackRef) + : m_BackRef(BackRef) + { + } + virtual ~CD3DX12_NODE_HELPER_BASE() = default; +protected: + D3D12_NODE *GetNode() const; + const Backreference m_BackRef; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_SHADER_NODE // Not specifying launch mode. + // Don't need to distinguish if no parameter overriding is happening + : public CD3DX12_NODE_HELPER_BASE +{ +public: + CD3DX12_SHADER_NODE( + const Backreference &BackRef, + LPCWSTR _Shader = nullptr) + : CD3DX12_NODE_HELPER_BASE(BackRef) + { + GetNode()->NodeType = D3D12_NODE_TYPE_SHADER; + Shader(_Shader); + } + void Shader(LPCWSTR _Shader) + { + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); + } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } +}; + +#endif // D3D12_SDK_VERSION >= 612 + + +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + +//------------------------------------------------------------------------------------------------ +// Use this class when defining a broadcasting launch node where configuration parameters +// need to be overridden. If overrides are not needed, just use CD3DX12_COMPUTE_SHADER_NODE +class CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES + : public CD3DX12_NODE_HELPER_BASE +{ +public: + CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES( + const Backreference &BackRef, + LPCWSTR _Shader = nullptr) : + CD3DX12_NODE_HELPER_BASE(BackRef), + m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) + { + Overrides = {}; + D3D12_NODE *pNode = GetNode(); + pNode->NodeType = D3D12_NODE_TYPE_SHADER; + pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_BROADCASTING_LAUNCH; + pNode->Shader.pBroadcastingLaunchOverrides = &Overrides; + Shader(_Shader); + } + void Shader(LPCWSTR _Shader) + { + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); + } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } + void LocalRootArgumentsTableIndex(UINT index) + { + m_UINTs.emplace_front(index); + Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front(); + } + void ProgramEntry(BOOL bIsProgramEntry) + { + m_UINTs.emplace_front(bIsProgramEntry); + Overrides.pProgramEntry = (BOOL*)&m_UINTs.front(); + } + void NewName(D3D12_NODE_ID NodeID) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); + Overrides.pNewName = &m_NodeIDs.front(); + } + void ShareInputOf(D3D12_NODE_ID NodeID) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); + Overrides.pShareInputOf = &m_NodeIDs.front(); + } + void DispatchGrid(UINT x, UINT y, UINT z) + { + m_UINT3s.emplace_front(UINT3{ x,y,z }); + Overrides.pDispatchGrid = (UINT*)&m_UINT3s.front(); + } + void MaxDispatchGrid(UINT x, UINT y, UINT z) + { + m_UINT3s.emplace_front(UINT3{x,y,z}); + Overrides.pMaxDispatchGrid = (UINT*)&m_UINT3s.front(); + } + CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides() + { + return m_NodeOutputOverrides; + } + D3D12_BROADCASTING_LAUNCH_OVERRIDES Overrides; +private: + // Cached parameters + std::forward_list m_UINTs; + struct UINT3 + { + UINT x; + UINT y; + UINT z; + }; + std::forward_list m_UINT3s; + std::forward_list m_NodeIDs; + CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; +}; + +//------------------------------------------------------------------------------------------------ +// Use this class when defining a coalescing launch node where configuration parameters +// need to be overridden. If overrides are not needed, just use CD3DX12_COMPUTE_SHADER_NODE +class CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES + : public CD3DX12_NODE_HELPER_BASE +{ +public: + CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES( + const Backreference &BackRef, + LPCWSTR _Shader = nullptr) : + CD3DX12_NODE_HELPER_BASE(BackRef), + m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) + { + Overrides = {}; + D3D12_NODE *pNode = GetNode(); + pNode->NodeType = D3D12_NODE_TYPE_SHADER; + pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COALESCING_LAUNCH; + pNode->Shader.pCoalescingLaunchOverrides = &Overrides; + Shader(_Shader); + } + void Shader(LPCWSTR _Shader) + { + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); + } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } + void LocalRootArgumentsTableIndex(UINT index) + { + m_UINTs.emplace_front(index); + Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front(); + } + void ProgramEntry(BOOL bIsProgramEntry) + { + m_UINTs.emplace_front(bIsProgramEntry); + Overrides.pProgramEntry = (BOOL*)&m_UINTs.front(); + } + void NewName(D3D12_NODE_ID NodeID) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); + Overrides.pNewName = &m_NodeIDs.front(); + } + void ShareInputOf(D3D12_NODE_ID NodeID) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); + Overrides.pShareInputOf = &m_NodeIDs.front(); + } + CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides() + { + return m_NodeOutputOverrides; + } + D3D12_COALESCING_LAUNCH_OVERRIDES Overrides; +private: + // Cached parameters + std::forward_list m_UINTs; + struct UINT3 + { + UINT x; + UINT y; + UINT z; + }; + std::forward_list m_UINT3s; + std::forward_list m_NodeIDs; + CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; +}; + +//------------------------------------------------------------------------------------------------ +// Use this class when defining a thread launch node where configuration parameters +// need to be overridden. If overrides are not needed, just use CD3DX12_COMPUTE_SHADER_NODE +class CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES + : public CD3DX12_NODE_HELPER_BASE +{ +public: + CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES( + const Backreference &BackRef, + LPCWSTR _Shader = nullptr) : + CD3DX12_NODE_HELPER_BASE(BackRef), + m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) + { + Overrides = {}; + D3D12_NODE *pNode = GetNode(); + pNode->NodeType = D3D12_NODE_TYPE_SHADER; + pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_THREAD_LAUNCH; + pNode->Shader.pThreadLaunchOverrides = &Overrides; + Shader(_Shader); + } + void Shader(LPCWSTR _Shader) + { + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); + } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } + void LocalRootArgumentsTableIndex(UINT index) + { + m_UINTs.emplace_front(index); + Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front(); + } + void ProgramEntry(BOOL bIsProgramEntry) + { + m_UINTs.emplace_front(bIsProgramEntry); + Overrides.pProgramEntry = (BOOL*)&m_UINTs.front(); + } + void NewName(D3D12_NODE_ID NodeID) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); + Overrides.pNewName = &m_NodeIDs.front(); + } + void ShareInputOf(D3D12_NODE_ID NodeID) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); + Overrides.pShareInputOf = &m_NodeIDs.front(); + } + CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides() + { + return m_NodeOutputOverrides; + } + D3D12_THREAD_LAUNCH_OVERRIDES Overrides; +private: + // Cached parameters + std::forward_list m_UINTs; + std::forward_list m_NodeIDs; + CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; +}; + +//------------------------------------------------------------------------------------------------ +// Use this class when defining a node where configuration parameters +// need to be overridden for parameters that are common to all launch node types. +// This option is a convenience if you don't want to determine what the launch mode is +// and just want to override a setting that isn't specific to launch mode. +// If overrides are not needed, just use CD3DX12_COMPUTE_SHADER_NODE +class CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES + : public CD3DX12_NODE_HELPER_BASE +{ +public: + CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES( + const Backreference &BackRef, + LPCWSTR _Shader = nullptr) : + CD3DX12_NODE_HELPER_BASE(BackRef), + m_NodeOutputOverrides(&Overrides.pOutputOverrides, &Overrides.NumOutputOverrides) + { + Overrides = {}; + D3D12_NODE *pNode = GetNode(); + pNode->NodeType = D3D12_NODE_TYPE_SHADER; + pNode->Shader.OverridesType = D3D12_NODE_OVERRIDES_TYPE_COMMON_COMPUTE; + pNode->Shader.pThreadLaunchOverrides = &Overrides; + Shader(_Shader); + } + void Shader(LPCWSTR _Shader) + { + GetNode()->Shader.Shader = m_Strings.LocalCopy(_Shader); + } + LPCWSTR GetShaderName() const { return GetNode()->Shader.Shader; } + void LocalRootArgumentsTableIndex(UINT index) + { + m_UINTs.emplace_front(index); + Overrides.pLocalRootArgumentsTableIndex = &m_UINTs.front(); + } + void ProgramEntry(BOOL bIsProgramEntry) + { + m_UINTs.emplace_front(bIsProgramEntry); + Overrides.pProgramEntry = (BOOL*)&m_UINTs.front(); + } + void NewName(D3D12_NODE_ID NodeID) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); + Overrides.pNewName = &m_NodeIDs.front(); + } + void ShareInputOf(D3D12_NODE_ID NodeID) + { + m_NodeIDs.emplace_front(D3D12_NODE_ID{ m_Strings.LocalCopy(NodeID.Name),NodeID.ArrayIndex }); + Overrides.pShareInputOf = &m_NodeIDs.front(); + } + CD3DX12_NODE_OUTPUT_OVERRIDES& NodeOutputOverrides() + { + return m_NodeOutputOverrides; + } + D3D12_THREAD_LAUNCH_OVERRIDES Overrides; +private: + // Cached parameters + std::forward_list m_UINTs; + std::forward_list m_NodeIDs; + CD3DX12_NODE_OUTPUT_OVERRIDES m_NodeOutputOverrides; +}; + +//------------------------------------------------------------------------------------------------ +class CD3DX12_WORK_GRAPH_SUBOBJECT + : public CD3DX12_STATE_OBJECT_DESC::SUBOBJECT_HELPER_BASE +{ +public: + CD3DX12_WORK_GRAPH_SUBOBJECT() noexcept + { + Init(); + } + CD3DX12_WORK_GRAPH_SUBOBJECT(CD3DX12_STATE_OBJECT_DESC& ContainingStateObject) + { + Init(); + AddToStateObject(ContainingStateObject); + } + D3D12_STATE_SUBOBJECT_TYPE Type() const noexcept override + { + return D3D12_STATE_SUBOBJECT_TYPE_WORK_GRAPH; + } + void IncludeAllAvailableNodes() + { + m_Desc.Flags |= D3D12_WORK_GRAPH_FLAG_INCLUDE_ALL_AVAILABLE_NODES; + } + + + void SetProgramName(LPCWSTR ProgramName) + { + m_Desc.ProgramName = m_Strings.LocalCopy(ProgramName); + } + void AddEntrypoint(D3D12_NODE_ID Entrypoint) + { + m_Entrypoints.emplace_back(D3D12_NODE_ID{ m_Strings.LocalCopy(Entrypoint.Name),Entrypoint.ArrayIndex }); + m_Desc.NumEntrypoints++; + m_Desc.pEntrypoints = m_Entrypoints.data(); + } + + template + T* CreateNode() + { + m_NodeDescs.push_back({}); + m_Desc.NumExplicitlyDefinedNodes++; + m_Desc.pExplicitlyDefinedNodes = m_NodeDescs.data(); + T* pNodeHelper = new T({this, (UINT)m_NodeDescs.size() - 1}); + m_OwnedNodeHelpers.emplace_back(pNodeHelper); + return pNodeHelper; + } + CD3DX12_SHADER_NODE* CreateShaderNode(LPCWSTR Shader = nullptr) + { + auto pNode = CreateNode(); + pNode->Shader(Shader); + return pNode; + } + CD3DX12_BROADCASTING_LAUNCH_NODE_OVERRIDES* CreateBroadcastingLaunchNodeOverrides(LPCWSTR Shader = nullptr) + { + auto pNode = CreateNode(); + pNode->Shader(Shader); + return pNode; + } + CD3DX12_COALESCING_LAUNCH_NODE_OVERRIDES* CreateCoalescingLaunchNodeOverrides(LPCWSTR Shader = nullptr) + { + auto pNode = CreateNode(); + pNode->Shader(Shader); + return pNode; + } + CD3DX12_THREAD_LAUNCH_NODE_OVERRIDES* CreateThreadLaunchNodeOverrides(LPCWSTR Shader = nullptr) + { + auto pNode = CreateNode(); + pNode->Shader(Shader); + return pNode; + } + CD3DX12_COMMON_COMPUTE_NODE_OVERRIDES* CreateCommonComputeNodeOverrides(LPCWSTR Shader = nullptr) + { + auto pNode = CreateNode(); + pNode->Shader(Shader); + return pNode; + } +#endif // D3D12_SDK_VERSION >= 612 + + +#if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 612) + + operator const D3D12_WORK_GRAPH_DESC& () noexcept + { + return m_Desc; + } +private: + void Init() noexcept + { + SUBOBJECT_HELPER_BASE::Init(); + m_Desc = {}; + m_Entrypoints.clear(); + m_NodeDescs.clear(); + } + void* Data() noexcept override { return &m_Desc; } + D3D12_WORK_GRAPH_DESC m_Desc; + std::vector m_Entrypoints; + std::vector m_NodeDescs; + CD3DX12_STATE_OBJECT_DESC::StringContainer m_Strings; + std::vector> m_OwnedNodeHelpers; + friend class CD3DX12_NODE_HELPER_BASE; +}; + +inline D3D12_NODE * CD3DX12_NODE_HELPER_BASE::GetNode() const +{ + return &m_BackRef.m_pGraph->m_NodeDescs[m_BackRef.m_NodeIndex]; +} +#endif // D3D12_SDK_VERSION >= 612 + #undef D3DX12_COM_PTR #undef D3DX12_COM_PTR_GET #undef D3DX12_COM_PTR_ADDRESSOF + + diff --git a/thirdparty/directx_headers/include/directx/dxcore_interface.h b/thirdparty/directx_headers/include/directx/dxcore_interface.h index b487fe13fb6..318208ea3ad 100644 --- a/thirdparty/directx_headers/include/directx/dxcore_interface.h +++ b/thirdparty/directx_headers/include/directx/dxcore_interface.h @@ -35,13 +35,25 @@ enum class DXCoreAdapterProperty : uint32_t IsHardware = 11, IsIntegrated = 12, IsDetachable = 13, - HardwareIDParts = 14 + HardwareIDParts = 14, + PhysicalAdapterCount = 15, + AdapterEngineCount = 16, + AdapterEngineName = 17, }; enum class DXCoreAdapterState : uint32_t { IsDriverUpdateInProgress = 0, - AdapterMemoryBudget = 1 + AdapterMemoryBudget = 1, + AdapterMemoryUsageBytes = 2, + AdapterMemoryUsageByProcessBytes = 3, + AdapterEngineRunningTimeMicroseconds = 4, + AdapterEngineRunningTimeByProcessMicroseconds = 5, + AdapterTemperatureCelsius = 6, + AdapterInUseProcessCount = 7, + AdapterInUseProcessSet = 8, + AdapterEngineFrequencyHertz = 9, + AdapterMemoryFrequencyHertz = 10 }; enum class DXCoreSegmentGroup : uint32_t @@ -65,6 +77,34 @@ enum class DXCoreAdapterPreference : uint32_t HighPerformance = 2 }; +enum class DXCoreWorkload : uint32_t +{ + Graphics = 0, + Compute = 1, + Media = 2, + MachineLearning = 3, +}; + +enum class DXCoreRuntimeFilterFlags : uint32_t +{ + None = 0x0, + D3D11 = 0x1, + D3D12 = 0x2 +}; + +DEFINE_ENUM_FLAG_OPERATORS(DXCoreRuntimeFilterFlags) + +enum class DXCoreHardwareTypeFilterFlags : uint32_t +{ + None = 0x0, + GPU = 0x1, + ComputeAccelerator = 0x2, + NPU = 0x4, + MediaAccelerator = 0x8 +}; + +DEFINE_ENUM_FLAG_OPERATORS(DXCoreHardwareTypeFilterFlags) + struct DXCoreHardwareID { uint32_t vendorID; @@ -96,6 +136,86 @@ struct DXCoreAdapterMemoryBudget uint64_t currentReservation; }; +struct DXCoreAdapterEngineIndex +{ + uint32_t physicalAdapterIndex; + uint32_t engineIndex; +}; + +struct DXCoreEngineQueryInput +{ + DXCoreAdapterEngineIndex adapterEngineIndex; + uint32_t processId; +}; + +struct DXCoreEngineQueryOutput +{ + uint64_t runningTime; + bool processQuerySucceeded; +}; + +enum class DXCoreMemoryType : uint32_t +{ + Dedicated = 0, + Shared = 1 +}; + +struct DXCoreMemoryUsage +{ + uint64_t committed; + uint64_t resident; +}; + +struct DXCoreMemoryQueryInput +{ + uint32_t physicalAdapterIndex; + DXCoreMemoryType memoryType; +}; + +struct DXCoreProcessMemoryQueryInput +{ + uint32_t physicalAdapterIndex; + DXCoreMemoryType memoryType; + uint32_t processId; +}; + +struct DXCoreProcessMemoryQueryOutput +{ + DXCoreMemoryUsage memoryUsage; + bool processQuerySucceeded; +}; + +struct DXCoreAdapterProcessSetQueryInput +{ + uint32_t arraySize; + _Field_size_(arraySize) uint32_t* processIds; +}; + +struct DXCoreAdapterProcessSetQueryOutput +{ + uint32_t processesWritten; + uint32_t processesTotal; +}; + +struct DXCoreEngineNamePropertyInput +{ + DXCoreAdapterEngineIndex adapterEngineIndex; + uint32_t engineNameLength; + _Field_size_(engineNameLength) wchar_t *engineName; +}; + +struct DXCoreEngineNamePropertyOutput +{ + uint32_t engineNameLength; +}; + +struct DXCoreFrequencyQueryOutput +{ + uint64_t frequency; + uint64_t maxFrequency; + uint64_t maxOverclockedFrequency; +}; + typedef void (STDMETHODCALLTYPE *PFN_DXCORE_NOTIFICATION_CALLBACK)( DXCoreNotificationType notificationType, _In_ IUnknown *object, @@ -104,11 +224,21 @@ typedef void (STDMETHODCALLTYPE *PFN_DXCORE_NOTIFICATION_CALLBACK)( static_assert(sizeof(bool) == 1, "bool assumed as one byte"); DEFINE_GUID(IID_IDXCoreAdapterFactory, 0x78ee5945, 0xc36e, 0x4b13, 0xa6, 0x69, 0x00, 0x5d, 0xd1, 0x1c, 0x0f, 0x06); +DEFINE_GUID(IID_IDXCoreAdapterFactory1, 0xd5682e19, 0x6d21, 0x401c, 0x82, 0x7a, 0x9a, 0x51, 0xa4, 0xea, 0x35, 0xd7); DEFINE_GUID(IID_IDXCoreAdapterList, 0x526c7776, 0x40e9, 0x459b, 0xb7, 0x11, 0xf3, 0x2a, 0xd7, 0x6d, 0xfc, 0x28); DEFINE_GUID(IID_IDXCoreAdapter, 0xf0db4c7f, 0xfe5a, 0x42a2, 0xbd, 0x62, 0xf2, 0xa6, 0xcf, 0x6f, 0xc8, 0x3e); +DEFINE_GUID(IID_IDXCoreAdapter1, 0xa0783366, 0xcfa3, 0x43be, 0x9d, 0x79, 0x55, 0xb2, 0xda, 0x97, 0xc6, 0x3c); + DEFINE_GUID(DXCORE_ADAPTER_ATTRIBUTE_D3D11_GRAPHICS, 0x8c47866b, 0x7583, 0x450d, 0xf0, 0xf0, 0x6b, 0xad, 0xa8, 0x95, 0xaf, 0x4b); DEFINE_GUID(DXCORE_ADAPTER_ATTRIBUTE_D3D12_GRAPHICS, 0x0c9ece4d, 0x2f6e, 0x4f01, 0x8c, 0x96, 0xe8, 0x9e, 0x33, 0x1b, 0x47, 0xb1); DEFINE_GUID(DXCORE_ADAPTER_ATTRIBUTE_D3D12_CORE_COMPUTE, 0x248e2800, 0xa793, 0x4724, 0xab, 0xaa, 0x23, 0xa6, 0xde, 0x1b, 0xe0, 0x90); +DEFINE_GUID(DXCORE_ADAPTER_ATTRIBUTE_D3D12_GENERIC_ML, 0xb71b0d41, 0x1088, 0x422f, 0xa2, 0x7c, 0x2, 0x50, 0xb7, 0xd3, 0xa9, 0x88); +DEFINE_GUID(DXCORE_ADAPTER_ATTRIBUTE_D3D12_GENERIC_MEDIA, 0x8eb2c848, 0x82f6, 0x4b49, 0xaa, 0x87, 0xae, 0xcf, 0xcf, 0x1, 0x74, 0xc6); + +DEFINE_GUID(DXCORE_HARDWARE_TYPE_ATTRIBUTE_GPU, 0xb69eb219, 0x3ded, 0x4464, 0x97, 0x9f, 0xa0, 0xb, 0xd4, 0x68, 0x70, 0x6); +DEFINE_GUID(DXCORE_HARDWARE_TYPE_ATTRIBUTE_COMPUTE_ACCELERATOR, 0xe0b195da, 0x58ef, 0x4a22, 0x90, 0xf1, 0x1f, 0x28, 0x16, 0x9c, 0xab, 0x8d); +DEFINE_GUID(DXCORE_HARDWARE_TYPE_ATTRIBUTE_NPU, 0xd46140c4, 0xadd7, 0x451b, 0x9e, 0x56, 0x6, 0xfe, 0x8c, 0x3b, 0x58, 0xed); +DEFINE_GUID(DXCORE_HARDWARE_TYPE_ATTRIBUTE_MEDIA_ACCELERATOR, 0x66bdb96a, 0x50b, 0x44c7, 0xa4, 0xfd, 0xd1, 0x44, 0xce, 0xa, 0xb4, 0x43); /* interface IDXCoreAdapter */ MIDL_INTERFACE("f0db4c7f-fe5a-42a2-bd62-f2a6cf6fc83e") @@ -214,6 +344,32 @@ public: } }; +/* interface IDXCoreAdapter1 */ +MIDL_INTERFACE("a0783366-cfa3-43be-9d79-55b2da97c63c") +IDXCoreAdapter1 : public IDXCoreAdapter +{ +public: + virtual HRESULT STDMETHODCALLTYPE GetPropertyWithInput( + DXCoreAdapterProperty property, + size_t inputPropertyDetailsSize, + _In_reads_bytes_opt_(inputPropertyDetailsSize) const void *inputPropertyDetails, + size_t outputBufferSize, + _Out_writes_bytes_(outputBufferSize) void *outputBuffer) = 0; + + template + HRESULT GetPropertyWithInput( + DXCoreAdapterProperty property, + _In_reads_bytes_opt_(sizeof(T1)) const T1 *inputPropertyDetails, + _Out_writes_bytes_(sizeof(T2)) T2 *outputBuffer) + { + return GetPropertyWithInput(property, + sizeof(T1), + (const void*)inputPropertyDetails, + sizeof(T2), + (void*)outputBuffer); + } +}; + /* interface IDXCoreAdapterList */ MIDL_INTERFACE("526c7776-40e9-459b-b711-f32ad76dfc28") IDXCoreAdapterList : public IUnknown @@ -309,8 +465,33 @@ public: uint32_t eventCookie) = 0; }; +/* interface IDXCoreAdapterFactory1 */ +MIDL_INTERFACE("d5682e19-6d21-401c-827a-9a51a4ea35d7") +IDXCoreAdapterFactory1 : public IDXCoreAdapterFactory +{ +public: + virtual HRESULT STDMETHODCALLTYPE CreateAdapterListByWorkload( + DXCoreWorkload workload, + DXCoreRuntimeFilterFlags runtimeFilter, + DXCoreHardwareTypeFilterFlags hardwareTypeFilter, + REFIID riid, + _COM_Outptr_ void **ppvAdapterList) = 0; + + template + HRESULT STDMETHODCALLTYPE CreateAdapterListByWorkload( + DXCoreWorkload workload, + DXCoreRuntimeFilterFlags runtimeFilter, + DXCoreHardwareTypeFilterFlags hardwareTypeFilter, + _COM_Outptr_ T **ppvAdapterList) + { + return CreateAdapterListByWorkload(workload, + runtimeFilter, + hardwareTypeFilter, + IID_PPV_ARGS(ppvAdapterList)); + } +}; + #endif // __cplusplus #endif // __dxcore_interface_h__ - diff --git a/thirdparty/directx_headers/include/dxguids/dxguids.h b/thirdparty/directx_headers/include/dxguids/dxguids.h index b9a7b08fa7a..76155708f5b 100644 --- a/thirdparty/directx_headers/include/dxguids/dxguids.h +++ b/thirdparty/directx_headers/include/dxguids/dxguids.h @@ -87,6 +87,7 @@ WINADAPTER_IID(ID3D12GraphicsCommandList, 0x5b160d0f, 0xac1b, 0x4185, 0x8b, 0xa8 WINADAPTER_IID(ID3D12GraphicsCommandList1, 0x553103fb, 0x1fe7, 0x4557, 0xbb, 0x38, 0x94, 0x6d, 0x7d, 0x0e, 0x7c, 0xa7); WINADAPTER_IID(ID3D12GraphicsCommandList2, 0x38C3E585, 0xFF17, 0x412C, 0x91, 0x50, 0x4F, 0xC6, 0xF9, 0xD7, 0x2A, 0x28); WINADAPTER_IID(ID3D12CommandQueue, 0x0ec870a6, 0x5d7e, 0x4c22, 0x8c, 0xfc, 0x5b, 0xaa, 0xe0, 0x76, 0x16, 0xed); +WINADAPTER_IID(ID3D12CommandQueue1, 0x3a3c3165, 0x0ee7, 0x4b8e, 0xa0, 0xaf, 0x63, 0x56, 0xb4, 0xc3, 0xbb, 0xb9); WINADAPTER_IID(ID3D12Device, 0x189819f1, 0x1db6, 0x4b57, 0xbe, 0x54, 0x18, 0x21, 0x33, 0x9b, 0x85, 0xf7); WINADAPTER_IID(ID3D12PipelineLibrary, 0xc64226a8, 0x9201, 0x46af, 0xb4, 0xcc, 0x53, 0xfb, 0x9f, 0xf7, 0x41, 0x4f); WINADAPTER_IID(ID3D12PipelineLibrary1, 0x80eabf42, 0x2568, 0x4e5e, 0xbd, 0x82, 0xc3, 0x7f, 0x86, 0x96, 0x1d, 0xc3); @@ -160,9 +161,12 @@ WINADAPTER_IID(ID3D12VideoProcessCommandList3,0x1a0a4ca4,0x9f08,0x40ce,0x95,0x58 WINADAPTER_IID(ID3D12VideoEncodeCommandList1,0x94971eca,0x2bdb,0x4769,0x88,0xcf,0x36,0x75,0xea,0x75,0x7e,0xbc); WINADAPTER_IID(ID3D12VideoEncoder,0x2E0D212D,0x8DF9,0x44A6,0xA7,0x70,0xBB,0x28,0x9B,0x18,0x27,0x37); WINADAPTER_IID(ID3D12VideoEncoderHeap,0x22B35D96,0x876A,0x44C0,0xB2,0x5E,0xFB,0x8C,0x9C,0x7F,0x1C,0x4A); +WINADAPTER_IID(ID3D12VideoEncoderHeap1,0xea8f1968,0x4aa0,0x43a4,0x9d,0x30,0xba,0x86,0xec,0x84,0xd4,0xf9); WINADAPTER_IID(ID3D12VideoDevice3,0x4243ADB4,0x3A32,0x4666,0x97,0x3C,0x0C,0xCC,0x56,0x25,0xDC,0x44); +WINADAPTER_IID(ID3D12VideoDevice4,0xe59ad09e,0xf1ae,0x42bb,0x89,0x83,0x9f,0x6e,0x55,0x86,0xc4,0xeb); WINADAPTER_IID(ID3D12VideoEncodeCommandList2,0x895491e2,0xe701,0x46a9,0x9a,0x1f,0x8d,0x34,0x80,0xed,0x86,0x7a); WINADAPTER_IID(ID3D12VideoEncodeCommandList3,0x7f027b22,0x1515,0x4e85,0xaa,0x0d,0x02,0x64,0x86,0x58,0x05,0x76); +WINADAPTER_IID(ID3D12VideoEncodeCommandList4,0x69aeb5b7,0x55f2,0x4012,0x8b,0x73,0x3a,0x88,0xd6,0x5a,0x20,0x4c); #endif #ifdef __d3d12sdklayers_h__ @@ -190,6 +194,8 @@ WINADAPTER_IID(ID3D12InfoQueue1, 0x2852dd88, 0xb484, 0x4c0c, 0xb6, 0xb1, 0x67, 0 // DXCore #ifdef __dxcore_interface_h__ WINADAPTER_IID(IDXCoreAdapterFactory, 0x78ee5945, 0xc36e, 0x4b13, 0xa6, 0x69, 0x00, 0x5d, 0xd1, 0x1c, 0x0f, 0x06); +WINADAPTER_IID(IDXCoreAdapterFactory1, 0xd5682e19, 0x6d21, 0x401c, 0x82, 0x7a, 0x9a, 0x51, 0xa4, 0xea, 0x35, 0xd7); WINADAPTER_IID(IDXCoreAdapterList, 0x526c7776, 0x40e9, 0x459b, 0xb7, 0x11, 0xf3, 0x2a, 0xd7, 0x6d, 0xfc, 0x28); WINADAPTER_IID(IDXCoreAdapter, 0xf0db4c7f, 0xfe5a, 0x42a2, 0xbd, 0x62, 0xf2, 0xa6, 0xcf, 0x6f, 0xc8, 0x3e); +WINADAPTER_IID(IDXCoreAdapter1, 0xa0783366, 0xcfa3, 0x43be, 0x9d, 0x79, 0x55, 0xb2, 0xda, 0x97, 0xc6, 0x3c); #endif diff --git a/thirdparty/directx_headers/patches/0001-mingw-pragma.patch b/thirdparty/directx_headers/patches/0001-mingw-pragma.patch deleted file mode 100644 index cf7dd55e617..00000000000 --- a/thirdparty/directx_headers/patches/0001-mingw-pragma.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h b/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h -index f061e79596..27c7f20448 100644 ---- a/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h -+++ b/thirdparty/directx_headers/include/directx/d3dx12_pipeline_state_stream.h -@@ -25,8 +25,10 @@ - struct DefaultSampleMask { operator UINT() noexcept { return UINT_MAX; } }; - struct DefaultSampleDesc { operator DXGI_SAMPLE_DESC() noexcept { return DXGI_SAMPLE_DESC{1, 0}; } }; - -+#if defined(_MSC_VER) - #pragma warning(push) - #pragma warning(disable : 4324) -+#endif - template - class alignas(void*) CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT - { -@@ -42,7 +44,9 @@ public: - InnerStructType* operator&() noexcept { return &pssInner; } - InnerStructType const* operator&() const noexcept { return &pssInner; } - }; -+#if defined(_MSC_VER) - #pragma warning(pop) -+#endif - typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< D3D12_PIPELINE_STATE_FLAGS, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_FLAGS> CD3DX12_PIPELINE_STATE_STREAM_FLAGS; - typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< UINT, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_NODE_MASK> CD3DX12_PIPELINE_STATE_STREAM_NODE_MASK; - typedef CD3DX12_PIPELINE_STATE_STREAM_SUBOBJECT< ID3D12RootSignature*, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_ROOT_SIGNATURE> CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE; diff --git a/thirdparty/directx_headers/patches/0002-win7-8-dynamic-load.patch b/thirdparty/directx_headers/patches/0001-win7-8-dynamic-load.patch similarity index 84% rename from thirdparty/directx_headers/patches/0002-win7-8-dynamic-load.patch rename to thirdparty/directx_headers/patches/0001-win7-8-dynamic-load.patch index db7da3b83a1..1aec6f5e567 100644 --- a/thirdparty/directx_headers/patches/0002-win7-8-dynamic-load.patch +++ b/thirdparty/directx_headers/patches/0001-win7-8-dynamic-load.patch @@ -1,16 +1,16 @@ diff --git a/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h b/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h -index 572efed852..2da79d10f1 100644 +index e194d30a3f..bf9a2c9101 100644 --- a/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h +++ b/thirdparty/directx_headers/include/directx/d3dx12_root_signature.h -@@ -996,6 +996,7 @@ struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE - // two code paths for building root signatures, this helper method reconstructs a 1.0 signature when - // 1.1 is not supported. +@@ -1001,6 +1001,7 @@ struct CD3DX12_GPU_DESCRIPTOR_HANDLE : public D3D12_GPU_DESCRIPTOR_HANDLE + #endif + inline HRESULT D3DX12SerializeVersionedRootSignature( + _In_ HMODULE pLibD3D12, _In_ const D3D12_VERSIONED_ROOT_SIGNATURE_DESC* pRootSignatureDesc, D3D_ROOT_SIGNATURE_VERSION MaxVersion, _Outptr_ ID3DBlob** ppBlob, -@@ -1006,13 +1007,18 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1011,13 +1012,18 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( *ppErrorBlob = nullptr; } @@ -30,7 +30,7 @@ index 572efed852..2da79d10f1 100644 case D3D_ROOT_SIGNATURE_VERSION_1_1: #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) -@@ -1114,7 +1120,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1125,7 +1131,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( if (SUCCEEDED(hr)) { const CD3DX12_ROOT_SIGNATURE_DESC desc_1_0(desc_1_1.NumParameters, pParameters_1_0, desc_1_1.NumStaticSamplers, pStaticSamplers == nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags); @@ -39,7 +39,7 @@ index 572efed852..2da79d10f1 100644 } if (pParameters) -@@ -1145,7 +1151,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1159,7 +1165,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( { case D3D_ROOT_SIGNATURE_VERSION_1_0: case D3D_ROOT_SIGNATURE_VERSION_1_1: @@ -48,7 +48,7 @@ index 572efed852..2da79d10f1 100644 #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) case D3D_ROOT_SIGNATURE_VERSION_1_2: -@@ -1181,7 +1187,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( +@@ -1195,7 +1201,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( if (SUCCEEDED(hr)) { const CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC desc(desc_1_1.NumParameters, desc_1_1.pParameters, desc_1_1.NumStaticSamplers, pStaticSamplers == nullptr ? desc_1_1.pStaticSamplers : pStaticSamplers, desc_1_1.Flags); @@ -57,10 +57,10 @@ index 572efed852..2da79d10f1 100644 } if (pStaticSamplers) -@@ -1197,7 +1203,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( - #if defined(D3D12_SDK_VERSION) && (D3D12_SDK_VERSION >= 609) +@@ -1216,7 +1222,7 @@ inline HRESULT D3DX12SerializeVersionedRootSignature( case D3D_ROOT_SIGNATURE_VERSION_1_2: #endif + default: - return D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); + return d3d_D3D12SerializeVersionedRootSignature(pRootSignatureDesc, ppBlob, ppErrorBlob); }