/*
 * Copyright 2010 Rico Schüller
 * Copyright 2013 Austin English
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "oaidl.idl";
import "ocidl.idl";
import "dxgi.idl";
import "d3dcommon.idl";

typedef D3D_PRIMITIVE D3D11_PRIMITIVE;
typedef D3D_PRIMITIVE_TOPOLOGY D3D11_PRIMITIVE_TOPOLOGY;
typedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION;
typedef RECT D3D11_RECT;

interface ID3D11Device;
interface ID3D11ClassLinkage;
interface ID3D11Resource;
interface ID3D11VideoProcessorInputView;

cpp_quote("#ifndef _D3D11_CONSTANTS")
cpp_quote("#define _D3D11_CONSTANTS")

const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT      = 14;
const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS          = 4;
const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32;
const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT       = 15;
const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT = 16;
const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;
const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT      = 15;
const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
const UINT D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;
const UINT D3D11_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT           = 64;
const UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;
const UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1;
const UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
const UINT D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;
const UINT D3D11_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32;
const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS  = 1;
const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT       = 128;
const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1;
const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS  = 1;
const UINT D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT           = 128;
const UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS         = 1;
const UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_COUNT              = 16;
const UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST     = 1;
const UINT D3D11_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS         = 1;
const UINT D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT                  = 16;
const UINT D3D11_COMMONSHADER_SUBROUTINE_NESTING_LIMIT            = 32;
const UINT D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENTS            = 4;
const UINT D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT   = 32;
const UINT D3D11_COMMONSHADER_TEMP_REGISTER_COUNT                 = 4096;
const UINT D3D11_COMMONSHADER_TEMP_REGISTER_READS_PER_INST        = 3;
const UINT D3D11_COMMONSHADER_TEMP_REGISTER_READ_PORTS            = 3;
const UINT D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX        = 10;
const INT D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN         = -10;
const INT D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE            = -8;
const UINT D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE           = 7;

const UINT D3D11_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 256;
const UINT D3D11_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP          = 64;
const UINT D3D11_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 240;
const UINT D3D11_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP          = 68;
const UINT D3D11_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 224;
const UINT D3D11_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP          = 72;
const UINT D3D11_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 208;
const UINT D3D11_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP          = 76;
const UINT D3D11_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 192;
const UINT D3D11_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP          = 84;
const UINT D3D11_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 176;
const UINT D3D11_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP          = 92;
const UINT D3D11_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 160;
const UINT D3D11_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP          = 100;
const UINT D3D11_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 144;
const UINT D3D11_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP          = 112;
const UINT D3D11_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 128;
const UINT D3D11_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP          = 128;
const UINT D3D11_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 112;
const UINT D3D11_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP          = 144;
const UINT D3D11_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 96;
const UINT D3D11_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP          = 168;
const UINT D3D11_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 80;
const UINT D3D11_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP          = 204;
const UINT D3D11_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 64;
const UINT D3D11_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP          = 256;
const UINT D3D11_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 48;
const UINT D3D11_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP          = 340;
const UINT D3D11_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 32;
const UINT D3D11_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP          = 512;
const UINT D3D11_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 16;
const UINT D3D11_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP          = 768;
const UINT D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION   = 1;
const UINT D3D11_CS_4_X_RAW_UAV_BYTE_ALIGNMENT                      = 256;
const UINT D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP          = 768;
const UINT D3D11_CS_4_X_THREAD_GROUP_MAX_X                          = 768;
const UINT D3D11_CS_4_X_THREAD_GROUP_MAX_Y                          = 768;
const UINT D3D11_CS_4_X_UAV_REGISTER_COUNT                          = 1;
const UINT D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION        = 65535;
const UINT D3D11_CS_TGSM_REGISTER_COUNT                             = 8192;
const UINT D3D11_CS_TGSM_REGISTER_READS_PER_INST                    = 1;
const UINT D3D11_CS_TGSM_RESOURCE_REGISTER_COMPONENTS               = 1;
const UINT D3D11_CS_TGSM_RESOURCE_REGISTER_READ_PORTS               = 1;
const UINT D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP              = 1024;
const UINT D3D11_CS_THREAD_GROUP_MAX_X                              = 1024;
const UINT D3D11_CS_THREAD_GROUP_MAX_Y                              = 1024;
const UINT D3D11_CS_THREAD_GROUP_MAX_Z                              = 64;
const UINT D3D11_CS_THREAD_GROUP_MIN_X                              = 1;
const UINT D3D11_CS_THREAD_GROUP_MIN_Y                              = 1;
const UINT D3D11_CS_THREAD_GROUP_MIN_Z                              = 1;
const UINT D3D11_CS_THREAD_LOCAL_TEMP_REGISTER_POOL                 = 16384;

const UINT D3D11_DEFAULT_DEPTH_BIAS          = 0;
cpp_quote("#define D3D11_DEFAULT_DEPTH_BIAS_CLAMP 0.0f")
const UINT D3D11_DEFAULT_MAX_ANISOTROPY      = 16;
cpp_quote("#define D3D11_DEFAULT_MIP_LOD_BIAS 0.0f")
const UINT D3D11_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0;
const UINT D3D11_DEFAULT_SAMPLE_MASK         = 0xffffffff;
const UINT D3D11_DEFAULT_SCISSOR_ENDX        = 0;
const UINT D3D11_DEFAULT_SCISSOR_ENDY        = 0;
const UINT D3D11_DEFAULT_SCISSOR_STARTX      = 0;
const UINT D3D11_DEFAULT_SCISSOR_STARTY      = 0;
cpp_quote("#define D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS 0.0f")
const UINT D3D11_DEFAULT_STENCIL_READ_MASK   = 0xff;
const UINT D3D11_DEFAULT_STENCIL_REFERENCE   = 0;
const UINT D3D11_DEFAULT_STENCIL_WRITE_MASK  = 0xff;
const UINT D3D11_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0;
const UINT D3D11_DEFAULT_VIEWPORT_HEIGHT     = 0;
cpp_quote("#define D3D11_DEFAULT_VIEWPORT_MAX_DEPTH 0.0f")
cpp_quote("#define D3D11_DEFAULT_VIEWPORT_MIN_DEPTH 0.0f")
const UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTX   = 0;
const UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTY   = 0;
const UINT D3D11_DEFAULT_VIEWPORT_WIDTH      = 0;

cpp_quote("#define D3D11_FLOAT32_MAX         (3.402823466e+38f)")

const UINT D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;

const unsigned int D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;

const UINT D3D11_MAX_MAXANISOTROPY           = 16;
const UINT D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT = 32;
const UINT D3D11_VIEWPORT_BOUNDS_MAX         = 32767;
const INT D3D11_VIEWPORT_BOUNDS_MIN          = -32768;
const UINT D3D11_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15;
const UINT D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16;

const UINT D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL = 0xffffffff;
const UINT D3D11_KEEP_UNORDERED_ACCESS_VIEWS           = 0xffffffff;

const UINT D3D11_SHADER_MAJOR_VERSION        = 5;
const UINT D3D11_SHADER_MAX_INSTANCES        = 65535;
const UINT D3D11_SHADER_MAX_INTERFACES       = 253;
const UINT D3D11_SHADER_MAX_INTERFACE_CALL_SITES = 4096;
const UINT D3D11_SHADER_MAX_TYPES            = 65535;
const UINT D3D11_SHADER_MINOR_VERSION        = 0;
const UINT D3D11_VS_OUTPUT_REGISTER_COUNT    = 32;

const UINT D3D11_OMAC_SIZE = 16;

const UINT D3D11_PS_CS_UAV_REGISTER_COMPONENTS         = 1;
const UINT D3D11_PS_CS_UAV_REGISTER_COUNT              = 8;
const UINT D3D11_PS_CS_UAV_REGISTER_READS_PER_INST     = 1;
const UINT D3D11_PS_CS_UAV_REGISTER_READ_PORTS         = 1;
const UINT D3D11_PS_FRONTFACING_DEFAULT_VALUE          = 0xffffffff;
const UINT D3D11_PS_FRONTFACING_FALSE_VALUE            = 0;
const UINT D3D11_PS_FRONTFACING_TRUE_VALUE             = 0xffffffff;
const UINT D3D11_PS_INPUT_REGISTER_COMPONENTS          = 4;
const UINT D3D11_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
const UINT D3D11_PS_INPUT_REGISTER_COUNT               = 32;
const UINT D3D11_PS_INPUT_REGISTER_READS_PER_INST      = 2;
const UINT D3D11_PS_INPUT_REGISTER_READ_PORTS          = 1;
cpp_quote("#define D3D11_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT (0.0f)")
const UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS   = 1;
const UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32;
const UINT D3D11_PS_OUTPUT_DEPTH_REGISTER_COUNT        = 1;
const UINT D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENTS    = 1;
const UINT D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32;
const UINT D3D11_PS_OUTPUT_MASK_REGISTER_COUNT         = 1;
const UINT D3D11_PS_OUTPUT_REGISTER_COMPONENTS         = 4;
const UINT D3D11_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
const UINT D3D11_PS_OUTPUT_REGISTER_COUNT              = 8;
cpp_quote("#define D3D11_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT (0.5f)")

const UINT D3D11_RAW_UAV_SRV_BYTE_ALIGNMENT            = 16;

const UINT D3D11_REQ_BLEND_OBJECT_COUNT_PER_DEVICE     = 4096;
const UINT D3D11_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27;
const UINT D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT     = 4096;
const UINT D3D11_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE = 4096;
const UINT D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP  = 32;
const UINT D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP        = 32;
const UINT D3D11_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 16384;
const UINT D3D11_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024;
const UINT D3D11_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096;
const UINT D3D11_REQ_MAXANISOTROPY                     = 16;
const UINT D3D11_REQ_MIP_LEVELS                        = 15;
const UINT D3D11_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048;
const UINT D3D11_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE = 4096;
const UINT D3D11_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH     = 16384;
const UINT D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM = 128;
cpp_quote("#define D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM (0.25f)")
const UINT D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM = 2048;
const UINT D3D11_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP = 20;
const UINT D3D11_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE   = 4096;
const UINT D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION    = 2048;
const UINT D3D11_REQ_TEXTURE1D_U_DIMENSION             = 16384;
const UINT D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION    = 2048;
const UINT D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION        = 16384;
const UINT D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION      = 2048;
const UINT D3D11_REQ_TEXTURECUBE_DIMENSION             = 16384;

const UINT D3D11_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0;

const UINT D3D11_SHIFT_INSTRUCTION_PAD_VALUE           = 0;
const UINT D3D11_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5;

const UINT D3D11_SO_BUFFER_MAX_STRIDE_IN_BYTES         = 2048;
const UINT D3D11_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES   = 512;
const UINT D3D11_SO_BUFFER_SLOT_COUNT                  = 4;
const UINT D3D11_SO_DDI_REGISTER_INDEX_DENOTING_GAP    = 0xffffffff;
const UINT D3D11_SO_NO_RASTERIZED_STREAM               = 0xffffffff;
const UINT D3D11_SO_OUTPUT_COMPONENT_COUNT             = 128;
const UINT D3D11_SO_STREAM_COUNT                       = 4;

const UINT D3D11_SPEC_DATE_DAY   = 16;
const UINT D3D11_SPEC_DATE_MONTH = 05;
const UINT D3D11_SPEC_DATE_YEAR  = 2011;

cpp_quote("#define D3D11_SPEC_VERSION                   (1.07)")
cpp_quote("#define D3D11_SRGB_GAMMA                     (2.2f)")
cpp_quote("#define D3D11_SRGB_TO_FLOAT_DENOMINATOR_1    (12.92f)")
cpp_quote("#define D3D11_SRGB_TO_FLOAT_DENOMINATOR_2    (1.055f)")
cpp_quote("#define D3D11_SRGB_TO_FLOAT_EXPONENT         (2.4f)")
cpp_quote("#define D3D11_SRGB_TO_FLOAT_OFFSET           (0.055f)")
cpp_quote("#define D3D11_SRGB_TO_FLOAT_THRESHOLD        (0.04045f)")
cpp_quote("#define D3D11_SRGB_TO_FLOAT_TOLERANCE_IN_ULP (0.5f)")

const UINT D3D11_STANDARD_COMPONENT_BIT_COUNT                     = 32;
const UINT D3D11_STANDARD_COMPONENT_BIT_COUNT_DOUBLED             = 64;
const UINT D3D11_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4;
const UINT D3D11_STANDARD_PIXEL_COMPONENT_COUNT                   = 128;
const UINT D3D11_STANDARD_PIXEL_ELEMENT_COUNT                     = 32;
const UINT D3D11_STANDARD_VECTOR_SIZE                             = 4;
const UINT D3D11_STANDARD_VERTEX_ELEMENT_COUNT                    = 32;
const UINT D3D11_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT            = 64;

cpp_quote("#endif")

cpp_quote("#ifndef _D3D11_1_CONSTANTS")
cpp_quote("#define _D3D11_1_CONSTANTS")
const UINT D3D11_1_UAV_SLOT_COUNT = 64;
cpp_quote("#endif")

cpp_quote("#ifndef _D3D11_2_CONSTANTS")
cpp_quote("#define _D3D11_2_CONSTANTS")
const UINT D3D11_2_TILED_RESOURCE_TILE_SIZE_IN_BYTES = 0x10000;
cpp_quote("#endif")

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("struct CD3D11_DEFAULT {};")
cpp_quote("extern const DECLSPEC_SELECTANY CD3D11_DEFAULT D3D11_DEFAULT;")
cpp_quote("#endif")

typedef enum D3D11_BLEND
{
    D3D11_BLEND_ZERO = 1,
    D3D11_BLEND_ONE = 2,
    D3D11_BLEND_SRC_COLOR = 3,
    D3D11_BLEND_INV_SRC_COLOR = 4,
    D3D11_BLEND_SRC_ALPHA = 5,
    D3D11_BLEND_INV_SRC_ALPHA = 6,
    D3D11_BLEND_DEST_ALPHA = 7,
    D3D11_BLEND_INV_DEST_ALPHA = 8,
    D3D11_BLEND_DEST_COLOR = 9,
    D3D11_BLEND_INV_DEST_COLOR = 10,
    D3D11_BLEND_SRC_ALPHA_SAT = 11,
    D3D11_BLEND_BLEND_FACTOR = 14,
    D3D11_BLEND_INV_BLEND_FACTOR = 15,
    D3D11_BLEND_SRC1_COLOR = 16,
    D3D11_BLEND_INV_SRC1_COLOR = 17,
    D3D11_BLEND_SRC1_ALPHA = 18,
    D3D11_BLEND_INV_SRC1_ALPHA = 19,
} D3D11_BLEND;

typedef enum D3D11_BLEND_OP
{
    D3D11_BLEND_OP_ADD = 1,
    D3D11_BLEND_OP_SUBTRACT,
    D3D11_BLEND_OP_REV_SUBTRACT,
    D3D11_BLEND_OP_MIN,
    D3D11_BLEND_OP_MAX
} D3D11_BLEND_OP;

typedef enum D3D11_VIDEO_DECODER_BUFFER_TYPE
{
    D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS = 0,
    D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL = 1,
    D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE = 2,
    D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL = 3,
    D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX = 4,
    D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL = 5,
    D3D11_VIDEO_DECODER_BUFFER_BITSTREAM = 6,
    D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR = 7,
    D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN = 8,
} D3D11_VIDEO_DECODER_BUFFER_TYPE;

typedef enum D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE
{
    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE = 0,
    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_BACKGROUND = 1,
    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_DESTINATION = 2,
    D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM = 3,
} D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE;

typedef enum D3D11_VIDEO_PROCESSOR_OUTPUT_RATE
{
    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL = 0,
    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF = 1,
    D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM = 2,
} D3D11_VIDEO_PROCESSOR_OUTPUT_RATE;

typedef enum D3D11_VIDEO_PROCESSOR_STEREO_FORMAT
{
    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO = 0,
    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL = 1,
    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL = 2,
    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE = 3,
    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET = 4,
    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED = 5,
    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED = 6,
    D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD = 7,
} D3D11_VIDEO_PROCESSOR_STEREO_FORMAT;

typedef enum D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE
{
    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE = 0,
    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME0 = 1,
    D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME1 = 2,
} D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE;

typedef enum D3D11_VIDEO_PROCESSOR_ROTATION
{
    D3D11_VIDEO_PROCESSOR_ROTATION_IDENTITY = 0,
    D3D11_VIDEO_PROCESSOR_ROTATION_90 = 1,
    D3D11_VIDEO_PROCESSOR_ROTATION_180 = 2,
    D3D11_VIDEO_PROCESSOR_ROTATION_270 = 3,
} D3D11_VIDEO_PROCESSOR_ROTATION;

typedef enum D3D11_VIDEO_PROCESSOR_DEVICE_CAPS
{
    D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_LINEAR_SPACE                          = 0x00000001,
    D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC                                 = 0x00000002,
    D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_RGB_RANGE_CONVERSION                  = 0x00000004,
    D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION               = 0x00000008,
    D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_NOMINAL_RANGE                         = 0x00000010,
} D3D11_VIDEO_PROCESSOR_DEVICE_CAPS;

typedef enum D3D11_VIDEO_PROCESSOR_FEATURE_CAPS
{
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL                           = 0x00000001,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION                         = 0x00000002,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY                             = 0x00000004,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE                        = 0x00000008,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LEGACY                               = 0x00000010,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO                               = 0x00000020,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ROTATION                             = 0x00000040,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_STREAM                         = 0x00000080,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_PIXEL_ASPECT_RATIO                   = 0x00000100,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_MIRROR                               = 0x00000200,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_SHADER_USAGE                         = 0x00000400,
    D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_METADATA_HDR10                       = 0x00000800,
} D3D11_VIDEO_PROCESSOR_FEATURE_CAPS;

typedef enum D3D11_VIDEO_PROCESSOR_FILTER_CAPS
{
    D3D11_VIDEO_PROCESSOR_FILTER_CAPS_BRIGHTNESS                            = 0x00000001,
    D3D11_VIDEO_PROCESSOR_FILTER_CAPS_CONTRAST                              = 0x00000002,
    D3D11_VIDEO_PROCESSOR_FILTER_CAPS_HUE                                   = 0x00000004,
    D3D11_VIDEO_PROCESSOR_FILTER_CAPS_SATURATION                            = 0x00000008,
    D3D11_VIDEO_PROCESSOR_FILTER_CAPS_NOISE_REDUCTION                       = 0x00000010,
    D3D11_VIDEO_PROCESSOR_FILTER_CAPS_EDGE_ENHANCEMENT                      = 0x00000020,
    D3D11_VIDEO_PROCESSOR_FILTER_CAPS_ANAMORPHIC_SCALING                    = 0x00000040,
    D3D11_VIDEO_PROCESSOR_FILTER_CAPS_STEREO_ADJUSTMENT                     = 0x00000080,
} D3D11_VIDEO_PROCESSOR_FILTER_CAPS;

typedef enum D3D11_VIDEO_PROCESSOR_FORMAT_CAPS
{
    D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_INTERLACED                        = 0x00000001,
    D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_PROCAMP                           = 0x00000002,
    D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY                          = 0x00000004,
    D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_PALETTE_INTERLACED                    = 0x00000008,
} D3D11_VIDEO_PROCESSOR_FORMAT_CAPS;

typedef enum D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS
{
    D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_DENOISE                          = 0x00000001,
    D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_DERINGING                        = 0x00000002,
    D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_EDGE_ENHANCEMENT                 = 0x00000004,
    D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_COLOR_CORRECTION                 = 0x00000008,
    D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_FLESH_TONE_MAPPING               = 0x00000010,
    D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_IMAGE_STABILIZATION              = 0x00000020,
    D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_SUPER_RESOLUTION                 = 0x00000040,
    D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_ANAMORPHIC_SCALING               = 0x00000080,
} D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS;

typedef enum D3D11_VIDEO_PROCESSOR_STEREO_CAPS
{
    D3D11_VIDEO_PROCESSOR_STEREO_CAPS_MONO_OFFSET                           = 0x00000001,
    D3D11_VIDEO_PROCESSOR_STEREO_CAPS_ROW_INTERLEAVED                       = 0x00000002,
    D3D11_VIDEO_PROCESSOR_STEREO_CAPS_COLUMN_INTERLEAVED                    = 0x00000004,
    D3D11_VIDEO_PROCESSOR_STEREO_CAPS_CHECKERBOARD                          = 0x00000008,
    D3D11_VIDEO_PROCESSOR_STEREO_CAPS_FLIP_MODE                             = 0x00000010,
} D3D11_VIDEO_PROCESSOR_STEREO_CAPS;

typedef enum D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS
{
    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BLEND                  = 0x01,
    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BOB                    = 0x02,
    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE               = 0x04,
    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION    = 0x08,
    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_INVERSE_TELECINE                   = 0x10,
    D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_FRAME_RATE_CONVERSION              = 0x20,
} D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS;

typedef enum D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS
{
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32                                 = 0x00000001,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_22                                 = 0x00000002,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2224                               = 0x00000004,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2332                               = 0x00000008,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32322                              = 0x00000010,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_55                                 = 0x00000020,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_64                                 = 0x00000040,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_87                                 = 0x00000080,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_222222222223                       = 0x00000100,
    D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_OTHER                              = 0x80000000,
} D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS;

typedef enum D3D11_CONTENT_PROTECTION_CAPS
{
    D3D11_CONTENT_PROTECTION_CAPS_SOFTWARE                                  = 0x00000001,
    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE                                  = 0x00000002,
    D3D11_CONTENT_PROTECTION_CAPS_PROTECTION_ALWAYS_ON                      = 0x00000004,
    D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION                        = 0x00000008,
    D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY                               = 0x00000010,
    D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY                       = 0x00000020,
    D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK                       = 0x00000040,
    D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY                   = 0x00000080,
    D3D11_CONTENT_PROTECTION_CAPS_SEQUENTIAL_CTR_IV                         = 0x00000100,
    D3D11_CONTENT_PROTECTION_CAPS_ENCRYPT_SLICEDATA_ONLY                    = 0x00000200,
    D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT                            = 0x00000400,
    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECT_UNCOMPRESSED             = 0x00000800,
    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECTED_MEMORY_PAGEABLE        = 0x00001000,
    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN                         = 0x00002000,
    D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_DRM_COMMUNICATION                = 0x00004000,
} D3D11_CONTENT_PROTECTION_CAPS;

typedef enum D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE
{
    D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_UNDEFINED                           = 0x00000000,
    D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_16_235                              = 0x00000001,
    D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_0_255                               = 0x00000002,
} D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE;

typedef enum D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE
{
    D3D11_PROCESSIDTYPE_UNKNOWN                                             = 0x00000000,
    D3D11_PROCESSIDTYPE_DWM                                                 = 0x00000001,
    D3D11_PROCESSIDTYPE_HANDLE                                              = 0x00000002,
} D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE;

typedef enum D3D11_BUS_TYPE
{
    D3D11_BUS_TYPE_OTHER                                                    = 0x00000000,
    D3D11_BUS_TYPE_PCI                                                      = 0x00000001,
    D3D11_BUS_TYPE_PCIX                                                     = 0x00000002,
    D3D11_BUS_TYPE_PCIEXPRESS                                               = 0x00000003,
    D3D11_BUS_TYPE_AGP                                                      = 0x00000004,
    D3D11_BUS_IMPL_MODIFIER_INSIDE_OF_CHIPSET                               = 0x00010000,
    D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP                  = 0x00020000,
    D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET                = 0x00030000,
    D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR                        = 0x00040000,
    D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE         = 0x00050000,
    D3D11_BUS_IMPL_MODIFIER_NON_STANDARD                                    = 0x80000000,
} D3D11_BUS_TYPE;

typedef struct D3D11_BOX
{
    UINT left;
    UINT top;
    UINT front;
    UINT right;
    UINT bottom;
    UINT back;
} D3D11_BOX;

typedef struct D3D11_BUFFER_RTV
{
    union
    {
        UINT FirstElement;
        UINT ElementOffset;
    };
    union
    {
        UINT NumElements;
        UINT ElementWidth;
    };
} D3D11_BUFFER_RTV;

typedef struct D3D11_BUFFER_SRV
{
    union
    {
        UINT FirstElement;
        UINT ElementOffset;
    };
    union
    {
        UINT NumElements;
        UINT ElementWidth;
    };
} D3D11_BUFFER_SRV;

typedef struct D3D11_BUFFER_UAV
{
    UINT FirstElement;
    UINT NumElements;
    UINT Flags;
} D3D11_BUFFER_UAV;

typedef struct D3D11_BUFFEREX_SRV
{
    UINT FirstElement;
    UINT NumElements;
    UINT Flags;
} D3D11_BUFFEREX_SRV;

typedef struct D3D11_CLASS_INSTANCE_DESC
{
    UINT InstanceId;
    UINT InstanceIndex;
    UINT TypeId;
    UINT ConstantBuffer;
    UINT BaseConstantBufferOffset;
    UINT BaseTexture;
    UINT BaseSampler;
    BOOL Created;
} D3D11_CLASS_INSTANCE_DESC;

typedef enum D3D11_COMPARISON_FUNC
{
    D3D11_COMPARISON_NEVER = 1,
    D3D11_COMPARISON_LESS,
    D3D11_COMPARISON_EQUAL,
    D3D11_COMPARISON_LESS_EQUAL,
    D3D11_COMPARISON_GREATER,
    D3D11_COMPARISON_NOT_EQUAL,
    D3D11_COMPARISON_GREATER_EQUAL,
    D3D11_COMPARISON_ALWAYS
} D3D11_COMPARISON_FUNC;

typedef enum D3D11_COUNTER
{
    D3D11_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000,
} D3D11_COUNTER;

typedef struct D3D11_COUNTER_DESC
{
    D3D11_COUNTER Counter;
    UINT MiscFlags;
} D3D11_COUNTER_DESC;

typedef struct D3D11_COUNTER_INFO
{
    D3D11_COUNTER LastDeviceDependentCounter;
    UINT NumSimultaneousCounters;
    UINT8 NumDetectableParallelUnits;
} D3D11_COUNTER_INFO;

typedef enum D3D11_COUNTER_TYPE
{
    D3D11_COUNTER_TYPE_FLOAT32,
    D3D11_COUNTER_TYPE_UINT16,
    D3D11_COUNTER_TYPE_UINT32,
    D3D11_COUNTER_TYPE_UINT64,
} D3D11_COUNTER_TYPE;

typedef enum D3D11_CULL_MODE
{
    D3D11_CULL_NONE = 1,
    D3D11_CULL_FRONT,
    D3D11_CULL_BACK
} D3D11_CULL_MODE;

typedef enum D3D11_DEPTH_WRITE_MASK
{
    D3D11_DEPTH_WRITE_MASK_ZERO,
    D3D11_DEPTH_WRITE_MASK_ALL,
} D3D11_DEPTH_WRITE_MASK;

typedef enum D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS
{
    D3D11_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff,
    D3D11_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe,
} D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS;

typedef enum D3D11_DEVICE_CONTEXT_TYPE
{
    D3D11_DEVICE_CONTEXT_IMMEDIATE,
    D3D11_DEVICE_CONTEXT_DEFERRED,
} D3D11_DEVICE_CONTEXT_TYPE;

typedef enum D3D11_DSV_DIMENSION
{
    D3D11_DSV_DIMENSION_UNKNOWN,
    D3D11_DSV_DIMENSION_TEXTURE1D,
    D3D11_DSV_DIMENSION_TEXTURE1DARRAY,
    D3D11_DSV_DIMENSION_TEXTURE2D,
    D3D11_DSV_DIMENSION_TEXTURE2DARRAY,
    D3D11_DSV_DIMENSION_TEXTURE2DMS,
    D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY,
} D3D11_DSV_DIMENSION;

typedef enum D3D11_FEATURE
{
    D3D11_FEATURE_THREADING,
    D3D11_FEATURE_DOUBLES,
    D3D11_FEATURE_FORMAT_SUPPORT,
    D3D11_FEATURE_FORMAT_SUPPORT2,
    D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS,
    D3D11_FEATURE_D3D11_OPTIONS,
    D3D11_FEATURE_ARCHITECTURE_INFO,
    D3D11_FEATURE_D3D9_OPTIONS,
    D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT,
    D3D11_FEATURE_D3D9_SHADOW_SUPPORT,
    D3D11_FEATURE_D3D11_OPTIONS1,
    D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT,
    D3D11_FEATURE_MARKER_SUPPORT,
    D3D11_FEATURE_D3D9_OPTIONS1,
    D3D11_FEATURE_D3D11_OPTIONS2,
    D3D11_FEATURE_D3D11_OPTIONS3,
    D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT,
    D3D11_FEATURE_D3D11_OPTIONS4,
    D3D11_FEATURE_SHADER_CACHE,
} D3D11_FEATURE;

typedef struct D3D11_FEATURE_DATA_THREADING
{
    BOOL DriverConcurrentCreates;
    BOOL DriverCommandLists;
} D3D11_FEATURE_DATA_THREADING;

typedef struct D3D11_FEATURE_DATA_DOUBLES
{
    BOOL DoublePrecisionFloatShaderOps;
} D3D11_FEATURE_DATA_DOUBLES;

typedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT
{
    DXGI_FORMAT InFormat;
    UINT OutFormatSupport;
} D3D11_FEATURE_DATA_FORMAT_SUPPORT;

typedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT2
{
    DXGI_FORMAT InFormat;
    UINT OutFormatSupport2;
} D3D11_FEATURE_DATA_FORMAT_SUPPORT2;

typedef struct D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS
{
    BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x;
} D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS;

typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS
{
    BOOL OutputMergerLogicOp;
    BOOL UAVOnlyRenderingForcedSampleCount;
    BOOL DiscardAPIsSeenByDriver;
    BOOL FlagsForUpdateAndCopySeenByDriver;
    BOOL ClearView;
    BOOL CopyWithOverlap;
    BOOL ConstantBufferPartialUpdate;
    BOOL ConstantBufferOffsetting;
    BOOL MapNoOverwriteOnDynamicConstantBuffer;
    BOOL MapNoOverwriteOnDynamicBufferSRV;
    BOOL MultisampleRTVWithForcedSampleCountOne;
    BOOL SAD4ShaderInstructions;
    BOOL ExtendedDoublesShaderInstructions;
    BOOL ExtendedResourceSharing;
} D3D11_FEATURE_DATA_D3D11_OPTIONS;

typedef struct D3D11_FEATURE_DATA_ARCHITECTURE_INFO
{
    BOOL TileBasedDeferredRenderer;
} D3D11_FEATURE_DATA_ARCHITECTURE_INFO;

typedef struct D3D11_FEATURE_DATA_D3D9_OPTIONS
{
    BOOL FullNonPow2TextureSupport;
} D3D11_FEATURE_DATA_D3D9_OPTIONS;

typedef struct D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT
{
    BOOL SupportsDepthAsTextureWithLessEqualComparisonFilter;
} D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT;

typedef enum D3D11_SHADER_MIN_PRECISION_SUPPORT
{
    D3D11_SHADER_MIN_PRECISION_10_BIT = 0x1,
    D3D11_SHADER_MIN_PRECISION_16_BIT = 0x2,
} D3D11_SHADER_MIN_PRECISION_SUPPORT;

typedef struct D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT
{
    UINT PixelShaderMinPrecision;
    UINT AllOtherShaderStagesMinPrecision;
} D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT;

typedef enum D3D11_TILED_RESOURCES_TIER
{
    D3D11_TILED_RESOURCES_NOT_SUPPORTED = 0x0,
    D3D11_TILED_RESOURCES_TIER_1 = 0x1,
    D3D11_TILED_RESOURCES_TIER_2 = 0x2,
    D3D11_TILED_RESOURCES_TIER_3 = 0x3,
} D3D11_TILED_RESOURCES_TIER;

typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS1
{
    D3D11_TILED_RESOURCES_TIER TiledResourcesTier;
    BOOL MinMaxFiltering;
    BOOL ClearViewAlsoSupportsDepthOnlyFormats;
    BOOL MapOnDefaultBuffers;
} D3D11_FEATURE_DATA_D3D11_OPTIONS1;

typedef struct D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT
{
    BOOL SimpleInstancingSupported;
} D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT;

typedef struct D3D11_FEATURE_DATA_MARKER_SUPPORT
{
    BOOL Profile;
} D3D11_FEATURE_DATA_MARKER_SUPPORT;

typedef struct D3D11_FEATURE_DATA_D3D9_OPTIONS1
{
    BOOL FullNonPow2TextureSupported;
    BOOL DepthAsTextureWithLessEqualComparisonFilterSupported;
    BOOL SimpleInstancingSupported;
    BOOL TextureCubeFaceRenderTargetWithNonCubeDepthStencilSupported;
} D3D11_FEATURE_DATA_D3D9_OPTIONS1;

typedef enum D3D11_CONSERVATIVE_RASTERIZATION_TIER
{
    D3D11_CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED = 0x0,
    D3D11_CONSERVATIVE_RASTERIZATION_TIER_1 = 0x1,
    D3D11_CONSERVATIVE_RASTERIZATION_TIER_2 = 0x2,
    D3D11_CONSERVATIVE_RASTERIZATION_TIER_3 = 0x3,
} D3D11_CONSERVATIVE_RASTERIZATION_TIER;

typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS2
{
    BOOL PSSpecifiedStencilRefSupported;
    BOOL TypedUAVLoadAdditionalFormats;
    BOOL ROVsSupported;
    D3D11_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
    D3D11_TILED_RESOURCES_TIER TiledResourcesTier;
    BOOL MapOnDefaultTextures;
    BOOL StandardSwizzle;
    BOOL UnifiedMemoryArchitecture;
} D3D11_FEATURE_DATA_D3D11_OPTIONS2;

typedef struct D3D11_FEATURE_DATA_D3D11_OPTIONS3
{
    BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizer;
} D3D11_FEATURE_DATA_D3D11_OPTIONS3;

typedef struct D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT
{
    UINT MaxGPUVirtualAddressBitsPerResource;
    UINT MaxGPUVirtualAddressBitsPerProcess;
} D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT;

typedef enum D3D11_SHADER_CACHE_SUPPORT_FLAGS
{
    D3D11_SHADER_CACHE_SUPPORT_NONE = 0x0,
    D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE = 0x1,
    D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE = 0x2,
} D3D11_SHADER_CACHE_SUPPORT_FLAGS;

typedef struct D3D11_FEATURE_DATA_SHADER_CACHE
{
    UINT SupportFlags;
} D3D11_FEATURE_DATA_SHADER_CACHE;

typedef enum D3D11_FILL_MODE
{
    D3D11_FILL_WIREFRAME = 2,
    D3D11_FILL_SOLID
} D3D11_FILL_MODE;

typedef enum D3D11_FILTER_TYPE
{
    D3D11_FILTER_TYPE_POINT  = 0,
    D3D11_FILTER_TYPE_LINEAR = 1
} D3D11_FILTER_TYPE;

const UINT D3D11_MIN_FILTER_SHIFT = 4;
const UINT D3D11_MAG_FILTER_SHIFT = 2;
const UINT D3D11_MIP_FILTER_SHIFT = 0;
const UINT D3D11_FILTER_TYPE_MASK          = 0x00000003;
const UINT D3D11_COMPARISON_FILTERING_BIT  = 0x00000080;
const UINT D3D11_ANISOTROPIC_FILTERING_BIT = 0x00000040;

cpp_quote("#define D3D11_ENCODE_BASIC_FILTER(min, mag, mip, bComparison) \\")
cpp_quote("    ((D3D11_FILTER)(((bComparison) ? D3D11_COMPARISON_FILTERING_BIT : 0 ) | \\")
cpp_quote("                    (((min)&D3D11_FILTER_TYPE_MASK) << D3D11_MIN_FILTER_SHIFT) | \\")
cpp_quote("                    (((mag)&D3D11_FILTER_TYPE_MASK) << D3D11_MAG_FILTER_SHIFT) | \\")
cpp_quote("                    (((mip)&D3D11_FILTER_TYPE_MASK) << D3D11_MIP_FILTER_SHIFT)))")

cpp_quote("#define D3D11_ENCODE_ANISOTROPIC_FILTER(bComparison) \\")
cpp_quote("    ((D3D11_FILTER)(D3D11_ANISOTROPIC_FILTERING_BIT | \\" )
cpp_quote("                    D3D11_ENCODE_BASIC_FILTER(D3D11_FILTER_TYPE_LINEAR,D3D11_FILTER_TYPE_LINEAR, \\" )
cpp_quote("                                              D3D11_FILTER_TYPE_LINEAR,bComparison)))" )

cpp_quote("#define D3D11_DECODE_MIN_FILTER(d3d11Filter) \\")
cpp_quote("    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIN_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")

cpp_quote("#define D3D11_DECODE_MAG_FILTER(d3d11Filter) \\")
cpp_quote("    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MAG_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")

cpp_quote("#define D3D11_DECODE_MIP_FILTER(d3d11Filter) \\")
cpp_quote("    ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIP_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")

cpp_quote("#define D3D11_DECODE_IS_COMPARISON_FILTER(d3d11Filter) ((d3d11Filter) & D3D11_COMPARISON_FILTERING_BIT)")

cpp_quote("#define D3D11_DECODE_IS_ANISOTROPIC_FILTER(d3d11Filter) \\")
cpp_quote("    (((d3d11Filter) & D3D11_ANISOTROPIC_FILTERING_BIT ) \\" )
cpp_quote("     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIN_FILTER(d3d11Filter)) \\" )
cpp_quote("     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MAG_FILTER(d3d11Filter)) \\" )
cpp_quote("     && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIP_FILTER(d3d11Filter)))")

typedef enum D3D11_FILTER
{
    D3D11_FILTER_MIN_MAG_MIP_POINT = 0x00,
    D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01,
    D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04,
    D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05,
    D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
    D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
    D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
    D3D11_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
    D3D11_FILTER_ANISOTROPIC = 0x55,
    D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,
    D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
    D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
    D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
    D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
    D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
    D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
    D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
    D3D11_FILTER_COMPARISON_ANISOTROPIC = 0xd5
} D3D11_FILTER;

typedef enum D3D11_DSV_FLAG
{
    D3D11_DSV_READ_ONLY_DEPTH = 0x1,
    D3D11_DSV_READ_ONLY_STENCIL = 0x2,
} D3D11_DSV_FLAG;

typedef enum D3D11_BUFFEREX_SRV_FLAG
{
    D3D11_BUFFEREX_SRV_FLAG_RAW = 0x1,
} D3D11_BUFFEREX_SRV_FLAG;

typedef enum D3D11_UAV_FLAG
{
    D3D11_BUFFER_UAV_FLAG_RAW     = 0x1,
    D3D11_BUFFER_UAV_FLAG_APPEND  = 0x2,
    D3D11_BUFFER_UAV_FLAG_COUNTER = 0x4,
} D3D11_UAV_FLAG;

typedef enum D3D11_INPUT_CLASSIFICATION
{
    D3D11_INPUT_PER_VERTEX_DATA,
    D3D11_INPUT_PER_INSTANCE_DATA,
} D3D11_INPUT_CLASSIFICATION;

const UINT D3D11_APPEND_ALIGNED_ELEMENT = 0xffffffff;

typedef struct D3D11_INPUT_ELEMENT_DESC
{
    LPCSTR SemanticName;
    UINT SemanticIndex;
    DXGI_FORMAT Format;
    UINT InputSlot;
    UINT AlignedByteOffset;
    D3D11_INPUT_CLASSIFICATION InputSlotClass;
    UINT InstanceDataStepRate;
} D3D11_INPUT_ELEMENT_DESC;

typedef enum D3D11_MAP
{
    D3D11_MAP_READ = 1,
    D3D11_MAP_WRITE,
    D3D11_MAP_READ_WRITE,
    D3D11_MAP_WRITE_DISCARD,
    D3D11_MAP_WRITE_NO_OVERWRITE
} D3D11_MAP;

typedef enum D3D11_MAP_FLAG
{
    D3D11_MAP_FLAG_DO_NOT_WAIT = 0x00100000
} D3D11_MAP_FLAG;

typedef struct D3D11_QUERY_DATA_SO_STATISTICS
{
    UINT64 NumPrimitivesWritten;
    UINT64 PrimitivesStorageNeeded;
} D3D11_QUERY_DATA_SO_STATISTICS;

typedef struct D3D11_MAPPED_SUBRESOURCE
{
    void *pData;
    UINT RowPitch;
    UINT DepthPitch;
} D3D11_MAPPED_SUBRESOURCE;

typedef enum D3D11_QUERY
{
    D3D11_QUERY_EVENT,
    D3D11_QUERY_OCCLUSION,
    D3D11_QUERY_TIMESTAMP,
    D3D11_QUERY_TIMESTAMP_DISJOINT,
    D3D11_QUERY_PIPELINE_STATISTICS,
    D3D11_QUERY_OCCLUSION_PREDICATE,
    D3D11_QUERY_SO_STATISTICS,
    D3D11_QUERY_SO_OVERFLOW_PREDICATE,
    D3D11_QUERY_SO_STATISTICS_STREAM0,
    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0,
    D3D11_QUERY_SO_STATISTICS_STREAM1,
    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1,
    D3D11_QUERY_SO_STATISTICS_STREAM2,
    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2,
    D3D11_QUERY_SO_STATISTICS_STREAM3,
    D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3,
} D3D11_QUERY;

typedef enum D3D11_QUERY_MISC_FLAG
{
    D3D11_QUERY_MISC_PREDICATEHINT = 0x1,
} D3D11_QUERY_MISC_FLAG;

typedef enum D3D11_ASYNC_GETDATA_FLAG
{
    D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x0001,
} D3D11_ASYNC_GETDATA_FLAG;

typedef enum D3D11_RESOURCE_MISC_FLAG
{
    D3D11_RESOURCE_MISC_GENERATE_MIPS                    = 0x00000001L,
    D3D11_RESOURCE_MISC_SHARED                           = 0x00000002L,
    D3D11_RESOURCE_MISC_TEXTURECUBE                      = 0x00000004L,
    D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS                = 0x00000010L,
    D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS           = 0x00000020L,
    D3D11_RESOURCE_MISC_BUFFER_STRUCTURED                = 0x00000040L,
    D3D11_RESOURCE_MISC_RESOURCE_CLAMP                   = 0x00000080L,
    D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX                = 0x00000100L,
    D3D11_RESOURCE_MISC_GDI_COMPATIBLE                   = 0x00000200L,
    D3D11_RESOURCE_MISC_SHARED_NTHANDLE                  = 0x00000800L,
    D3D11_RESOURCE_MISC_RESTRICTED_CONTENT               = 0x00001000L,
    D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE         = 0x00002000L,
    D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER  = 0x00004000L,
    D3D11_RESOURCE_MISC_GUARDED                          = 0x00008000L
} D3D11_RESOURCE_MISC_FLAG;

typedef struct D3D11_QUERY_DESC
{
    D3D11_QUERY Query;
    UINT MiscFlags;
} D3D11_QUERY_DESC;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("struct CD3D11_QUERY_DESC : public D3D11_QUERY_DESC {")
cpp_quote("    CD3D11_QUERY_DESC() {}")
cpp_quote("    ~CD3D11_QUERY_DESC() {}")
cpp_quote("    explicit CD3D11_QUERY_DESC(const D3D11_QUERY_DESC &other) : D3D11_QUERY_DESC(other) {}")
cpp_quote("    explicit CD3D11_QUERY_DESC(D3D11_QUERY query, UINT misc_flags = 0) {")
cpp_quote("        Query = query;")
cpp_quote("        MiscFlags = misc_flags;")
cpp_quote("    }")
cpp_quote("    operator const D3D11_QUERY_DESC&() const {")
cpp_quote("        return *this;")
cpp_quote("    }")
cpp_quote("};")
cpp_quote("#endif")

typedef struct D3D11_RASTERIZER_DESC
{
    D3D11_FILL_MODE FillMode;
    D3D11_CULL_MODE CullMode;
    BOOL FrontCounterClockwise;
    INT DepthBias;
    FLOAT DepthBiasClamp;
    FLOAT SlopeScaledDepthBias;
    BOOL DepthClipEnable;
    BOOL ScissorEnable;
    BOOL MultisampleEnable;
    BOOL AntialiasedLineEnable;
} D3D11_RASTERIZER_DESC;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("struct CD3D11_RASTERIZER_DESC : public D3D11_RASTERIZER_DESC {")
cpp_quote("    CD3D11_RASTERIZER_DESC() {}")
cpp_quote("    explicit CD3D11_RASTERIZER_DESC(const D3D11_RASTERIZER_DESC &o) : D3D11_RASTERIZER_DESC(o) {}")
cpp_quote("    explicit CD3D11_RASTERIZER_DESC(CD3D11_DEFAULT) {")
cpp_quote("        FillMode = D3D11_FILL_SOLID;")
cpp_quote("        CullMode = D3D11_CULL_BACK;")
cpp_quote("        FrontCounterClockwise = FALSE;")
cpp_quote("        DepthBias = D3D11_DEFAULT_DEPTH_BIAS;")
cpp_quote("        DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP;")
cpp_quote("        SlopeScaledDepthBias = D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;")
cpp_quote("        DepthClipEnable = TRUE;")
cpp_quote("        ScissorEnable = FALSE;")
cpp_quote("        MultisampleEnable = FALSE;")
cpp_quote("        AntialiasedLineEnable = FALSE;")
cpp_quote("    }")
cpp_quote("    explicit CD3D11_RASTERIZER_DESC(D3D11_FILL_MODE fillMode, D3D11_CULL_MODE cullMode," )
cpp_quote("            WINBOOL frontCounterClockwise, INT depthBias, FLOAT depthBiasClamp, FLOAT slopeScaledDepthBias,")
cpp_quote("            BOOL depthClipEnable, WINBOOL scissorEnable, WINBOOL multisampleEnable, WINBOOL antialiasedLineEnable) {")
cpp_quote("        FillMode = fillMode;")
cpp_quote("        CullMode = cullMode;")
cpp_quote("        FrontCounterClockwise = frontCounterClockwise;")
cpp_quote("        DepthBias = depthBias;")
cpp_quote("        DepthBiasClamp = depthBiasClamp;")
cpp_quote("        SlopeScaledDepthBias = slopeScaledDepthBias;")
cpp_quote("        DepthClipEnable = depthClipEnable;")
cpp_quote("        ScissorEnable = scissorEnable;")
cpp_quote("        MultisampleEnable = multisampleEnable;")
cpp_quote("        AntialiasedLineEnable = antialiasedLineEnable;")
cpp_quote("    }")
cpp_quote("    ~CD3D11_RASTERIZER_DESC() {}")
cpp_quote("    operator const D3D11_RASTERIZER_DESC&() const { return *this; }")
cpp_quote("};")
cpp_quote("#endif")

typedef enum D3D11_RESOURCE_DIMENSION
{
    D3D11_RESOURCE_DIMENSION_UNKNOWN,
    D3D11_RESOURCE_DIMENSION_BUFFER,
    D3D11_RESOURCE_DIMENSION_TEXTURE1D,
    D3D11_RESOURCE_DIMENSION_TEXTURE2D,
    D3D11_RESOURCE_DIMENSION_TEXTURE3D,
} D3D11_RESOURCE_DIMENSION;

typedef enum D3D11_RTV_DIMENSION
{
    D3D11_RTV_DIMENSION_UNKNOWN,
    D3D11_RTV_DIMENSION_BUFFER,
    D3D11_RTV_DIMENSION_TEXTURE1D,
    D3D11_RTV_DIMENSION_TEXTURE1DARRAY,
    D3D11_RTV_DIMENSION_TEXTURE2D,
    D3D11_RTV_DIMENSION_TEXTURE2DARRAY,
    D3D11_RTV_DIMENSION_TEXTURE2DMS,
    D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY,
    D3D11_RTV_DIMENSION_TEXTURE3D,
} D3D11_RTV_DIMENSION;

typedef struct D3D11_SO_DECLARATION_ENTRY
{
    UINT Stream;
    LPCSTR SemanticName;
    UINT SemanticIndex;
    BYTE StartComponent;
    BYTE ComponentCount;
    BYTE OutputSlot;
} D3D11_SO_DECLARATION_ENTRY;

typedef enum D3D11_STENCIL_OP
{
    D3D11_STENCIL_OP_KEEP = 1,
    D3D11_STENCIL_OP_ZERO,
    D3D11_STENCIL_OP_REPLACE,
    D3D11_STENCIL_OP_INCR_SAT,
    D3D11_STENCIL_OP_DECR_SAT,
    D3D11_STENCIL_OP_INVERT,
    D3D11_STENCIL_OP_INCR,
    D3D11_STENCIL_OP_DECR
} D3D11_STENCIL_OP;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("}")
cpp_quote("inline UINT D3D11CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT MipLevels) {")
cpp_quote("    return MipSlice + ArraySlice * MipLevels;")
cpp_quote("}")
cpp_quote("extern \"C\"{")
cpp_quote("#endif")

typedef struct D3D11_SUBRESOURCE_DATA
{
    const void *pSysMem;
    UINT SysMemPitch;
    UINT SysMemSlicePitch;
} D3D11_SUBRESOURCE_DATA;

typedef struct D3D11_TEX1D_ARRAY_DSV
{
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX1D_ARRAY_DSV;

typedef struct D3D11_TEX1D_ARRAY_RTV
{
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX1D_ARRAY_RTV;

typedef struct D3D11_TEX1D_ARRAY_SRV
{
    UINT MostDetailedMip;
    UINT MipLevels;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX1D_ARRAY_SRV;

typedef struct D3D11_TEX1D_ARRAY_UAV
{
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX1D_ARRAY_UAV;

typedef struct D3D11_TEX1D_DSV
{
    UINT MipSlice;
} D3D11_TEX1D_DSV;

typedef struct D3D11_TEX1D_RTV
{
    UINT MipSlice;
} D3D11_TEX1D_RTV;

typedef struct D3D11_TEX1D_SRV
{
    UINT MostDetailedMip;
    UINT MipLevels;
 } D3D11_TEX1D_SRV;

typedef struct D3D11_TEX1D_UAV
{
    UINT MipSlice;
} D3D11_TEX1D_UAV;

typedef struct D3D11_TEX2D_ARRAY_DSV
{
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX2D_ARRAY_DSV;

typedef struct D3D11_TEX2D_ARRAY_RTV
{
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX2D_ARRAY_RTV;

typedef struct D3D11_TEX2D_ARRAY_SRV
{
    UINT MostDetailedMip;
    UINT MipLevels;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX2D_ARRAY_SRV;

typedef struct D3D11_TEX2D_ARRAY_UAV
{
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX2D_ARRAY_UAV;

typedef struct D3D11_TEX2D_DSV
{
    UINT MipSlice;
} D3D11_TEX2D_DSV;

typedef struct D3D11_TEX2D_RTV
{
    UINT MipSlice;
} D3D11_TEX2D_RTV;

typedef struct D3D11_TEX2D_SRV
{
    UINT MostDetailedMip;
    UINT MipLevels;
} D3D11_TEX2D_SRV;

typedef struct D3D11_TEX2D_UAV
{
    UINT MipSlice;
} D3D11_TEX2D_UAV;

typedef struct D3D11_TEX2DMS_ARRAY_DSV
{
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX2DMS_ARRAY_DSV;

typedef struct D3D11_TEX2DMS_ARRAY_RTV
{
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX2DMS_ARRAY_RTV;

typedef struct D3D11_TEX2DMS_ARRAY_SRV
{
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX2DMS_ARRAY_SRV;

typedef struct D3D11_TEX2DMS_DSV
{
    UINT UnusedField_NothingToDefine;
} D3D11_TEX2DMS_DSV;

typedef struct D3D11_TEX2DMS_RTV
{
    UINT UnusedField_NothingToDefine;
} D3D11_TEX2DMS_RTV;

typedef struct D3D11_TEX2DMS_SRV
{
    UINT UnusedField_NothingToDefine;
} D3D11_TEX2DMS_SRV;

typedef struct D3D11_TEX3D_RTV
{
    UINT MipSlice;
    UINT FirstWSlice;
    UINT WSize;
} D3D11_TEX3D_RTV;

typedef struct D3D11_TEX3D_SRV
{
    UINT MostDetailedMip;
    UINT MipLevels;
} D3D11_TEX3D_SRV;

typedef struct D3D11_TEX3D_UAV
{
    UINT MipSlice;
    UINT FirstWSlice;
    UINT WSize;
} D3D11_TEX3D_UAV;

typedef struct D3D11_TEXCUBE_ARRAY_SRV
{
    UINT MostDetailedMip;
    UINT MipLevels;
    UINT First2DArrayFace;
    UINT NumCubes;
} D3D11_TEXCUBE_ARRAY_SRV;

typedef struct D3D11_TEXCUBE_SRV
{
    UINT MostDetailedMip;
    UINT MipLevels;
} D3D11_TEXCUBE_SRV;

typedef enum D3D11_TEXTURE_ADDRESS_MODE
{
    D3D11_TEXTURE_ADDRESS_WRAP = 1,
    D3D11_TEXTURE_ADDRESS_MIRROR,
    D3D11_TEXTURE_ADDRESS_CLAMP,
    D3D11_TEXTURE_ADDRESS_BORDER,
    D3D11_TEXTURE_ADDRESS_MIRROR_ONCE
} D3D11_TEXTURE_ADDRESS_MODE;

typedef enum D3D11_UAV_DIMENSION
{
    D3D11_UAV_DIMENSION_UNKNOWN,
    D3D11_UAV_DIMENSION_BUFFER,
    D3D11_UAV_DIMENSION_TEXTURE1D,
    D3D11_UAV_DIMENSION_TEXTURE1DARRAY,
    D3D11_UAV_DIMENSION_TEXTURE2D,
    D3D11_UAV_DIMENSION_TEXTURE2DARRAY,
    D3D11_UAV_DIMENSION_TEXTURE3D = 8,
} D3D11_UAV_DIMENSION;

typedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC
{
    DXGI_FORMAT Format;
    D3D11_UAV_DIMENSION ViewDimension;

    union
    {
        D3D11_BUFFER_UAV Buffer;
        D3D11_TEX1D_UAV Texture1D;
        D3D11_TEX1D_ARRAY_UAV Texture1DArray;
        D3D11_TEX2D_UAV Texture2D;
        D3D11_TEX2D_ARRAY_UAV Texture2DArray;
        D3D11_TEX3D_UAV Texture3D;
    };
} D3D11_UNORDERED_ACCESS_VIEW_DESC;

typedef enum D3D11_USAGE
{
    D3D11_USAGE_DEFAULT,
    D3D11_USAGE_IMMUTABLE,
    D3D11_USAGE_DYNAMIC,
    D3D11_USAGE_STAGING,
} D3D11_USAGE;

typedef enum D3D11_BIND_FLAG
{
    D3D11_BIND_VERTEX_BUFFER    = 0x0001,
    D3D11_BIND_INDEX_BUFFER     = 0x0002,
    D3D11_BIND_CONSTANT_BUFFER  = 0x0004,
    D3D11_BIND_SHADER_RESOURCE  = 0x0008,
    D3D11_BIND_STREAM_OUTPUT    = 0x0010,
    D3D11_BIND_RENDER_TARGET    = 0x0020,
    D3D11_BIND_DEPTH_STENCIL    = 0x0040,
    D3D11_BIND_UNORDERED_ACCESS = 0x0080,
    D3D11_BIND_DECODER          = 0x0200,
    D3D11_BIND_VIDEO_ENCODER    = 0x0400
} D3D11_BIND_FLAG;

typedef enum D3D11_CPU_ACCESS_FLAG
{
    D3D11_CPU_ACCESS_WRITE = 0x00010000,
    D3D11_CPU_ACCESS_READ  = 0x00020000
} D3D11_CPU_ACCESS_FLAG;

typedef struct D3D11_VIEWPORT
{
    FLOAT TopLeftX;
    FLOAT TopLeftY;
    FLOAT Width;
    FLOAT Height;
    FLOAT MinDepth;
    FLOAT MaxDepth;
} D3D11_VIEWPORT;

typedef enum D3D11_COLOR_WRITE_ENABLE
{
    D3D11_COLOR_WRITE_ENABLE_RED   = 1,
    D3D11_COLOR_WRITE_ENABLE_GREEN = 2,
    D3D11_COLOR_WRITE_ENABLE_BLUE  = 4,
    D3D11_COLOR_WRITE_ENABLE_ALPHA = 8,
    D3D11_COLOR_WRITE_ENABLE_ALL   =
        (D3D11_COLOR_WRITE_ENABLE_RED|D3D11_COLOR_WRITE_ENABLE_GREEN|D3D11_COLOR_WRITE_ENABLE_BLUE|D3D11_COLOR_WRITE_ENABLE_ALPHA)
} D3D11_COLOR_WRITE_ENABLE;

typedef enum D3D11_FORMAT_SUPPORT
{
    D3D11_FORMAT_SUPPORT_BUFFER                       = 0x00000001,
    D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER             = 0x00000002,
    D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER              = 0x00000004,
    D3D11_FORMAT_SUPPORT_SO_BUFFER                    = 0x00000008,
    D3D11_FORMAT_SUPPORT_TEXTURE1D                    = 0x00000010,
    D3D11_FORMAT_SUPPORT_TEXTURE2D                    = 0x00000020,
    D3D11_FORMAT_SUPPORT_TEXTURE3D                    = 0x00000040,
    D3D11_FORMAT_SUPPORT_TEXTURECUBE                  = 0x00000080,
    D3D11_FORMAT_SUPPORT_SHADER_LOAD                  = 0x00000100,
    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE                = 0x00000200,
    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON     = 0x00000400,
    D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT      = 0x00000800,
    D3D11_FORMAT_SUPPORT_MIP                          = 0x00001000,
    D3D11_FORMAT_SUPPORT_MIP_AUTOGEN                  = 0x00002000,
    D3D11_FORMAT_SUPPORT_RENDER_TARGET                = 0x00004000,
    D3D11_FORMAT_SUPPORT_BLENDABLE                    = 0x00008000,
    D3D11_FORMAT_SUPPORT_DEPTH_STENCIL                = 0x00010000,
    D3D11_FORMAT_SUPPORT_CPU_LOCKABLE                 = 0x00020000,
    D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE          = 0x00040000,
    D3D11_FORMAT_SUPPORT_DISPLAY                      = 0x00080000,
    D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT       = 0x00100000,
    D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET     = 0x00200000,
    D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD             = 0x00400000,
    D3D11_FORMAT_SUPPORT_SHADER_GATHER                = 0x00800000,
    D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST             = 0x01000000,
    D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW  = 0x02000000,
    D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON     = 0x04000000,
    D3D11_FORMAT_SUPPORT_DECODER_OUTPUT               = 0x08000000,
    D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT       = 0x10000000,
    D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT        = 0x20000000,
    D3D11_FORMAT_SUPPORT_VIDEO_ENCODER                = 0x40000000,
} D3D11_FORMAT_SUPPORT;

typedef enum D3D11_CLEAR_FLAG
{
    D3D11_CLEAR_DEPTH    = 0x0001L,
    D3D11_CLEAR_STENCIL  = 0x0002L
} D3D11_CLEAR_FLAG;

typedef struct D3D11_RENDER_TARGET_BLEND_DESC
{
    BOOL BlendEnable;
    D3D11_BLEND SrcBlend;
    D3D11_BLEND DestBlend;
    D3D11_BLEND_OP BlendOp;
    D3D11_BLEND SrcBlendAlpha;
    D3D11_BLEND DestBlendAlpha;
    D3D11_BLEND_OP BlendOpAlpha;
    UINT8 RenderTargetWriteMask;
} D3D11_RENDER_TARGET_BLEND_DESC;

typedef struct D3D11_BLEND_DESC
{
    BOOL AlphaToCoverageEnable;
    BOOL IndependentBlendEnable;
    D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT];
} D3D11_BLEND_DESC;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("struct CD3D11_BLEND_DESC : public D3D11_BLEND_DESC {")
cpp_quote("    CD3D11_BLEND_DESC() {}")
cpp_quote("    explicit CD3D11_BLEND_DESC(const D3D11_BLEND_DESC &o) : D3D11_BLEND_DESC(o) {}")
cpp_quote("    explicit CD3D11_BLEND_DESC(CD3D11_DEFAULT) {")
cpp_quote("        AlphaToCoverageEnable = FALSE;")
cpp_quote("        IndependentBlendEnable = FALSE;")
cpp_quote("        for(D3D11_RENDER_TARGET_BLEND_DESC *target = RenderTarget;")
cpp_quote("                target < RenderTarget + D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT;")
cpp_quote("                target++) {")
cpp_quote("            target->BlendEnable = FALSE;")
cpp_quote("            target->SrcBlend = target->SrcBlendAlpha = D3D11_BLEND_ONE;")
cpp_quote("            target->DestBlend = target->DestBlendAlpha = D3D11_BLEND_ZERO;")
cpp_quote("            target->BlendOp = target->BlendOpAlpha = D3D11_BLEND_OP_ADD;")
cpp_quote("            target->RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;")
cpp_quote("        }")
cpp_quote("    }")
cpp_quote("    ~CD3D11_BLEND_DESC() {}")
cpp_quote("    operator const D3D11_BLEND_DESC&() const { return *this; }")
cpp_quote("};" )
cpp_quote("#endif" )

typedef struct D3D11_BUFFER_DESC
{
    UINT ByteWidth;
    D3D11_USAGE Usage;
    UINT BindFlags;
    UINT CPUAccessFlags;
    UINT MiscFlags;
    UINT StructureByteStride;
} D3D11_BUFFER_DESC;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("struct CD3D11_BUFFER_DESC : public D3D11_BUFFER_DESC {")
cpp_quote("    CD3D11_BUFFER_DESC() {}" )
cpp_quote("    explicit CD3D11_BUFFER_DESC(const D3D11_BUFFER_DESC &o) : D3D11_BUFFER_DESC(o) {}")
cpp_quote("    explicit CD3D11_BUFFER_DESC(UINT byteWidth,UINT bindFlags,")
cpp_quote("            D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0,")
cpp_quote("            UINT miscFlags = 0, UINT structureByteStride = 0 ) {")
cpp_quote("        ByteWidth = byteWidth;")
cpp_quote("        Usage = usage;")
cpp_quote("        BindFlags = bindFlags;")
cpp_quote("        CPUAccessFlags = cpuaccessFlags;")
cpp_quote("        MiscFlags = miscFlags;" )
cpp_quote("        StructureByteStride = structureByteStride;")
cpp_quote("    }")
cpp_quote("    ~CD3D11_BUFFER_DESC() {}")
cpp_quote("    operator const D3D11_BUFFER_DESC&() const { return *this; }")
cpp_quote("};" )
cpp_quote("#endif" )

typedef struct D3D11_DEPTH_STENCIL_VIEW_DESC
{
    DXGI_FORMAT Format;
    D3D11_DSV_DIMENSION ViewDimension;
    UINT Flags;

    union
    {
        D3D11_TEX1D_DSV Texture1D;
        D3D11_TEX1D_ARRAY_DSV Texture1DArray;
        D3D11_TEX2D_DSV Texture2D;
        D3D11_TEX2D_ARRAY_DSV Texture2DArray;
        D3D11_TEX2DMS_DSV Texture2DMS;
        D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray;
    };
} D3D11_DEPTH_STENCIL_VIEW_DESC;

typedef struct D3D11_DEPTH_STENCILOP_DESC
{
    D3D11_STENCIL_OP StencilFailOp;
    D3D11_STENCIL_OP StencilDepthFailOp;
    D3D11_STENCIL_OP StencilPassOp;
    D3D11_COMPARISON_FUNC StencilFunc;
} D3D11_DEPTH_STENCILOP_DESC;

typedef struct D3D11_DEPTH_STENCIL_DESC
{
    BOOL DepthEnable;
    D3D11_DEPTH_WRITE_MASK DepthWriteMask;
    D3D11_COMPARISON_FUNC DepthFunc;
    BOOL StencilEnable;
    UINT8 StencilReadMask;
    UINT8 StencilWriteMask;
    D3D11_DEPTH_STENCILOP_DESC FrontFace;
    D3D11_DEPTH_STENCILOP_DESC BackFace;
} D3D11_DEPTH_STENCIL_DESC;

cpp_quote("#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )")
cpp_quote("struct CD3D11_DEPTH_STENCIL_DESC : public D3D11_DEPTH_STENCIL_DESC {")
cpp_quote("    CD3D11_DEPTH_STENCIL_DESC() {}")
cpp_quote("    explicit CD3D11_DEPTH_STENCIL_DESC(const D3D11_DEPTH_STENCIL_DESC &other) : D3D11_DEPTH_STENCIL_DESC(other) {}")
cpp_quote("    explicit CD3D11_DEPTH_STENCIL_DESC(CD3D11_DEFAULT) {")
cpp_quote("        const D3D11_DEPTH_STENCILOP_DESC default_op =")
cpp_quote("            {D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_COMPARISON_ALWAYS};")
cpp_quote("        DepthEnable = TRUE;")
cpp_quote("        DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;")
cpp_quote("        DepthFunc = D3D11_COMPARISON_LESS;")
cpp_quote("        StencilEnable = FALSE;")
cpp_quote("        StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;")
cpp_quote("        StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;")
cpp_quote("        FrontFace = default_op;")
cpp_quote("        BackFace = default_op;")
cpp_quote("    }")
cpp_quote("    explicit CD3D11_DEPTH_STENCIL_DESC(")
cpp_quote("            WINBOOL depth_enable,")
cpp_quote("            D3D11_DEPTH_WRITE_MASK depth_write_mask,")
cpp_quote("            D3D11_COMPARISON_FUNC depth_func,")
cpp_quote("            WINBOOL stencil_enable,")
cpp_quote("            UINT8 stencil_read_mask,")
cpp_quote("            UINT8 stencil_write_mask,")
cpp_quote("            D3D11_STENCIL_OP front_stencil_fail_op,")
cpp_quote("            D3D11_STENCIL_OP front_stencil_depth_fail_op,")
cpp_quote("            D3D11_STENCIL_OP front_stencil_pass_op,")
cpp_quote("            D3D11_COMPARISON_FUNC front_stencil_func,")
cpp_quote("            D3D11_STENCIL_OP back_stencil_fail_op,")
cpp_quote("            D3D11_STENCIL_OP back_stencil_depth_fail_op,")
cpp_quote("            D3D11_STENCIL_OP back_stencil_pass_op,")
cpp_quote("            D3D11_COMPARISON_FUNC back_stencil_func) {")
cpp_quote("        DepthEnable = depth_enable;")
cpp_quote("        DepthWriteMask = depth_write_mask;")
cpp_quote("        DepthFunc = depth_func;")
cpp_quote("        StencilEnable = stencil_enable;")
cpp_quote("        StencilReadMask = stencil_read_mask;")
cpp_quote("        StencilWriteMask = stencil_write_mask;")
cpp_quote("        FrontFace.StencilFailOp = front_stencil_fail_op;")
cpp_quote("        FrontFace.StencilDepthFailOp = front_stencil_depth_fail_op;")
cpp_quote("        FrontFace.StencilPassOp = front_stencil_pass_op;")
cpp_quote("        FrontFace.StencilFunc = front_stencil_func;")
cpp_quote("        BackFace.StencilFailOp = back_stencil_fail_op;")
cpp_quote("        BackFace.StencilDepthFailOp = back_stencil_depth_fail_op;")
cpp_quote("        BackFace.StencilPassOp = back_stencil_pass_op;")
cpp_quote("        BackFace.StencilFunc = back_stencil_func;")
cpp_quote("    }")
cpp_quote("    ~CD3D11_DEPTH_STENCIL_DESC() {}")
cpp_quote("    operator const D3D11_DEPTH_STENCIL_DESC&() const { return *this; }")
cpp_quote("};")
cpp_quote("#endif")

typedef struct D3D11_RENDER_TARGET_VIEW_DESC
{
    DXGI_FORMAT Format;
    D3D11_RTV_DIMENSION ViewDimension;

    union
    {
        D3D11_BUFFER_RTV Buffer;
        D3D11_TEX1D_RTV Texture1D;
        D3D11_TEX1D_ARRAY_RTV Texture1DArray;
        D3D11_TEX2D_RTV Texture2D;
        D3D11_TEX2D_ARRAY_RTV Texture2DArray;
        D3D11_TEX2DMS_RTV Texture2DMS;
        D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray;
        D3D11_TEX3D_RTV Texture3D;
    };
} D3D11_RENDER_TARGET_VIEW_DESC;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("struct CD3D11_RENDER_TARGET_VIEW_DESC : public D3D11_RENDER_TARGET_VIEW_DESC {")
cpp_quote("    CD3D11_RENDER_TARGET_VIEW_DESC() {}")
cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(D3D11_RTV_DIMENSION dim, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,")
cpp_quote("            UINT mip_slice = 0, UINT first_slice = 0, UINT array_size = -1) {")
cpp_quote("        Format = format;")
cpp_quote("        ViewDimension = dim;")
cpp_quote("        switch(dim) {")
cpp_quote("        case D3D11_RTV_DIMENSION_BUFFER:")
cpp_quote("            Buffer.FirstElement = mip_slice;")
cpp_quote("            Buffer.NumElements = first_slice;")
cpp_quote("            break;")
cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE1D:")
cpp_quote("            Texture1D.MipSlice = mip_slice;")
cpp_quote("            break;")
cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:")
cpp_quote("            Texture1DArray.MipSlice = mip_slice;")
cpp_quote("            Texture1DArray.FirstArraySlice = first_slice;")
cpp_quote("            Texture1DArray.ArraySize = array_size;")
cpp_quote("            break;")
cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE2D:")
cpp_quote("            Texture2D.MipSlice = mip_slice;")
cpp_quote("            break;")
cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:")
cpp_quote("            Texture2DArray.MipSlice = mip_slice;")
cpp_quote("            Texture2DArray.FirstArraySlice = first_slice;")
cpp_quote("            Texture2DArray.ArraySize = array_size;")
cpp_quote("            break;")
cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:")
cpp_quote("            Texture2DMSArray.FirstArraySlice = first_slice;")
cpp_quote("            Texture2DMSArray.ArraySize = array_size;")
cpp_quote("            break;")
cpp_quote("        case D3D11_RTV_DIMENSION_TEXTURE3D:")
cpp_quote("            Texture3D.MipSlice = mip_slice;")
cpp_quote("            Texture3D.FirstWSlice = first_slice;")
cpp_quote("            Texture3D.WSize = array_size;")
cpp_quote("            break;")
cpp_quote("        default:")
cpp_quote("            break;")
cpp_quote("        }")
cpp_quote("    }")
cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,")
cpp_quote("            UINT elem_cnt) {")
cpp_quote("        Format = format;")
cpp_quote("        ViewDimension = D3D11_RTV_DIMENSION_BUFFER;")
cpp_quote("        Buffer.FirstElement = first_elem;")
cpp_quote("        Buffer.NumElements = elem_cnt;")
cpp_quote("    }")
cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture1D *texture, D3D11_RTV_DIMENSION dim,")
cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,")
cpp_quote("            UINT array_size = -1);") /* FIXME: implement */
cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture2D *texture, D3D11_RTV_DIMENSION dim,")
cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT mip_slice = 0, UINT first_slice = 0,")
cpp_quote("            UINT array_size = -1);") /* FIXME: implement */
cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,")
cpp_quote("            UINT mip_slice = 0, UINT first_w_slice = 0, UINT w_slice = -1 );") /* FIXME: implement */
cpp_quote("    ~CD3D11_RENDER_TARGET_VIEW_DESC() {}")
cpp_quote("    explicit CD3D11_RENDER_TARGET_VIEW_DESC(const D3D11_RENDER_TARGET_VIEW_DESC &other)")
cpp_quote("        : D3D11_RENDER_TARGET_VIEW_DESC(other) {}")
cpp_quote("    operator const D3D11_RENDER_TARGET_VIEW_DESC&() const {")
cpp_quote("        return *this;")
cpp_quote("    }")
cpp_quote("};")
cpp_quote("#endif")


