/*
 * 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;

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_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 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_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_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("#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 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_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;

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 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_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_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;

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("            BOOL frontCounterClockwise, INT depthBias, FLOAT depthBiasClamp, FLOAT slopeScaledDepthBias,")
cpp_quote("            BOOL depthClipEnable, BOOL scissorEnable, BOOL multisampleEnable, BOOL 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;

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; target < RenderTarget+D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; 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;

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;

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;

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;

/* A couple forward declarations are needed */
interface ID3D11Device;
interface ID3D11ClassLinkage;

[
    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,
    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;

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>")

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**);")