typedef struct D3D11_SAMPLER_DESC
{
    D3D11_FILTER Filter;
    D3D11_TEXTURE_ADDRESS_MODE AddressU;
    D3D11_TEXTURE_ADDRESS_MODE AddressV;
    D3D11_TEXTURE_ADDRESS_MODE AddressW;
    FLOAT MipLODBias;
    UINT MaxAnisotropy;
    D3D11_COMPARISON_FUNC ComparisonFunc;
    FLOAT BorderColor[4];
    FLOAT MinLOD;
    FLOAT MaxLOD;
} D3D11_SAMPLER_DESC;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("struct CD3D11_SAMPLER_DESC : public D3D11_SAMPLER_DESC {")
cpp_quote("    CD3D11_SAMPLER_DESC() {}")
cpp_quote("    explicit CD3D11_SAMPLER_DESC(const D3D11_SAMPLER_DESC &o) : D3D11_SAMPLER_DESC(o) {}")
cpp_quote("    explicit CD3D11_SAMPLER_DESC(CD3D11_DEFAULT) {" )
cpp_quote("        Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;")
cpp_quote("        AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;")
cpp_quote("        AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;")
cpp_quote("        AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;")
cpp_quote("        MipLODBias = 0;")
cpp_quote("        MaxAnisotropy = 1;")
cpp_quote("        ComparisonFunc = D3D11_COMPARISON_NEVER;")
cpp_quote("        BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;")
cpp_quote("        MinLOD = -3.402823466e+38f;")
cpp_quote("        MaxLOD = 3.402823466e+38f;")
cpp_quote("    }")
cpp_quote("    explicit CD3D11_SAMPLER_DESC(D3D11_FILTER filter, D3D11_TEXTURE_ADDRESS_MODE addressU,")
cpp_quote("            D3D11_TEXTURE_ADDRESS_MODE addressV, D3D11_TEXTURE_ADDRESS_MODE addressW,")
cpp_quote("            FLOAT mipLODBias, UINT maxAnisotropy, D3D11_COMPARISON_FUNC comparisonFunc,")
cpp_quote("            const FLOAT *borderColor, FLOAT minLOD, FLOAT maxLOD) {" )
cpp_quote("        Filter = filter;")
cpp_quote("        AddressU = addressU;")
cpp_quote("        AddressV = addressV;")
cpp_quote("        AddressW = addressW;")
cpp_quote("        MipLODBias = mipLODBias;")
cpp_quote("        MaxAnisotropy = maxAnisotropy;")
cpp_quote("        ComparisonFunc = comparisonFunc;")
cpp_quote("        if(borderColor) {")
cpp_quote("            BorderColor[0] = borderColor[0];")
cpp_quote("            BorderColor[1] = borderColor[1];")
cpp_quote("            BorderColor[2] = borderColor[2];")
cpp_quote("            BorderColor[3] = borderColor[3];")
cpp_quote("        }else {")
cpp_quote("            BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;")
cpp_quote("        }")
cpp_quote("        MinLOD = minLOD;")
cpp_quote("        MaxLOD = maxLOD;")
cpp_quote("    }")
cpp_quote("    ~CD3D11_SAMPLER_DESC() {}")
cpp_quote("    operator const D3D11_SAMPLER_DESC&() const { return *this; }")
cpp_quote("};")
cpp_quote("#endif")

typedef struct D3D11_SHADER_RESOURCE_VIEW_DESC
{
    DXGI_FORMAT Format;
    D3D11_SRV_DIMENSION ViewDimension;

    union
    {
        D3D11_BUFFER_SRV Buffer;
        D3D11_TEX1D_SRV Texture1D;
        D3D11_TEX1D_ARRAY_SRV Texture1DArray;
        D3D11_TEX2D_SRV Texture2D;
        D3D11_TEX2D_ARRAY_SRV Texture2DArray;
        D3D11_TEX2DMS_SRV Texture2DMS;
        D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray;
        D3D11_TEX3D_SRV Texture3D;
        D3D11_TEXCUBE_SRV TextureCube;
        D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray;
        D3D11_BUFFEREX_SRV BufferEx;
    };
} D3D11_SHADER_RESOURCE_VIEW_DESC;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined( __cplusplus )")
cpp_quote("struct CD3D11_SHADER_RESOURCE_VIEW_DESC : public D3D11_SHADER_RESOURCE_VIEW_DESC {")
cpp_quote("    CD3D11_SHADER_RESOURCE_VIEW_DESC() {}")
cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(D3D11_SRV_DIMENSION dim,")
cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0,")
cpp_quote("            UINT mip_levels = -1, UINT first_slice = 0, UINT array_size = -1, UINT flags = 0) {")
cpp_quote("        Format = format;")
cpp_quote("        ViewDimension = dim;")
cpp_quote("        switch(ViewDimension) {")
cpp_quote("        case D3D11_SRV_DIMENSION_BUFFER:")
cpp_quote("            Buffer.FirstElement = most_detailed_mip;")
cpp_quote("            Buffer.NumElements = mip_levels;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE1D:")
cpp_quote("            Texture1D.MostDetailedMip = most_detailed_mip;")
cpp_quote("            Texture1D.MipLevels = mip_levels;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE1DARRAY:")
cpp_quote("            Texture1DArray.MostDetailedMip = most_detailed_mip;")
cpp_quote("            Texture1DArray.MipLevels = mip_levels;")
cpp_quote("            Texture1DArray.FirstArraySlice = first_slice;")
cpp_quote("            Texture1DArray.ArraySize = array_size;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE2D:")
cpp_quote("            Texture2D.MostDetailedMip = most_detailed_mip;")
cpp_quote("            Texture2D.MipLevels = mip_levels;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:")
cpp_quote("            Texture2DArray.MostDetailedMip = most_detailed_mip;")
cpp_quote("            Texture2DArray.MipLevels = mip_levels;")
cpp_quote("            Texture2DArray.FirstArraySlice = first_slice;")
cpp_quote("            Texture2DArray.ArraySize = array_size;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:")
cpp_quote("            Texture2DMSArray.FirstArraySlice = first_slice;")
cpp_quote("            Texture2DMSArray.ArraySize = array_size;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURE3D:")
cpp_quote("            Texture3D.MostDetailedMip = most_detailed_mip;")
cpp_quote("            Texture3D.MipLevels = mip_levels;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURECUBE:")
cpp_quote("            TextureCube.MostDetailedMip = most_detailed_mip;")
cpp_quote("            TextureCube.MipLevels = mip_levels;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY:")
cpp_quote("            TextureCubeArray.MostDetailedMip = most_detailed_mip;")
cpp_quote("            TextureCubeArray.MipLevels = mip_levels;")
cpp_quote("            TextureCubeArray.First2DArrayFace = first_slice;")
cpp_quote("            TextureCubeArray.NumCubes = array_size;")
cpp_quote("            break;")
cpp_quote("        case D3D11_SRV_DIMENSION_BUFFEREX:")
cpp_quote("            BufferEx.FirstElement = most_detailed_mip;")
cpp_quote("            BufferEx.NumElements = mip_levels;")
cpp_quote("            BufferEx.Flags = flags;")
cpp_quote("            break;")
cpp_quote("        default:")
cpp_quote("            break;")
cpp_quote("        }")
cpp_quote("    }")
cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Buffer*, DXGI_FORMAT format, UINT first_elem,")
cpp_quote("            UINT elem_cnt, UINT flags = 0);") /* FIXME: implement */
cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture1D *texture, D3D11_SRV_DIMENSION dim,")
cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,")
cpp_quote("            UINT first_slice = 0, UINT array_size = -1 );") /* FIXME: implement */
cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture2D *texture, D3D11_SRV_DIMENSION dim,")
cpp_quote("            DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN, UINT most_detailed_mip = 0, UINT mip_levels = -1,")
cpp_quote("            UINT first_slice = 0, UINT array_size = -1 );") /* FIXME: implement */
cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(ID3D11Texture3D *texture, DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,")
cpp_quote("            UINT most_detailed_mip = 0, UINT mip_levels = -1 );")
cpp_quote("    ~CD3D11_SHADER_RESOURCE_VIEW_DESC() {}")
cpp_quote("    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(const D3D11_SHADER_RESOURCE_VIEW_DESC &other)")
cpp_quote("        : D3D11_SHADER_RESOURCE_VIEW_DESC(other) {}")
cpp_quote("    operator const D3D11_SHADER_RESOURCE_VIEW_DESC&() const {")
cpp_quote("        return *this;")
cpp_quote("    }")
cpp_quote("};")
cpp_quote("#endif")

typedef struct D3D11_TEXTURE1D_DESC
{
    UINT Width;
    UINT MipLevels;
    UINT ArraySize;
    DXGI_FORMAT Format;
    D3D11_USAGE Usage;
    UINT BindFlags;
    UINT CPUAccessFlags;
    UINT MiscFlags;
} D3D11_TEXTURE1D_DESC;

typedef struct D3D11_TEXTURE2D_DESC
{
    UINT Width;
    UINT Height;
    UINT MipLevels;
    UINT ArraySize;
    DXGI_FORMAT Format;
    DXGI_SAMPLE_DESC SampleDesc;
    D3D11_USAGE Usage;
    UINT BindFlags;
    UINT CPUAccessFlags;
    UINT MiscFlags;
} D3D11_TEXTURE2D_DESC;

cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
cpp_quote("struct CD3D11_TEXTURE2D_DESC : public D3D11_TEXTURE2D_DESC {")
cpp_quote("    CD3D11_TEXTURE2D_DESC() {}")
cpp_quote("    explicit CD3D11_TEXTURE2D_DESC(const D3D11_TEXTURE2D_DESC &o) : D3D11_TEXTURE2D_DESC(o) {}")
cpp_quote("    explicit CD3D11_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height, UINT arraySize = 1,")
cpp_quote("            UINT mipLevels = 0, UINT bindFlags = D3D11_BIND_SHADER_RESOURCE,")
cpp_quote("            D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT sampleCount = 1," )
cpp_quote("            UINT sampleQuality = 0, UINT miscFlags = 0) {")
cpp_quote("        Width = width;")
cpp_quote("        Height = height;")
cpp_quote("        MipLevels = mipLevels;")
cpp_quote("        ArraySize = arraySize;")
cpp_quote("        Format = format;")
cpp_quote("        SampleDesc.Count = sampleCount;")
cpp_quote("        SampleDesc.Quality = sampleQuality;")
cpp_quote("        Usage = usage;")
cpp_quote("        BindFlags = bindFlags;")
cpp_quote("        CPUAccessFlags = cpuaccessFlags;")
cpp_quote("        MiscFlags = miscFlags;")
cpp_quote("    }" )
cpp_quote("    ~CD3D11_TEXTURE2D_DESC() {}")
cpp_quote("    operator const D3D11_TEXTURE2D_DESC&() const { return *this; }")
cpp_quote("};")
cpp_quote("#endif")

typedef struct D3D11_TEXTURE3D_DESC
{
    UINT Width;
    UINT Height;
    UINT Depth;
    UINT MipLevels;
    DXGI_FORMAT Format;
    D3D11_USAGE Usage;
    UINT BindFlags;
    UINT CPUAccessFlags;
    UINT MiscFlags;
} D3D11_TEXTURE3D_DESC;

typedef struct D3D11_VIDEO_DECODER_DESC
{
    GUID Guid;
    UINT SampleWidth;
    UINT SampleHeight;
    DXGI_FORMAT OutputFormat;
} D3D11_VIDEO_DECODER_DESC;

typedef struct D3D11_VIDEO_DECODER_CONFIG
{
    GUID guidConfigBitstreamEncryption;
    GUID guidConfigMBcontrolEncryption;
    GUID guidConfigResidDiffEncryption;
    UINT ConfigBitstreamRaw;
    UINT ConfigMBcontrolRasterOrder;
    UINT ConfigResidDiffHost;
    UINT ConfigSpatialResid8;
    UINT ConfigResid8Subtraction;
    UINT ConfigSpatialHost8or9Clipping;
    UINT ConfigSpatialResidInterleaved;
    UINT ConfigIntraResidUnsigned;
    UINT ConfigResidDiffAccelerator;
    UINT ConfigHostInverseScan;
    UINT ConfigSpecificIDCT;
    UINT Config4GroupedCoefs;
    USHORT ConfigMinRenderTargetBuffCount;
    USHORT ConfigDecoderSpecific;
} D3D11_VIDEO_DECODER_CONFIG;

typedef enum D3D11_VIDEO_FRAME_FORMAT
{
    D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE                   = 0,
    D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST    = 1,
    D3D11_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST = 2
} D3D11_VIDEO_FRAME_FORMAT;

typedef enum D3D11_VIDEO_USAGE
{
    D3D11_VIDEO_USAGE_PLAYBACK_NORMAL = 0,
    D3D11_VIDEO_USAGE_OPTIMAL_SPEED   = 1,
    D3D11_VIDEO_USAGE_OPTIMAL_QUALITY = 2
} D3D11_VIDEO_USAGE;

typedef struct D3D11_VIDEO_PROCESSOR_CONTENT_DESC
{
    D3D11_VIDEO_FRAME_FORMAT InputFrameFormat;
    DXGI_RATIONAL InputFrameRate;
    UINT InputWidth;
    UINT InputHeight;
    DXGI_RATIONAL OutputFrameRate;
    UINT OutputWidth;
    UINT OutputHeight;
    D3D11_VIDEO_USAGE Usage;
} D3D11_VIDEO_PROCESSOR_CONTENT_DESC;

typedef struct D3D11_VIDEO_PROCESSOR_CAPS
{
    UINT DeviceCaps;
    UINT FeatureCaps;
    UINT FilterCaps;
    UINT InputFormatCaps;
    UINT AutoStreamCaps;
    UINT StereoCaps;
    UINT RateConversionCapsCount;
    UINT MaxInputStreams;
    UINT MaxStreamStates;
} D3D11_VIDEO_PROCESSOR_CAPS;

typedef struct D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS
{
    UINT PastFrames;
    UINT FutureFrames;
    UINT ProcessorCaps;
    UINT ITelecineCaps;
    UINT CustomRateCount;
} D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS;

typedef struct D3D11_VIDEO_PROCESSOR_CUSTOM_RATE
{
    DXGI_RATIONAL CustomRate;
    UINT OutputFrames;
    BOOL InputInterlaced;
    UINT InputFramesOrFields;
} D3D11_VIDEO_PROCESSOR_CUSTOM_RATE;

typedef enum D3D11_VIDEO_PROCESSOR_FILTER
{
    D3D11_VIDEO_PROCESSOR_FILTER_BRIGHTNESS         = 0,
    D3D11_VIDEO_PROCESSOR_FILTER_CONTRAST           = 1,
    D3D11_VIDEO_PROCESSOR_FILTER_HUE                = 2,
    D3D11_VIDEO_PROCESSOR_FILTER_SATURATION         = 3,
    D3D11_VIDEO_PROCESSOR_FILTER_NOISE_REDUCTION    = 4,
    D3D11_VIDEO_PROCESSOR_FILTER_EDGE_ENHANCEMENT   = 5,
    D3D11_VIDEO_PROCESSOR_FILTER_ANAMORPHIC_SCALING = 6,
    D3D11_VIDEO_PROCESSOR_FILTER_STEREO_ADJUSTMENT  = 7
} D3D11_VIDEO_PROCESSOR_FILTER;

typedef struct D3D11_VIDEO_PROCESSOR_FILTER_RANGE
{
    int Minimum;
    int Maximum;
    int Default;
    float Multiplier;
} D3D11_VIDEO_PROCESSOR_FILTER_RANGE;

typedef enum D3D11_AUTHENTICATED_CHANNEL_TYPE
{
    D3D11_AUTHENTICATED_CHANNEL_D3D11           = 1,
    D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE = 2,
    D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE = 3
} D3D11_AUTHENTICATED_CHANNEL_TYPE;

typedef enum D3D11_VDOV_DIMENSION
{
    D3D11_VDOV_DIMENSION_UNKNOWN   = 0,
    D3D11_VDOV_DIMENSION_TEXTURE2D = 1
} D3D11_VDOV_DIMENSION;

typedef struct D3D11_TEX2D_VDOV
{
    UINT ArraySlice;
} D3D11_TEX2D_VDOV;

typedef struct D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC
{
    GUID DecodeProfile;
    D3D11_VDOV_DIMENSION ViewDimension;
    union {
        D3D11_TEX2D_VDOV Texture2D;
    };
} D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC;

typedef enum D3D11_VPIV_DIMENSION
{
    D3D11_VPIV_DIMENSION_UNKNOWN   = 0,
    D3D11_VPIV_DIMENSION_TEXTURE2D = 1
} D3D11_VPIV_DIMENSION;

typedef struct D3D11_TEX2D_VPIV
{
    UINT MipSlice;
    UINT ArraySlice;
} D3D11_TEX2D_VPIV;

typedef struct D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC
{
    UINT FourCC;
    D3D11_VPIV_DIMENSION ViewDimension;
    union {
        D3D11_TEX2D_VPIV Texture2D;
    };
} D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC;

typedef enum D3D11_VPOV_DIMENSION
{
    D3D11_VPOV_DIMENSION_UNKNOWN        = 0,
    D3D11_VPOV_DIMENSION_TEXTURE2D      = 1,
    D3D11_VPOV_DIMENSION_TEXTURE2DARRAY = 2
} D3D11_VPOV_DIMENSION;

typedef struct D3D11_TEX2D_VPOV
{
    UINT MipSlice;
} D3D11_TEX2D_VPOV;

typedef struct D3D11_TEX2D_ARRAY_VPOV
{
    UINT MipSlice;
    UINT FirstArraySlice;
    UINT ArraySize;
} D3D11_TEX2D_ARRAY_VPOV;

typedef struct D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC
{
    D3D11_VPOV_DIMENSION ViewDimension;
    union {
        D3D11_TEX2D_VPOV Texture2D;
        D3D11_TEX2D_ARRAY_VPOV Texture2DArray;
    };
} D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC;

typedef struct D3D11_VIDEO_CONTENT_PROTECTION_CAPS
{
    UINT Caps;
    UINT KeyExchangeTypeCount;
    UINT BlockAlignmentSize;
    ULONGLONG ProtectedMemorySize;
} D3D11_VIDEO_CONTENT_PROTECTION_CAPS;

typedef struct D3D11_ENCRYPTED_BLOCK_INFO
{
    UINT NumEncryptedBytesAtBeginning;
    UINT NumBytesInSkipPattern;
    UINT NumBytesInEncryptPattern;
} D3D11_ENCRYPTED_BLOCK_INFO;

typedef struct D3D11_VIDEO_DECODER_BUFFER_DESC
{
    D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType;
    UINT BufferIndex;
    UINT DataOffset;
    UINT DataSize;
    UINT FirstMBaddress;
    UINT NumMBsInBuffer;
    UINT Width;
    UINT Height;
    UINT Stride;
    UINT ReservedBits;
    void *pIV;
    UINT IVSize;
    BOOL PartialEncryption;
    D3D11_ENCRYPTED_BLOCK_INFO EncryptedBlockInfo;
} D3D11_VIDEO_DECODER_BUFFER_DESC;

typedef struct D3D11_VIDEO_DECODER_EXTENSION
{
    UINT Function;
    void *pPrivateInputData;
    UINT PrivateInputDataSize;
    void *pPrivateOutputData;
    UINT PrivateOutputDataSize;
    UINT ResourceCount;
    ID3D11Resource **ppResourceList;
} D3D11_VIDEO_DECODER_EXTENSION;

typedef struct D3D11_VIDEO_COLOR_YCbCrA
{
    float Y;
    float Cb;
    float Cr;
    float A;
} D3D11_VIDEO_COLOR_YCbCrA;

typedef struct D3D11_VIDEO_COLOR_RGBA
{
    float R;
    float G;
    float B;
    float A;
} D3D11_VIDEO_COLOR_RGBA;

typedef struct D3D11_VIDEO_COLOR
{
    union
    {
        D3D11_VIDEO_COLOR_YCbCrA YCbCr;
        D3D11_VIDEO_COLOR_RGBA RGBA;
    };
} D3D11_VIDEO_COLOR;

typedef struct D3D11_VIDEO_PROCESSOR_COLOR_SPACE
{
    UINT Usage : 1;
    UINT RGB_Range : 1;
    UINT YCbCr_Matrix : 1;
    UINT YCbCr_xvYCC : 1;
    UINT Nominal_Range : 2;
    UINT Reserved : 26;
} D3D11_VIDEO_PROCESSOR_COLOR_SPACE;

typedef struct D3D11_VIDEO_PROCESSOR_STREAM
{
    BOOL Enable;
    UINT OutputIndex;
    UINT InputFrameOrField;
    UINT PastFrames;
    UINT FutureFrames;
    ID3D11VideoProcessorInputView **ppPastSurfaces;
    ID3D11VideoProcessorInputView *pInputSurface;
    ID3D11VideoProcessorInputView **ppFutureSurfaces;
    ID3D11VideoProcessorInputView **ppPastSurfacesRight;
    ID3D11VideoProcessorInputView *pInputSurfaceRight;
    ID3D11VideoProcessorInputView **ppFutureSurfacesRight;
} D3D11_VIDEO_PROCESSOR_STREAM;

typedef struct D3D11_OMAC
{
      BYTE Omac[D3D11_OMAC_SIZE];
} D3D11_OMAC;

typedef struct D3D11_AUTHENTICATED_CONFIGURE_OUTPUT
{
    D3D11_OMAC omac;
    GUID ConfigureType;
    HANDLE hChannel;
    UINT SequenceNumber;
    HRESULT ReturnCode;
} D3D11_AUTHENTICATED_CONFIGURE_OUTPUT;

typedef struct D3D11_QUERY_DATA_TIMESTAMP_DISJOINT
{
    UINT64 Frequency;
    BOOL Disjoint;
} D3D11_QUERY_DATA_TIMESTAMP_DISJOINT;

typedef struct D3D11_QUERY_DATA_PIPELINE_STATISTICS
{
    UINT64 IAVertices;
    UINT64 IAPrimitives;
    UINT64 VSInvocations;
    UINT64 GSInvocations;
    UINT64 GSPrimitives;
    UINT64 CInvocations;
    UINT64 CPrimitives;
    UINT64 PSInvocations;
    UINT64 HSInvocations;
    UINT64 DSInvocations;
    UINT64 CSInvocations;
} D3D11_QUERY_DATA_PIPELINE_STATISTICS;

typedef struct D3D11_DRAW_INSTANCED_INDIRECT_ARGS
{
    UINT VertexCountPerInstance;
    UINT InstanceCount;
    UINT StartVertexLocation;
    UINT StartInstanceLocation;
} D3D11_DRAW_INSTANCED_INDIRECT_ARGS;

typedef struct D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS
{
    UINT IndexCountPerInstance;
    UINT InstanceCount;
    UINT StartIndexLocation;
    INT BaseVertexLocation;
    UINT StartInstanceLocation;
} D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS;

typedef struct D3D11_AUTHENTICATED_CONFIGURE_INPUT
{
    D3D11_OMAC omac;
    GUID ConfigureType;
    HANDLE hChannel;
    UINT SequenceNumber;
} D3D11_AUTHENTICATED_CONFIGURE_INPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_INPUT
{
    GUID QueryType;
    HANDLE hChannel;
    UINT SequenceNumber;
} D3D11_AUTHENTICATED_QUERY_INPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT
{
    D3D11_OMAC omac;
    GUID QueryType;
    HANDLE hChannel;
    UINT SequenceNumber;
    HRESULT ReturnCode;
} D3D11_AUTHENTICATED_QUERY_OUTPUT;

typedef union D3D11_AUTHENTICATED_PROTECTION_FLAGS
{
    struct
    {
        UINT ProtectionEnabled              : 1;
        UINT OverlayOrFullscreenRequired    : 1;
        UINT Reserved                       : 30;
    } Flags;
    UINT Value;
} D3D11_AUTHENTICATED_PROTECTION_FLAGS;

typedef struct D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    D3D11_AUTHENTICATED_PROTECTION_FLAGS ProtectionFlags;
} D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType;
} D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    HANDLE DeviceHandle;
} D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT
{
    D3D11_AUTHENTICATED_QUERY_INPUT Input;
    HANDLE DecoderHandle;
} D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    HANDLE DecoderHandle;
    HANDLE CryptoSessionHandle;
    HANDLE DeviceHandle;
} D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    UINT RestrictedSharedResourceProcessCount;
} D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT
{
    D3D11_AUTHENTICATED_QUERY_INPUT Input;
    UINT ProcessIndex;
} D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    UINT ProcessIndex;
    D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessIdentifier;
    HANDLE ProcessHandle;
} D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    UINT UnrestrictedProtectedSharedResourceCount;
} D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT
{
    D3D11_AUTHENTICATED_QUERY_INPUT Input;
    HANDLE DeviceHandle;
    HANDLE CryptoSessionHandle;
} D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    HANDLE DeviceHandle;
    HANDLE CryptoSessionHandle;
    UINT OutputIDCount;
} D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT
{
    D3D11_AUTHENTICATED_QUERY_INPUT Input;
    HANDLE DeviceHandle;
    HANDLE CryptoSessionHandle;
    UINT OutputIDIndex;
} D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    HANDLE DeviceHandle;
    HANDLE CryptoSessionHandle;
    UINT OutputIDIndex;
    UINT64 OutputID;
} D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_ACESSIBILITY_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    D3D11_BUS_TYPE BusType;
    BOOL AccessibleInContiguousBlocks;
    BOOL AccessibleInNonContiguousBlocks;
} D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    UINT EncryptionGuidCount;
} D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT
{
    D3D11_AUTHENTICATED_QUERY_INPUT Input;
    UINT EncryptionGuidIndex;
} D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    UINT EncryptionGuidIndex;
    GUID EncryptionGuid;
} D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT;

typedef struct D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT
{
    D3D11_AUTHENTICATED_QUERY_OUTPUT Output;
    GUID EncryptionGuid;
} D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT;

typedef struct D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT
{
    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;
    UINT StartSequenceQuery;
    UINT StartSequenceConfigure;
} D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT;

typedef struct D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT
{
    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;
    D3D11_AUTHENTICATED_PROTECTION_FLAGS Protections;
} D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT;

typedef struct D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT
{
    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;
    HANDLE DecoderHandle;
    HANDLE CryptoSessionHandle;
    HANDLE DeviceHandle;
} D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT;

typedef struct D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT
{
    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;
    D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessType;
    HANDLE ProcessHandle;
    BOOL AllowAccess;
} D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT;

typedef struct D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT
{
    D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters;
    GUID EncryptionGuid;
} D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT;

[
    object,
    local,
    uuid(1841e5c8-16b0-489b-bcc8-44cfb0d5deae)
]
interface ID3D11DeviceChild : IUnknown
{
    void GetDevice(
        [out] ID3D11Device **ppDevice);
    HRESULT GetPrivateData(
        [in] REFGUID guid,
        [in, out] UINT *pDataSize,
        [out] void *pData);
    HRESULT SetPrivateData(
        [in] REFGUID guid,
        [in] UINT DataSize,
        [in] const void *pData);
    HRESULT SetPrivateDataInterface(
        [in] REFGUID guid,
        [in] const IUnknown *pData);
}

[
    object,
    local,
    uuid(4b35d0cd-1e15-4258-9c98-1b1333f6dd3b)
]
interface ID3D11Asynchronous : ID3D11DeviceChild
{
    UINT GetDataSize();
}

[
    object,
    local,
    uuid(d6c00747-87b7-425e-b84d-44d108560afd)
]
interface ID3D11Query : ID3D11Asynchronous
{
    void GetDesc(
        [out] D3D11_QUERY_DESC *pDesc);
}

[
    object,
    local,
    uuid(dc8e63f3-d12b-4952-b47b-5e45026a862d)
]
interface ID3D11Resource : ID3D11DeviceChild
{
    void GetType(
        [out] D3D11_RESOURCE_DIMENSION *pResourceDimension);
    void SetEvictionPriority(
        [in] UINT EvictionPriority);
    UINT GetEvictionPriority();
}

[
    object,
    local,
    uuid(839d1216-bb2e-412b-b7f4-a9dbebe08ed1)
]
interface ID3D11View : ID3D11DeviceChild
{
    void GetResource(
        [out] ID3D11Resource **ppResource);
}

[
    object,
    local,
    uuid(75b68faa-347d-4159-8f45-a0640f01cd9a)
]
interface ID3D11BlendState : ID3D11DeviceChild
{
    void GetDesc(
        [out] D3D11_BLEND_DESC *pDesc);
}

[
    object,
    local,
    uuid(48570b85-d1ee-4fcd-a250-eb350722b037)
]
interface ID3D11Buffer : ID3D11Resource
{
    void GetDesc(
        [out] D3D11_BUFFER_DESC *pDesc);
}

[
    object,
    local,
    uuid(a6cd7faa-b0b7-4a2f-9436-8662a65797cb)
]
interface ID3D11ClassInstance : ID3D11DeviceChild
{
    void GetClassLinkage(
        [out] ID3D11ClassLinkage **ppLinkage);
    void GetDesc(
        [out] D3D11_CLASS_INSTANCE_DESC *pDesc);
    void GetInstanceName(
        [out] LPSTR pInstanceName,
        [in, out] SIZE_T *pBufferLength);
    void GetTypeName(
        [out] LPSTR pTypeName,
        [in, out] SIZE_T *pBufferLength);
}

[
    object,
    local,
    uuid(ddf57cba-9543-46e4-a12b-f207a0fe7fed)
]
interface ID3D11ClassLinkage : ID3D11DeviceChild
{
    HRESULT GetClassInstance(
        [in] LPCSTR pClassInstanceName,
        [in] UINT InstanceIndex,
        [out] ID3D11ClassInstance **ppInstance);
    HRESULT CreateClassInstance(
        [in] LPCSTR pClassTypeName,
        [in] UINT ConstantBufferOffset,
        [in] UINT ConstantVectorOffset,
        [in] UINT TextureOffset,
        [in] UINT SamplerOffset,
        [out] ID3D11ClassInstance **ppInstance);
}

[
    object,
    local,
    uuid(a24bc4d1-769e-43f7-8013-98ff566c18e2)
]
interface ID3D11CommandList : ID3D11DeviceChild
{
    UINT GetContextFlags();
}

[
    object,
    local,
    uuid(4f5b196e-c2bd-495e-bd01-1fded38e4969)
]
interface ID3D11ComputeShader : ID3D11DeviceChild
{
}

[
    object,
    local,
    uuid(6e8c49fb-a371-4770-b440-29086022b741)
]
interface ID3D11Counter : ID3D11Asynchronous
{
    void GetDesc(
        [out] D3D11_COUNTER_DESC *pDesc);
}

[
    object,
    local,
    uuid(03823efb-8d8f-4e1c-9aa2-f64bb2cbfdf1)
]
interface ID3D11DepthStencilState : ID3D11DeviceChild
{
    void GetDesc(
        [out] D3D11_DEPTH_STENCIL_DESC *pDesc);
}

[
    object,
    local,
    uuid(9fdac92a-1876-48c3-afad-25b94f84a9b6)
]
interface ID3D11DepthStencilView : ID3D11View
{
    void GetDesc(
        [out] D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc);
}

[
    object,
    local,
    uuid(f582c508-0f36-490c-9977-31eece268cfa)
]
interface ID3D11DomainShader : ID3D11DeviceChild
{
}

[
    object,
    local,
    uuid(38325b96-effb-4022-ba02-2e795b70275c)
]
interface ID3D11GeometryShader : ID3D11DeviceChild
{
}

[
    object,
    local,
    uuid(8e5c6061-628a-4c8e-8264-bbe45cb3d5dd)
]
interface ID3D11HullShader : ID3D11DeviceChild
{
}

[
    object,
    local,
    uuid(e4819ddc-4cf0-4025-bd26-5de82a3e07b7)
]
interface ID3D11InputLayout : ID3D11DeviceChild
{
}

[
    object,
    local,
    uuid(ea82e40d-51dc-4f33-93d4-db7c9125ae8c)
]
interface ID3D11PixelShader : ID3D11DeviceChild
{
}

[
    object,
    local,
    uuid(9eb576dd-9f77-4d86-81aa-8bab5fe490e2)
]
interface ID3D11Predicate : ID3D11Query
{
}

[
    object,
    local,
    uuid(9bb4ab81-ab1a-4d8f-b506-fc04200b6ee7)
]
interface ID3D11RasterizerState : ID3D11DeviceChild
{
    void GetDesc(
        [out] D3D11_RASTERIZER_DESC *pDesc);
}

[
    object,
    local,
    uuid(dfdba067-0b8d-4865-875b-d7b4516cc164)
]
interface ID3D11RenderTargetView : ID3D11View
{
    void GetDesc(
        [out] D3D11_RENDER_TARGET_VIEW_DESC *pDesc);
}

[
    object,
    local,
    uuid(da6fea51-564c-4487-9810-f0d0f9b4e3a5)
]
interface ID3D11SamplerState : ID3D11DeviceChild
{
    void GetDesc(
        [out] D3D11_SAMPLER_DESC *pDesc);
}

[
    object,
    local,
    uuid(b0e06fe0-8192-4e1a-b1ca-36d7414710b2)
]
interface ID3D11ShaderResourceView : ID3D11View
{
    void GetDesc(
        [out] D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc);
}

[
    object,
    local,
    uuid(f8fb5c27-c6b3-4f75-a4c8-439af2ef564c),
]
interface ID3D11Texture1D : ID3D11Resource
{
    void GetDesc(
        [out] D3D11_TEXTURE1D_DESC *pDesc);
}

[
    object,
    local,
    uuid(6f15aaf2-d208-4e89-9ab4-489535d34f9c)
]
interface ID3D11Texture2D : ID3D11Resource
{
    void GetDesc(
        [out] D3D11_TEXTURE2D_DESC *pDesc);
}

[
    object,
    local,
    uuid(037e866e-f56d-4357-a8af-9dabbe6e250e)
]
interface ID3D11Texture3D : ID3D11Resource
{
    void GetDesc(
        [out] D3D11_TEXTURE3D_DESC *pDesc);
}

[
    object,
    local,
    uuid(28acf509-7f5c-48f6-8611-f316010a6380)
]
interface ID3D11UnorderedAccessView : ID3D11View
{
    void GetDesc(
        [out] D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc);
}

[
    object,
    local,
    uuid(3b301d64-d678-4289-8897-22f8928b72f3)
]
interface ID3D11VertexShader : ID3D11DeviceChild
{
}

[
    object,
    local,
    uuid(c0bfa96c-e089-44fb-8eaf-26f8796190da)
]
interface ID3D11DeviceContext : ID3D11DeviceChild
{
    void VSSetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [in] ID3D11Buffer *const *ppConstantBuffers);
    void PSSetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
    void PSSetShader(
        [in] ID3D11PixelShader *pPixelShader,
        [in] ID3D11ClassInstance *const *ppClassInstances,
        UINT NumClassInstances);
    void PSSetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [in] ID3D11SamplerState *const *ppSamplers);
    void VSSetShader(
        [in] ID3D11VertexShader *pVertexShader,
        [in] ID3D11ClassInstance *const *ppClassInstances,
        UINT NumClassInstances);
    void DrawIndexed(
        [in] UINT IndexCount,
        [in] UINT StartIndexLocation,
        [in] INT BaseVertexLocation);
    void Draw(
        [in] UINT VertexCount,
        [in] UINT StartVertexLocation);
    HRESULT Map(
        [in] ID3D11Resource *pResource,
        [in] UINT Subresource,
        [in] D3D11_MAP MapType,
        [in] UINT MapFlags,
        [out] D3D11_MAPPED_SUBRESOURCE *pMappedResource);
    void Unmap(
        [in] ID3D11Resource *pResource,
        [in] UINT Subresource);
    void PSSetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [in] ID3D11Buffer *const *ppConstantBuffers);
    void IASetInputLayout(
        [in] ID3D11InputLayout *pInputLayout);
    void IASetVertexBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [in] ID3D11Buffer *const *ppVertexBuffers,
        [in] const UINT *pStrides,
        [in] const UINT *pOffsets);
    void IASetIndexBuffer(
        [in] ID3D11Buffer *pIndexBuffer,
        [in] DXGI_FORMAT  Format,
        [in] UINT Offset);
    void DrawIndexedInstanced(
        [in] UINT IndexCountPerInstance,
        [in] UINT InstanceCount,
        [in] UINT StartIndexLocation,
        [in] INT BaseVertexLocation,
        [in] UINT StartInstanceLocation);
    void DrawInstanced(
        [in] UINT VertexCountPerInstance,
        [in] UINT InstanceCount,
        [in] UINT StartVertexLocation,
        [in] UINT StartInstanceLocation);
    void GSSetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [in] ID3D11Buffer *const *ppConstantBuffers);
    void GSSetShader(
        [in] ID3D11GeometryShader *pShader,
        [in] ID3D11ClassInstance *const *ppClassInstances,
        UINT NumClassInstances);
    void IASetPrimitiveTopology(
        [in] D3D11_PRIMITIVE_TOPOLOGY Topology);
    void VSSetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
    void VSSetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [in] ID3D11SamplerState *const *ppSamplers);
    void Begin(
        [in] ID3D11Asynchronous *pAsync);
    void End(
        [in] ID3D11Asynchronous *pAsync);
    HRESULT GetData(
        [in] ID3D11Asynchronous *pAsync,
        [in] void *pData,
        [in] UINT DataSize,
        [in] UINT GetDataFlags);
    void SetPredication(
        [in] ID3D11Predicate *pPredicate,
        [in] BOOL PredicateValue);
    void GSSetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
    void GSSetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [in] ID3D11SamplerState *const *ppSamplers);
    void OMSetRenderTargets(
        [in] UINT NumViews,
        [in] ID3D11RenderTargetView *const *ppRenderTargetViews,
        [in] ID3D11DepthStencilView *pDepthStencilView);
    void OMSetRenderTargetsAndUnorderedAccessViews(
        [in] UINT NumRTVs,
        [in] ID3D11RenderTargetView *const *ppRenderTargetViews,
        [in] ID3D11DepthStencilView *pDepthStencilView,
        [in] UINT UAVStartSlot,
        [in] UINT NumUAVs,
        [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,
        [in] const UINT *pUAVInitialCounts);
    void OMSetBlendState(
        [in] ID3D11BlendState *pBlendState,
        [in] const FLOAT BlendFactor[4],
        [in] UINT SampleMask);
    void OMSetDepthStencilState(
        [in] ID3D11DepthStencilState *pDepthStencilState,
        [in] UINT StencilRef);
    void SOSetTargets(
        [in] UINT NumBuffers,
        [in] ID3D11Buffer *const *ppSOTargets,
        [in] const UINT *pOffsets);
    void DrawAuto();
    void DrawIndexedInstancedIndirect(
        [in] ID3D11Buffer *pBufferForArgs,
        [in] UINT AlignedByteOffsetForArgs);
    void DrawInstancedIndirect(
        [in] ID3D11Buffer *pBufferForArgs,
        [in] UINT AlignedByteOffsetForArgs);
    void Dispatch(
        [in] UINT ThreadGroupCountX,
        [in] UINT ThreadGroupCountY,
        [in] UINT ThreadGroupCountZ);
    void DispatchIndirect(
        [in] ID3D11Buffer *pBufferForArgs,
        [in] UINT AlignedByteOffsetForArgs);
    void RSSetState(
        [in] ID3D11RasterizerState *pRasterizerState);
    void RSSetViewports(
        [in] UINT NumViewports,
        [in] const D3D11_VIEWPORT *pViewports);
    void RSSetScissorRects(
        [in] UINT NumRects,
        [in] const D3D11_RECT *pRects);
    void CopySubresourceRegion(
        [in] ID3D11Resource *pDstResource,
        [in] UINT DstSubresource,
        [in] UINT DstX,
        [in] UINT DstY,
        [in] UINT DstZ,
        [in] ID3D11Resource *pSrcResource,
        [in] UINT SrcSubresource,
        [in] const D3D11_BOX *pSrcBox);
    void CopyResource(
        [in] ID3D11Resource *pDstResource,
        [in] ID3D11Resource *pSrcResource);
    void UpdateSubresource(
        [in] ID3D11Resource *pDstResource,
        [in] UINT DstSubresource,
        [in] const D3D11_BOX *pDstBox,
        [in] const void *pSrcData,
        [in] UINT SrcRowPitch,
        [in] UINT SrcDepthPitch);
    void CopyStructureCount(
        [in] ID3D11Buffer *pDstBuffer,
        [in] UINT DstAlignedByteOffset,
        [in] ID3D11UnorderedAccessView *pSrcView);
    void ClearRenderTargetView(
        [in] ID3D11RenderTargetView *pRenderTargetView,
        [in] const FLOAT ColorRGBA[4]);
    void ClearUnorderedAccessViewUint(
        [in] ID3D11UnorderedAccessView *pUnorderedAccessView,
        [in] const UINT Values[4]);
    void ClearUnorderedAccessViewFloat(
        [in] ID3D11UnorderedAccessView *pUnorderedAccessView,
        [in] const FLOAT Values[4]);
    void ClearDepthStencilView(
        [in] ID3D11DepthStencilView *pDepthStencilView,
        [in] UINT ClearFlags,
        [in] FLOAT Depth,
        [in] UINT8 Stencil);
    void GenerateMips(
        [in] ID3D11ShaderResourceView *pShaderResourceView);
    void SetResourceMinLOD(
        [in] ID3D11Resource *pResource, FLOAT MinLOD);
    FLOAT GetResourceMinLOD(
        [in] ID3D11Resource *pResource);
    void ResolveSubresource(
        [in] ID3D11Resource *pDstResource,
        [in] UINT DstSubresource,
        [in] ID3D11Resource *pSrcResource,
        [in] UINT SrcSubresource,
        [in] DXGI_FORMAT Format);
    void ExecuteCommandList(
        [in] ID3D11CommandList *pCommandList,
        BOOL RestoreContextState);
    void HSSetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
    void HSSetShader(
        [in] ID3D11HullShader *pHullShader,
        [in] ID3D11ClassInstance *const *ppClassInstances,
        UINT NumClassInstances);
    void HSSetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [in] ID3D11SamplerState *const *ppSamplers);
    void HSSetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [in] ID3D11Buffer *const *ppConstantBuffers);
    void DSSetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
    void DSSetShader(
        [in] ID3D11DomainShader *pDomainShader,
        [in] ID3D11ClassInstance *const *ppClassInstances,
        UINT NumClassInstances);
    void DSSetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [in] ID3D11SamplerState *const *ppSamplers);
    void DSSetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [in] ID3D11Buffer *const *ppConstantBuffers);
    void CSSetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
    void CSSetUnorderedAccessViews(
        [in] UINT StartSlot,
        [in] UINT NumUAVs,
        [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,
        [in] const UINT *pUAVInitialCounts);
    void CSSetShader(
        [in] ID3D11ComputeShader *pComputeShader,
        [in] ID3D11ClassInstance *const *ppClassInstances,
        UINT NumClassInstances);
    void CSSetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [in] ID3D11SamplerState *const *ppSamplers);
    void CSSetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [in] ID3D11Buffer *const *ppConstantBuffers);
    void VSGetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [out] ID3D11Buffer **ppConstantBuffers);
    void PSGetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
    void PSGetShader(
        [out] ID3D11PixelShader **ppPixelShader,
        [out] ID3D11ClassInstance **ppClassInstances,
        [in, out] UINT *pNumClassInstances);
    void PSGetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [out] ID3D11SamplerState **ppSamplers);
    void VSGetShader(
        [out] ID3D11VertexShader **ppVertexShader,
        [out] ID3D11ClassInstance **ppClassInstances,
        [in, out] UINT *pNumClassInstances);
    void PSGetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [out] ID3D11Buffer **ppConstantBuffers);
    void IAGetInputLayout(
        [out] ID3D11InputLayout **ppInputLayout);
    void IAGetVertexBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [out] ID3D11Buffer **ppVertexBuffers,
        [out] UINT *pStrides,
        [out] UINT *pOffsets);
    void IAGetIndexBuffer(
        [out] ID3D11Buffer **pIndexBuffer,
        [out] DXGI_FORMAT* Format,
        [out] UINT* Offset);
    void GSGetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [out] ID3D11Buffer **ppConstantBuffers);
    void GSGetShader(
        [out] ID3D11GeometryShader **ppGeometryShader,
        [out] ID3D11ClassInstance **ppClassInstances,
        [in, out] UINT *pNumClassInstances);
    void IAGetPrimitiveTopology(
        [out] D3D11_PRIMITIVE_TOPOLOGY *pTopology);
    void VSGetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
    void VSGetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [out] ID3D11SamplerState **ppSamplers);
    void GetPredication(
        [out] ID3D11Predicate **ppPredicate,
        [out] BOOL *pPredicateValue);
    void GSGetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
    void GSGetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [out] ID3D11SamplerState **ppSamplers);
    void OMGetRenderTargets(
        [in] UINT NumViews,
        [out] ID3D11RenderTargetView **ppRenderTargetViews,
        [out] ID3D11DepthStencilView **ppDepthStencilView);
    void OMGetRenderTargetsAndUnorderedAccessViews(
        [in] UINT NumRTVs,
        [out] ID3D11RenderTargetView **ppRenderTargetViews,
        [out] ID3D11DepthStencilView **ppDepthStencilView,
        [in] UINT UAVStartSlot,
        [in] UINT NumUAVs,
        [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews);
    void OMGetBlendState(
        [out] ID3D11BlendState **ppBlendState,
        [out] FLOAT BlendFactor[4],
        [out] UINT *pSampleMask);
    void OMGetDepthStencilState(
        [out] ID3D11DepthStencilState **ppDepthStencilState,
        [out] UINT *pStencilRef);
    void SOGetTargets(
        [in] UINT NumBuffers,
        [out] ID3D11Buffer **ppSOTargets);
    void RSGetState(
        [out] ID3D11RasterizerState **ppRasterizerState);
    void RSGetViewports(
        [in, out] UINT *pNumViewports,
        [out] D3D11_VIEWPORT *pViewports);
    void RSGetScissorRects(
        [in, out] UINT *pNumRects,
        [out] D3D11_RECT *pRects);
    void HSGetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
    void HSGetShader(
        [out] ID3D11HullShader **ppHullShader,
        [out] ID3D11ClassInstance **ppClassInstances,
        [in, out] UINT *pNumClassInstances);
    void HSGetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [out] ID3D11SamplerState **ppSamplers);
    void HSGetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [out] ID3D11Buffer **ppConstantBuffers);
    void DSGetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
    void DSGetShader(
        [out] ID3D11DomainShader **ppDomainShader,
        [out] ID3D11ClassInstance **ppClassInstances,
        [in, out] UINT *pNumClassInstances);
    void DSGetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [out] ID3D11SamplerState **ppSamplers);
    void DSGetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [out] ID3D11Buffer **ppConstantBuffers);
    void CSGetShaderResources(
        [in] UINT StartSlot,
        [in] UINT NumViews,
        [out] ID3D11ShaderResourceView **ppShaderResourceViews);
    void CSGetUnorderedAccessViews(
        [in] UINT StartSlot,
        [in] UINT NumUAVs,
        [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews);
    void CSGetShader(
        [out] ID3D11ComputeShader **ppComputeShader,
        [out] ID3D11ClassInstance **ppClassInstances,
        [in, out] UINT *pNumClassInstances);
    void CSGetSamplers(
        [in] UINT StartSlot,
        [in] UINT NumSamplers,
        [out] ID3D11SamplerState **ppSamplers);
    void CSGetConstantBuffers(
        [in] UINT StartSlot,
        [in] UINT NumBuffers,
        [out] ID3D11Buffer **ppConstantBuffers);
    void ClearState();
    void Flush();
    D3D11_DEVICE_CONTEXT_TYPE GetType();
    UINT GetContextFlags();
    HRESULT FinishCommandList(
        BOOL RestoreDeferredContextState,
        [out] ID3D11CommandList **ppCommandList);
}

[
    object,
    uuid(3015a308-dcbd-47aa-a747-192486d14d4a),
    local,
    pointer_default(unique)
]
interface ID3D11AuthenticatedChannel : ID3D11DeviceChild
{
    HRESULT GetCertificateSize(
        UINT *pCertificateSize);
    HRESULT GetCertificate(
        UINT CertificateSize,
        BYTE *pCertificate);
    void GetChannelHandle(
        HANDLE *pChannelHandle);
}

[
    object,
    uuid(9b32f9ad-bdcc-40a6-a39d-d5c865845720),
    local,
    pointer_default(unique)
]
interface ID3D11CryptoSession : ID3D11DeviceChild
{
    void GetCryptoType(
        GUID *pCryptoType);
    void GetDecoderProfile(
        GUID *pDecoderProfile);
    HRESULT GetCertificateSize(
        UINT *pCertificateSize);
    HRESULT GetCertificate(
        UINT CertificateSize,
        BYTE *pCertificate);
    void GetCryptoSessionHandle(
        HANDLE *pCryptoSessionHandle);
}

[
    object,
    uuid(3c9c5b51-995d-48d1-9b8d-fa5caeded65c),
    local,
    pointer_default(unique)
]
interface ID3D11VideoDecoder : ID3D11DeviceChild
{
    HRESULT GetCreationParameters(
        D3D11_VIDEO_DECODER_DESC *pVideoDesc,
        D3D11_VIDEO_DECODER_CONFIG *pConfig);
    HRESULT GetDriverHandle(
        HANDLE *pDriverHandle);
}

[
    object,
    uuid(31627037-53ab-4200-9061-05faa9ab45f9),
    local,
    pointer_default(unique)
]
interface ID3D11VideoProcessorEnumerator : ID3D11DeviceChild
{
    HRESULT GetVideoProcessorContentDesc(
        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pContentDesc);
    HRESULT CheckVideoProcessorFormat(
        DXGI_FORMAT Format,
        UINT *pFlags);
    HRESULT GetVideoProcessorCaps(
        D3D11_VIDEO_PROCESSOR_CAPS *pCaps);
    HRESULT GetVideoProcessorRateConversionCaps(
        UINT TypeIndex,
        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
    HRESULT GetVideoProcessorCustomRate(
        UINT TypeIndex,
        UINT CustomRateIndex,
        D3D11_VIDEO_PROCESSOR_CUSTOM_RATE *pRate);
    HRESULT GetVideoProcessorFilterRange(
        D3D11_VIDEO_PROCESSOR_FILTER Filter,
        D3D11_VIDEO_PROCESSOR_FILTER_RANGE *pRange);
}

[
    object,
    uuid(1d7b0652-185f-41c6-85ce-0c5be3d4ae6c),
    local,
    pointer_default(unique)
]
interface ID3D11VideoProcessor : ID3D11DeviceChild
{
    void GetContentDesc(
        D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc);
    void GetRateConversionCaps(
        D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS *pCaps);
}

[
    object,
    uuid(c2931aea-2a85-4f20-860f-fba1fd256e18),
    local,
    pointer_default(unique)
]
interface ID3D11VideoDecoderOutputView : ID3D11View
{
    void GetDesc(
        D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc);
}

[
    object,
    uuid(11ec5a5f-51dc-4945-ab34-6e8c21300ea5),
    local,
    pointer_default(unique)
]
interface ID3D11VideoProcessorInputView : ID3D11View
{
    void GetDesc(
        D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc);
}

[
    object,
    uuid(a048285e-25a9-4527-bd93-d68b68c44254),
    local,
    pointer_default(unique)
]
interface ID3D11VideoProcessorOutputView : ID3D11View
{
    void GetDesc(
        D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc);
}

[
    object,
    uuid(10ec4d5b-975a-4689-b9e4-d0aac30fe333),
    local,
    pointer_default(unique)
]
interface ID3D11VideoDevice : IUnknown
{
    HRESULT CreateVideoDecoder(
        const D3D11_VIDEO_DECODER_DESC *pVideoDesc,
        const D3D11_VIDEO_DECODER_CONFIG *pConfig,
        ID3D11VideoDecoder **ppDecoder);
    HRESULT CreateVideoProcessor(
        ID3D11VideoProcessorEnumerator *pEnum,
        UINT RateConversionIndex,
        ID3D11VideoProcessor **ppVideoProcessor);
    HRESULT CreateAuthenticatedChannel(
        D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,
        ID3D11AuthenticatedChannel **ppAuthenticatedChannel);
    HRESULT CreateCryptoSession(
        const GUID *pCryptoType,
        const GUID *pDecoderProfile,
        const GUID *pKeyExchangeType,
        ID3D11CryptoSession **ppCryptoSession);
    HRESULT CreateVideoDecoderOutputView(
        ID3D11Resource *pResource,
        const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC *pDesc,
        ID3D11VideoDecoderOutputView **ppVDOVView);
    HRESULT CreateVideoProcessorInputView(
        ID3D11Resource *pResource,
        ID3D11VideoProcessorEnumerator *pEnum,
        const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC *pDesc,
        ID3D11VideoProcessorInputView **ppVPIView);
    HRESULT CreateVideoProcessorOutputView(
        ID3D11Resource *pResource,
        ID3D11VideoProcessorEnumerator *pEnum,
        const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC *pDesc,
        ID3D11VideoProcessorOutputView **ppVPOView);
    HRESULT CreateVideoProcessorEnumerator(
        const D3D11_VIDEO_PROCESSOR_CONTENT_DESC *pDesc,
        ID3D11VideoProcessorEnumerator **ppEnum);
    UINT GetVideoDecoderProfileCount();
    HRESULT GetVideoDecoderProfile(
        UINT Index,
        GUID *pDecoderProfile);
    HRESULT CheckVideoDecoderFormat(
        const GUID *pDecoderProfile,
        DXGI_FORMAT Format,
        BOOL *pSupported);
    HRESULT GetVideoDecoderConfigCount(
        const D3D11_VIDEO_DECODER_DESC *pDesc,
        UINT *pCount);
    HRESULT GetVideoDecoderConfig(
        const D3D11_VIDEO_DECODER_DESC *pDesc,
        UINT Index,
        D3D11_VIDEO_DECODER_CONFIG *pConfig);
    HRESULT GetContentProtectionCaps(
        const GUID *pCryptoType,
        const GUID *pDecoderProfile,
        D3D11_VIDEO_CONTENT_PROTECTION_CAPS *pCaps);
    HRESULT CheckCryptoKeyExchange(
        const GUID *pCryptoType,
        const GUID *pDecoderProfile,
        UINT Index,
        GUID *pKeyExchangeType);
    HRESULT SetPrivateData(
        REFGUID guid,
        UINT DataSize,
        const void *pData);
    HRESULT SetPrivateDataInterface(
        REFGUID guid,
        const IUnknown *pData);
}

[
    object,
    uuid(61f21c45-3c0e-4a74-9cea-67100d9ad5e4),
    local,
    pointer_default(unique)
]
interface ID3D11VideoContext : ID3D11DeviceChild
{
    HRESULT GetDecoderBuffer(
        [in] ID3D11VideoDecoder *decoder,
        [in] D3D11_VIDEO_DECODER_BUFFER_TYPE type,
        [out] UINT *buffer_size,
        [out] void **buffer
    );
    HRESULT ReleaseDecoderBuffer(
        [in] ID3D11VideoDecoder *decoder,
        [in] D3D11_VIDEO_DECODER_BUFFER_TYPE type
    );
    HRESULT DecoderBeginFrame(
        [in] ID3D11VideoDecoder *decoder,
        [in] ID3D11VideoDecoderOutputView *view,
        [in] UINT key_size,
        [in] const void *key
    );
    HRESULT DecoderEndFrame(
        [in] ID3D11VideoDecoder *decoder
    );
    HRESULT SubmitDecoderBuffers(
        [in] ID3D11VideoDecoder *decoder,
        [in] UINT buffers_count,
        [in] const D3D11_VIDEO_DECODER_BUFFER_DESC *buffer_desc
    );
    HRESULT DecoderExtension(
        [in] ID3D11VideoDecoder *decoder,
        [in] const D3D11_VIDEO_DECODER_EXTENSION *extension
    );
    void VideoProcessorSetOutputTargetRect(
        [in] ID3D11VideoProcessor *processor,
        [in] BOOL enable,
        [in] const RECT *rect
    );
    void VideoProcessorSetOutputBackgroundColor(
        [in] ID3D11VideoProcessor *processor,
        [in] BOOL y_cb_cr,
        [in] const D3D11_VIDEO_COLOR *color
    );
    void VideoProcessorSetOutputColorSpace(
        [in] ID3D11VideoProcessor *processor,
        [in] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space
    );
    void VideoProcessorSetOutputAlphaFillMode(
        [in] ID3D11VideoProcessor *processor,
        [in] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE alpha_fill_mode,
        [in] UINT stream_idx
    );
    void VideoProcessorSetOutputConstriction(
        [in] ID3D11VideoProcessor *processor,
        [in] BOOL enable,
        [in] SIZE size
    );
    void VideoProcessorSetOutputStereoMode(
        [in] ID3D11VideoProcessor *processor,
        [in] BOOL enable
    );
    HRESULT VideoProcessorSetOutputExtension(
        [in] ID3D11VideoProcessor *processor,
        [in] const GUID *guid,
        [in] UINT data_size,
        [in] void *data
    );
    void VideoProcessorGetOutputTargetRect(
        [in] ID3D11VideoProcessor *processor,
        [out] BOOL *enabled,
        [out] RECT *rect
    );
    void VideoProcessorGetOutputBackgroundColor(
        [in] ID3D11VideoProcessor *processor,
        [out] BOOL *y_cb_cr,
        [out] D3D11_VIDEO_COLOR *color
    );
    void VideoProcessorGetOutputColorSpace(
        [in] ID3D11VideoProcessor *processor,
        [out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space
    );
    void VideoProcessorGetOutputAlphaFillMode(
        [in] ID3D11VideoProcessor *processor,
        [out] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE *alpha_fill_mode,
        [out] UINT *stream_idx
    );
    void VideoProcessorGetOutputConstriction(
        [in] ID3D11VideoProcessor *processor,
        [out] BOOL *enabled,
        [out] SIZE *size
    );
    void VideoProcessorGetOutputStereoMode(
        [in] ID3D11VideoProcessor *processor,
        [out] BOOL *enabled
    );
    HRESULT VideoProcessorGetOutputExtension(
        [in] ID3D11VideoProcessor *processor,
        [in] const GUID *guid,
        [in] UINT data_size,
        [out] void *data
    );
    void VideoProcessorSetStreamFrameFormat(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] D3D11_VIDEO_FRAME_FORMAT format
    );
    void VideoProcessorSetStreamColorSpace(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space
    );
    void VideoProcessorSetStreamOutputRate(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE rate,
        [in] BOOL repeat,
        [in] const DXGI_RATIONAL *custom_rate
    );
    void VideoProcessorSetStreamSourceRect(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] BOOL enable,
        [in] const RECT *rect
    );
    void VideoProcessorSetStreamDestRect(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] BOOL enable,
        [in] const RECT *rect
    );
    void VideoProcessorSetStreamAlpha(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] BOOL enable,
        [in] float alpha
    );
    void VideoProcessorSetStreamPalette(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] UINT entry_count,
        [in] const UINT *entries
    );
    void VideoProcessorSetStreamPixelAspectRatio(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] BOOL enable,
        [in] const DXGI_RATIONAL *src_aspect_ratio,
        [in] const DXGI_RATIONAL *dst_aspect_ratio
    );
    void VideoProcessorSetStreamLumaKey(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] BOOL enable,
        [in] float lower,
        [in] float upper
    );
    void VideoProcessorSetStreamStereoFormat(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] BOOL enable,
        [in] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT format,
        [in] BOOL left_view_frame0,
        [in] BOOL base_view_frame0,
        [in] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE flip_mode,
        [in] int mono_offset
    );
    void VideoProcessorSetStreamAutoProcessingMode(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] BOOL enable
    );
    void VideoProcessorSetStreamFilter(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] D3D11_VIDEO_PROCESSOR_FILTER filter,
        [in] BOOL enable,
        [in] int level
    );
    HRESULT VideoProcessorSetStreamExtension(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] const GUID *guid,
        [in] UINT data_size,
        [in] void *data
    );
    void VideoProcessorGetStreamFrameFormat(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] D3D11_VIDEO_FRAME_FORMAT *format
    );
    void VideoProcessorGetStreamColorSpace(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE *color_space
    );
    void VideoProcessorGetStreamOutputRate(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE *rate,
        [out] BOOL *repeat,
        [out] DXGI_RATIONAL *custom_rate
    );
    void VideoProcessorGetStreamSourceRect(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] BOOL *enabled,
        [out] RECT *rect
    );
    void VideoProcessorGetStreamDestRect(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] BOOL *enabled,
        [out] RECT *rect
    );
    void VideoProcessorGetStreamAlpha(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] BOOL *enabled,
        [out] float *alpha
    );
    void VideoProcessorGetStreamPalette(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] UINT entry_count,
        [out] UINT *entries
    );
    void VideoProcessorGetStreamPixelAspectRatio(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] BOOL *enabled,
        [out] DXGI_RATIONAL *src_aspect_ratio,
        [out] DXGI_RATIONAL *dst_aspect_ratio
    );
    void VideoProcessorGetStreamLumaKey(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] BOOL *enabled,
        [out] float *lower,
        [out] float *upper
    );
    void VideoProcessorGetStreamStereoFormat(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] BOOL *enabled,
        [out] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT *format,
        [out] BOOL *left_view_frame0,
        [out] BOOL *base_view_frame0,
        [out] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE *flip_mode,
        [out] int *mono_offset
    );
    void VideoProcessorGetStreamAutoProcessingMode(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] BOOL *enabled
    );
    void VideoProcessorGetStreamFilter(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] D3D11_VIDEO_PROCESSOR_FILTER filter,
        [out] BOOL *enabled,
        [out] int *level
    );
    HRESULT VideoProcessorGetStreamExtension(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] const GUID *guid,
        [in] UINT data_size,
        [out] void *data
    );
    HRESULT VideoProcessorBlt(
        [in] ID3D11VideoProcessor *processor,
        [in] ID3D11VideoProcessorOutputView *view,
        [in] UINT frame_idx,
        [in] UINT stream_count,
        [in] const D3D11_VIDEO_PROCESSOR_STREAM *streams
    );
    HRESULT NegotiateCryptoSessionKeyExchange(
        [in] ID3D11CryptoSession *session,
        [in] UINT data_size,
        [in, out] void *data
    );
    void EncryptionBlt(
        [in] ID3D11CryptoSession *session,
        [in] ID3D11Texture2D *src_surface,
        [in] ID3D11Texture2D *dst_surface,
        [in] UINT iv_size,
        [in, out] void *iv
    );
    void DecryptionBlt(
        [in] ID3D11CryptoSession *session,
        [in] ID3D11Texture2D *src_surface,
        [in] ID3D11Texture2D *dst_surface,
        [in] D3D11_ENCRYPTED_BLOCK_INFO *block_info,
        [in] UINT key_size,
        [in] const void *key,
        [in] UINT iv_size,
        [in, out] void *iv
    );
    void StartSessionKeyRefresh(
        [in] ID3D11CryptoSession *session,
        [in] UINT random_number_size,
        [out] void *random_number
    );
    void FinishSessionKeyRefresh(
        [in] ID3D11CryptoSession *session
    );
    HRESULT GetEncryptionBltKey(
        [in] ID3D11CryptoSession *session,
        [in] UINT key_size,
        [out] void *key
    );
    HRESULT NegotiateAuthenticatedChannelKeyExchange(
        [in] ID3D11AuthenticatedChannel *channel,
        [in] UINT data_size,
        [in, out] void *data
    );
    HRESULT QueryAuthenticatedChannel(
        [in] ID3D11AuthenticatedChannel *channel,
        [in] UINT input_size,
        [in] const void *input,
        [in] UINT output_size,
        [out] void *output
    );
    HRESULT ConfigureAuthenticatedChannel(
        [in] ID3D11AuthenticatedChannel *channel,
        [in] UINT input_size,
        [in] const void *input,
        [out] D3D11_AUTHENTICATED_CONFIGURE_OUTPUT *output
    );
    void VideoProcessorSetStreamRotation(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [in] BOOL enable,
        [in] D3D11_VIDEO_PROCESSOR_ROTATION rotation
    );
    void VideoProcessorGetStreamRotation(
        [in] ID3D11VideoProcessor *processor,
        [in] UINT stream_idx,
        [out] BOOL *enable,
        [out] D3D11_VIDEO_PROCESSOR_ROTATION *rotation
    );
}

[
    object,
    local,
    uuid(db6f6ddb-ac77-4e88-8253-819df9bbf140)
]
interface ID3D11Device : IUnknown
{
    HRESULT CreateBuffer(
        [in] const D3D11_BUFFER_DESC *pDesc,
        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
        [out] ID3D11Buffer **ppBuffer);
    HRESULT CreateTexture1D(
        [in] const D3D11_TEXTURE1D_DESC *pDesc,
        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
        [out] ID3D11Texture1D **ppTexture1D);
    HRESULT CreateTexture2D(
        [in] const D3D11_TEXTURE2D_DESC *pDesc,
        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
        [out] ID3D11Texture2D **ppTexture2D);
    HRESULT CreateTexture3D(
        [in] const D3D11_TEXTURE3D_DESC *pDesc,
        [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
        [out] ID3D11Texture3D **ppTexture3D);
    HRESULT CreateShaderResourceView(
        [in] ID3D11Resource *pResource,
        [in] const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc,
        [out] ID3D11ShaderResourceView **ppSRView);
    HRESULT CreateUnorderedAccessView(
        [in] ID3D11Resource *pResource,
        [in] const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc,
        [out] ID3D11UnorderedAccessView **ppUAView);
    HRESULT CreateRenderTargetView(
        [in] ID3D11Resource *pResource,
        [in] const D3D11_RENDER_TARGET_VIEW_DESC *pDesc,
        [out] ID3D11RenderTargetView **ppRTView);
    HRESULT CreateDepthStencilView(
        [in] ID3D11Resource *pResource,
        [in] const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc,
        [out] ID3D11DepthStencilView **ppDepthStencilView);
    HRESULT CreateInputLayout(
        [in] const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs,
        [in] UINT NumElements,
        [in] const void *pShaderBytecodeWithInputSignature,
        [in] SIZE_T BytecodeLength,
        [out] ID3D11InputLayout **ppInputLayout);
    HRESULT CreateVertexShader(
        [in] const void *pShaderBytecode,
        [in] SIZE_T BytecodeLength,
        [in] ID3D11ClassLinkage *pClassLinkage,
        [out] ID3D11VertexShader **ppVertexShader);
    HRESULT CreateGeometryShader(
        [in] const void *pShaderBytecode,
        [in] SIZE_T BytecodeLength,
        [in] ID3D11ClassLinkage *pClassLinkage,
        [out] ID3D11GeometryShader **ppGeometryShader);
    HRESULT CreateGeometryShaderWithStreamOutput(
        [in] const void *pShaderBytecode,
        [in] SIZE_T BytecodeLength,
        [in] const D3D11_SO_DECLARATION_ENTRY *pSODeclaration,
        [in] UINT NumEntries,
        [in] const UINT *pBufferStrides,
        [in] UINT NumStrides,
        [in] UINT RasterizedStream,
        [in] ID3D11ClassLinkage *pClassLinkage,
        [out] ID3D11GeometryShader **ppGeometryShader);
    HRESULT CreatePixelShader(
        [in] const void *pShaderBytecode,
        [in] SIZE_T BytecodeLength,
        [in] ID3D11ClassLinkage *pClassLinkage,
        [out] ID3D11PixelShader **ppPixelShader);
    HRESULT CreateHullShader(
        [in] const void *pShaderBytecode,
        [in] SIZE_T BytecodeLength,
        [in] ID3D11ClassLinkage *pClassLinkage,
        [out] ID3D11HullShader **ppHullShader);
    HRESULT CreateDomainShader(
        [in] const void *pShaderBytecode,
        [in] SIZE_T BytecodeLength,
        [in] ID3D11ClassLinkage *pClassLinkage,
        [out] ID3D11DomainShader **ppDomainShader);
    HRESULT CreateComputeShader(
        [in] const void *pShaderBytecode,
        [in] SIZE_T BytecodeLength,
        [in] ID3D11ClassLinkage *pClassLinkage,
        [out] ID3D11ComputeShader **ppComputeShader);
    HRESULT CreateClassLinkage(
        [out] ID3D11ClassLinkage **ppLinkage);
    HRESULT CreateBlendState(
        [in] const D3D11_BLEND_DESC *pBlendStateDesc,
        [out] ID3D11BlendState **ppBlendState);
    HRESULT CreateDepthStencilState(
        [in] const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc,
        [out] ID3D11DepthStencilState **ppDepthStencilState);
    HRESULT CreateRasterizerState(
        [in] const D3D11_RASTERIZER_DESC *pRasterizerDesc,
        [out] ID3D11RasterizerState **ppRasterizerState);
    HRESULT CreateSamplerState(
        [in] const D3D11_SAMPLER_DESC *pSamplerDesc,
        [out] ID3D11SamplerState **ppSamplerState);
    HRESULT CreateQuery(
        [in] const D3D11_QUERY_DESC *pQueryDesc,
        [out] ID3D11Query **ppQuery);
    HRESULT CreatePredicate(
        [in] const D3D11_QUERY_DESC *pPredicateDesc,
        [out] ID3D11Predicate **ppPredicate);
    HRESULT CreateCounter(
        [in] const D3D11_COUNTER_DESC *pCounterDesc,
        [out] ID3D11Counter **ppCounter);
    HRESULT CreateDeferredContext(
        UINT ContextFlags,
        [out] ID3D11DeviceContext **ppDeferredContext);
    HRESULT OpenSharedResource(
        [in] HANDLE hResource,
        [in] REFIID ReturnedInterface,
        [out] void  **ppResource);
    HRESULT CheckFormatSupport(
        [in] DXGI_FORMAT Format,
        [out] UINT *pFormatSupport);
    HRESULT CheckMultisampleQualityLevels(
        [in] DXGI_FORMAT Format,
        [in] UINT        SampleCount,
        [out] UINT *pNumQualityLevels);
    void CheckCounterInfo(
        [out] D3D11_COUNTER_INFO *pCounterInfo);
    HRESULT CheckCounter(
        [in] const D3D11_COUNTER_DESC *pDesc,
        [out] D3D11_COUNTER_TYPE *pType,
        [out] UINT *pActiveCounters,
        [out] LPSTR szName,
        [in, out] UINT *pNameLength,
        [out] LPSTR szUnits,
        [in, out] UINT *pUnitsLength,
        [out] LPSTR szDescription,
        [in, out] UINT *pDescriptionLength);
    HRESULT CheckFeatureSupport(
        D3D11_FEATURE Feature,
        [out] void *pFeatureSupportData,
        UINT FeatureSupportDataSize);
    HRESULT GetPrivateData(
        [in] REFGUID guid,
        [in, out] UINT *pDataSize,
        [out] void *pData);
    HRESULT SetPrivateData(
        [in] REFGUID guid,
        [in] UINT DataSize,
        [in] const void *pData);
    HRESULT SetPrivateDataInterface(
        [in] REFGUID guid,
        [in] const IUnknown *pData);
    D3D_FEATURE_LEVEL GetFeatureLevel();
    UINT GetCreationFlags();
    HRESULT GetDeviceRemovedReason();
    void GetImmediateContext(
        [out] ID3D11DeviceContext **ppImmediateContext);
    HRESULT SetExceptionMode(UINT RaiseFlags);
    UINT GetExceptionMode();
}

typedef enum D3D11_CREATE_DEVICE_FLAG {
    D3D11_CREATE_DEVICE_SINGLETHREADED  = 0x0001,
    D3D11_CREATE_DEVICE_DEBUG           = 0x0002,
    D3D11_CREATE_DEVICE_SWITCH_TO_REF   = 0x0004,
    D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x0008,
    D3D11_CREATE_DEVICE_BGRA_SUPPORT    = 0x0020,
    D3D11_CREATE_DEVICE_DEBUGGABLE      = 0x0040,
    D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY = 0x0080,
    D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT = 0x0100,
    D3D11_CREATE_DEVICE_VIDEO_SUPPORT   = 0x0800
} D3D11_CREATE_DEVICE_FLAG;

typedef enum D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT
{
    D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT_INPUT  = 0x0001,
    D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT_OUTPUT = 0x0002,
} D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT;

const UINT D3D11_SDK_VERSION = 7;

cpp_quote("#include <d3d10_1.h>")
cpp_quote("#ifndef D3D11_IGNORE_SDK_LAYERS")
cpp_quote("# include <d3d11sdklayers.h>")
cpp_quote("#endif")
cpp_quote("#include <d3d10misc.h>")
cpp_quote("#include <d3d10shader.h>")
cpp_quote("#include <d3d10effect.h>")
cpp_quote("#include <d3d10_1shader.h>")

const UINT _FACD3D11 = 0x87c;
cpp_quote("#define MAKE_D3D11_HRESULT(code) MAKE_HRESULT(SEVERITY_ERROR, _FACD3D11, code)")

cpp_quote("typedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,")
cpp_quote("    const D3D_FEATURE_LEVEL*,UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")

cpp_quote("HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,const D3D_FEATURE_LEVEL*," )
cpp_quote("    UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")

cpp_quote("typedef HRESULT (WINAPI *PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,")
cpp_quote("    const D3D_FEATURE_LEVEL*,UINT,UINT,const DXGI_SWAP_CHAIN_DESC*,IDXGISwapChain**,ID3D11Device**,")
cpp_quote("    D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")

[local] HRESULT __stdcall D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type,
        HMODULE swrast, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT levels, UINT sdk_version,
        const DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain, ID3D11Device **device,
        D3D_FEATURE_LEVEL *obtained_feature_level, ID3D11DeviceContext **immediate_context);
