/*
 * Copyright 2007 Andras Kovacs
 *
 * 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
 */

/* modified by Luca Barbieri on Sep 2010 to:
 * - converted to using d3dcommon.idl
 * - add missing D3D10_FORMAT_SUPPORT
 * - add DXGI 1.1 	D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX, D3D10_RESOURCE_MISC_GDI_COMPATIBLE
*/
import "oaidl.idl";
import "ocidl.idl";
import "dxgi.idl";
import "d3dcommon.idl";

cpp_quote("#ifndef _D3D10_CONSTANTS")
cpp_quote("#define _D3D10_CONSTANTS")
const float D3D10_DEFAULT_BLEND_FACTOR_ALPHA                                            = 1.0;
const float D3D10_DEFAULT_BLEND_FACTOR_BLUE                                             = 1.0;
const float D3D10_DEFAULT_BLEND_FACTOR_GREEN                                            = 1.0;
const float D3D10_DEFAULT_BLEND_FACTOR_RED                                              = 1.0;
const float D3D10_DEFAULT_BORDER_COLOR_COMPONENT                                        = 0.0;
const float D3D10_DEFAULT_SLOPE_SCALED_DEPTH_BIAS                                       = 0.0;
const float D3D10_DEFAULT_DEPTH_BIAS_CLAMP                                              = 0.0;
const float D3D10_DEFAULT_MAX_ANISOTROPY                                                = 16.0;
const float D3D10_DEFAULT_MIP_LOD_BIAS                                                  = 0.0;
const float D3D10_DEFAULT_VIEWPORT_MAX_DEPTH                                            = 0.0;
const float D3D10_DEFAULT_VIEWPORT_MIN_DEPTH                                            = 0.0;
const float D3D10_FLOAT16_FUSED_TOLERANCE_IN_ULP                                        = 0.6;
const float D3D10_FLOAT32_MAX                                                           = 3.402823466e+38;
const float D3D10_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP                                   = 0.6;
const float D3D10_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR                                    = 2.4;
const float D3D10_FLOAT_TO_SRGB_EXPONENT_NUMERATOR                                      = 1.0;
const float D3D10_FLOAT_TO_SRGB_OFFSET                                                  = 0.055;
const float D3D10_FLOAT_TO_SRGB_SCALE_1                                                 = 12.92;
const float D3D10_FLOAT_TO_SRGB_SCALE_2                                                 = 1.055;
const float D3D10_FLOAT_TO_SRGB_THRESHOLD                                               = 0.0031308;
const float D3D10_FTOI_INSTRUCTION_MAX_INPUT                                            = 2147483647.999;
const float D3D10_FTOI_INSTRUCTION_MIN_INPUT                                            = -2147483648.999;
const float D3D10_FTOU_INSTRUCTION_MAX_INPUT                                            = 4294967295.999;
const float D3D10_FTOU_INSTRUCTION_MIN_INPUT                                            = 0.0;
const float D3D10_LINEAR_GAMMA                                                          = 1.0;
const float D3D10_MAX_BORDER_COLOR_COMPONENT                                            = 1.0;
const float D3D10_MAX_DEPTH                                                             = 1.0;
const float D3D10_MAX_POSITION_VALUE                                                    = 3.402823466e+34;
const float D3D10_MIN_BORDER_COLOR_COMPONENT                                            = 0.0;
const float D3D10_MIN_DEPTH                                                             = 0.0;
const float D3D10_MIP_LOD_BIAS_MAX                                                      = 15.99;
const float D3D10_MIP_LOD_BIAS_MIN                                                      = -16.0;
const float D3D10_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT                                  = 0.5;
const float D3D10_MULTISAMPLE_ANTIALIAS_LINE_WIDTH                                      = 1.4;
const float D3D10_SRGB_GAMMA                                                            = 2.2;
const float D3D10_SRGB_TO_FLOAT_DENOMINATOR_1                                           = 12.92;
const float D3D10_SRGB_TO_FLOAT_DENOMINATOR_2                                           = 1.055;
const float D3D10_SRGB_TO_FLOAT_EXPONENT                                                = 2.4;
const float D3D10_SRGB_TO_FLOAT_OFFSET                                                  = 0.055;
const float D3D10_SRGB_TO_FLOAT_THRESHOLD                                               = 0.04045;
const float D3D10_SRGB_TO_FLOAT_TOLERANCE_IN_ULP                                        = 0.5;
const float D3D10_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT                           = 0.0;
const float D3D_SPEC_VERSION                                                            = 1.050005;
const unsigned int D3D10_16BIT_INDEX_STRIP_CUT_VALUE                                    = 0xffff;
const unsigned int D3D10_32BIT_INDEX_STRIP_CUT_VALUE                                    = 0xffffffff;
const unsigned int D3D10_8BIT_INDEX_STRIP_CUT_VALUE                                     = 0xff;
const unsigned int D3D10_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT                             = 9;
const unsigned int D3D10_CLIP_OR_CULL_DISTANCE_COUNT                                    = 8;
const unsigned int D3D10_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT                            = 2;
const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT                    = 14;
const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS                        = 4;
const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT               = 32;
const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT                     = 15;
const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS               = 4;
const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT                    = 15;
const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST           = 1;
const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS               = 1;
const unsigned int D3D10_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT                         = 64;
const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS     = 4;
const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT          = 1;
const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS     = 1;
const unsigned int D3D10_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT               = 32;
const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS                = 1;
const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT                     = 128;
const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST            = 1;
const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS                = 1;
const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT                         = 128;
const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS                       = 1;
const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COUNT                            = 16;
const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST                   = 1;
const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS                       = 1;
const unsigned int D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT                                = 16;
const unsigned int D3D10_COMMONSHADER_SUBROUTINE_NESTING_LIMIT                          = 32;
const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENTS                          = 4;
const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT                 = 32;
const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COUNT                               = 4096;
const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READS_PER_INST                      = 3;
const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READ_PORTS                          = 3;
const unsigned int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX                      = 10;
const int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN                               = -10;
const int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE                                  = -8;
const unsigned int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE                         = 7;
const unsigned int D3D10_DEFAULT_DEPTH_BIAS                                             = 0;
const unsigned int D3D10_DEFAULT_RENDER_TARGET_ARRAY_INDEX                              = 0;
const unsigned int D3D10_DEFAULT_SAMPLE_MASK                                            = 0xffffffff;
const unsigned int D3D10_DEFAULT_SCISSOR_ENDX                                           = 0;
const unsigned int D3D10_DEFAULT_SCISSOR_ENDY                                           = 0;
const unsigned int D3D10_DEFAULT_SCISSOR_STARTX                                         = 0;
const unsigned int D3D10_DEFAULT_SCISSOR_STARTY                                         = 0;
const unsigned int D3D10_DEFAULT_STENCIL_READ_MASK                                      = 0xff;
const unsigned int D3D10_DEFAULT_STENCIL_REFERENCE                                      = 0;
const unsigned int D3D10_DEFAULT_STENCIL_WRITE_MASK                                     = 0xff;
const unsigned int D3D10_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX                         = 0;
const unsigned int D3D10_DEFAULT_VIEWPORT_HEIGHT                                        = 0;
const unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTX                                      = 0;
const unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTY                                      = 0;
const unsigned int D3D10_DEFAULT_VIEWPORT_WIDTH                                         = 0;
const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS                        = 1;
const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT               = 32;
const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COUNT                             = 1;
const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST                    = 2;
const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS                        = 1;
const unsigned int D3D10_GS_INPUT_REGISTER_COMPONENTS                                   = 4;
const unsigned int D3D10_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          =32;
const unsigned int D3D10_GS_INPUT_REGISTER_COUNT                                        = 16;
const unsigned int D3D10_GS_INPUT_REGISTER_READS_PER_INST                               = 2;
const unsigned int D3D10_GS_INPUT_REGISTER_READ_PORTS                                   = 1;
const unsigned int D3D10_GS_INPUT_REGISTER_VERTICES                                     = 6;
const unsigned int D3D10_GS_OUTPUT_ELEMENTS                                             = 32;
const unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENTS                                  = 4;
const unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;
const unsigned int D3D10_GS_OUTPUT_REGISTER_COUNT                                       = 32;
const unsigned int D3D10_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES                        = 0;
const unsigned int D3D10_IA_DEFAULT_PRIMITIVE_TOPOLOGY                                  = 0;
const unsigned int D3D10_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES                       = 0;
const unsigned int D3D10_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT                             = 1;
const unsigned int D3D10_IA_INSTANCE_ID_BIT_COUNT                                       = 32;
const unsigned int D3D10_IA_INTEGER_ARITHMETIC_BIT_COUNT                                = 32;
const unsigned int D3D10_IA_PRIMITIVE_ID_BIT_COUNT                                      = 32;
const unsigned int D3D10_IA_VERTEX_ID_BIT_COUNT                                         = 32;
const unsigned int D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT                            = 16;
const unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS                  = 64;
const unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT                        = 16;
const unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_QUOTIENT                                = 0xffffffff;
const unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_REMAINDER                               = 0xffffffff;
const unsigned int D3D10_MAX_MAXANISOTROPY                                              = 16;
const unsigned int D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT                                   = 32;
const unsigned int D3D10_MAX_TEXTURE_DIMENSION_2_TO_EXP                                 = 17;
const unsigned int D3D10_MIN_MAXANISOTROPY                                              = 0;
const unsigned int D3D10_MIP_LOD_FRACTIONAL_BIT_COUNT                                   = 6;
const unsigned int D3D10_MIP_LOD_RANGE_BIT_COUNT                                        = 8;
const unsigned int D3D10_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT                     = 0;
const unsigned int D3D10_PIXEL_ADDRESS_RANGE_BIT_COUNT                                  = 13;
const unsigned int D3D10_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT                      = 15;
const unsigned int D3D10_PS_FRONTFACING_DEFAULT_VALUE                                   = 0xffffffff;
const unsigned int D3D10_PS_FRONTFACING_FALSE_VALUE                                     = 0;
const unsigned int D3D10_PS_FRONTFACING_TRUE_VALUE                                      = 0xffffffff;
const unsigned int D3D10_PS_INPUT_REGISTER_COMPONENTS                                   = 4;
const unsigned int D3D10_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          = 32;
const unsigned int D3D10_PS_INPUT_REGISTER_COUNT                                        = 32;
const unsigned int D3D10_PS_INPUT_REGISTER_READS_PER_INST                               = 2;
const unsigned int D3D10_PS_INPUT_REGISTER_READ_PORTS                                   = 1;
const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS                            = 1;
const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT                   = 32;
const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COUNT                                 = 1;
const unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENTS                                  = 4;
const unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;
const unsigned int D3D10_PS_OUTPUT_REGISTER_COUNT                                       = 8;
const unsigned int D3D10_REQ_BLEND_OBJECT_COUNT_PER_CONTEXT                             = 4096;
const unsigned int D3D10_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP                       = 27;
const unsigned int D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT                              = 4096;
const unsigned int D3D10_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_CONTEXT                     = 4096;
const unsigned int D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP                           = 32;
const unsigned int D3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP                                 = 32;
const unsigned int D3D10_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION                = 8192;
const unsigned int D3D10_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT                 = 1024;
const unsigned int D3D10_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT                    = 4096;
const unsigned int D3D10_REQ_MAXANISOTROPY                                              = 16;
const unsigned int D3D10_REQ_MIP_LEVELS                                                 = 14;
const unsigned int D3D10_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES                      = 2048;
const unsigned int D3D10_REQ_RASTERIZER_OBJECT_COUNT_PER_CONTEXT                        = 4096;
const unsigned int D3D10_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH                              = 8192;
const unsigned int D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES                                 = 128;
const unsigned int D3D10_REQ_RESOURCE_VIEW_COUNT_PER_CONTEXT_2_TO_EXP                   = 20;
const unsigned int D3D10_REQ_SAMPLER_OBJECT_COUNT_PER_CONTEXT                           = 4096;
const unsigned int D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION                             = 512;
const unsigned int D3D10_REQ_TEXTURE1D_U_DIMENSION                                      = 8192;
const unsigned int D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION                             = 512;
const unsigned int D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION                                 = 8192;
const unsigned int D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION                               = 2048;
const unsigned int D3D10_REQ_TEXTURECUBE_DIMENSION                                      = 8192;
const unsigned int D3D10_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL                   = 0;
const unsigned int D3D10_SHADER_MAJOR_VERSION                                           = 4;
const unsigned int D3D10_SHADER_MINOR_VERSION                                           = 0;
const unsigned int D3D10_SHIFT_INSTRUCTION_PAD_VALUE                                    = 0;
const unsigned int D3D10_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT                        = 5;
const unsigned int D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT                               = 8;
const unsigned int D3D10_SO_BUFFER_MAX_STRIDE_IN_BYTES                                  = 2048;
const unsigned int D3D10_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES                            = 256;
const unsigned int D3D10_SO_BUFFER_SLOT_COUNT                                           = 4;
const unsigned int D3D10_SO_DDI_REGISTER_INDEX_DENOTING_GAP                             = 0xffffffff;
const unsigned int D3D10_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER                         = 1;
const unsigned int D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT                               = 64;
const unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT                                   = 32;
const unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT_DOUBLED                           = 64;
const unsigned int D3D10_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE               = 4;
const unsigned int D3D10_STANDARD_PIXEL_COMPONENT_COUNT                                 = 128;
const unsigned int D3D10_STANDARD_PIXEL_ELEMENT_COUNT                                   = 32;
const unsigned int D3D10_STANDARD_VECTOR_SIZE                                           = 4;
const unsigned int D3D10_STANDARD_VERTEX_ELEMENT_COUNT                                  = 16;
const unsigned int D3D10_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT                          = 64;
const unsigned int D3D10_SUBPIXEL_FRACTIONAL_BIT_COUNT                                  = 8;
const unsigned int D3D10_SUBTEXEL_FRACTIONAL_BIT_COUNT                                  = 6;
const unsigned int D3D10_TEXEL_ADDRESS_RANGE_BIT_COUNT                                  = 18;
const unsigned int D3D10_UNBOUND_MEMORY_ACCESS_RESULT                                   = 0;
const unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_MAX_INDEX                             = 15;
const unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE             = 16;
const unsigned int D3D10_VIEWPORT_BOUNDS_MAX                                            = 16383;
const int D3D10_VIEWPORT_BOUNDS_MIN                                                     = -16384;
const unsigned int D3D10_VS_INPUT_REGISTER_COMPONENTS                                   = 4;
const unsigned int D3D10_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT                          = 32;
const unsigned int D3D10_VS_INPUT_REGISTER_COUNT                                        = 16;
const unsigned int D3D10_VS_INPUT_REGISTER_READS_PER_INST                               = 2;
const unsigned int D3D10_VS_INPUT_REGISTER_READ_PORTS                                   = 1;
const unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENTS                                  = 4;
const unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT                         = 32;
const unsigned int D3D10_VS_OUTPUT_REGISTER_COUNT                                       = 16;
const unsigned int D3D10_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT                          = 10;
const unsigned int D3D10_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP                          = 25;
const unsigned int D3D10_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP                                = 25;
const unsigned int D3D_MAJOR_VERSION                                                    = 10;
const unsigned int D3D_MINOR_VERSION                                                    = 0;
const unsigned int D3D_SPEC_DATE_DAY                                                    = 8;
const unsigned int D3D_SPEC_DATE_MONTH                                                  = 8;
const unsigned int D3D_SPEC_DATE_YEAR                                                   = 2006;
cpp_quote("#endif")

const unsigned int D3D10_APPEND_ALIGNED_ELEMENT                                         = 0xffffffff;
const unsigned int _FACD3D10                                                            = 0x87;
const unsigned int _FACD3D10DEBUG                                                       = _FACD3D10 + 1;
const unsigned int D3D10_FILTER_TYPE_MASK                                               = 0x3;
const unsigned int D3D10_SDK_VERSION                                                    = 29;

cpp_quote("#define MAKE_D3D10_HRESULT(code)                   MAKE_HRESULT( 1, _FACD3D10, code)")
cpp_quote("#define MAKE_D3D10_STATUS(code)                    MAKE_HRESULT( 0, _FACD3D10, code)")
cpp_quote("#define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS  MAKE_D3D10_HRESULT(1)")
cpp_quote("#define D3D10_ERROR_FILE_NOT_FOUND                 MAKE_D3D10_HRESULT(2)")

typedef enum D3D10_FORMAT_SUPPORT
{
	D3D10_FORMAT_SUPPORT_BUFFER = 0x1,
	D3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER = 0x2,
	D3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER = 0x4,
	D3D10_FORMAT_SUPPORT_SO_BUFFER = 0x8,
	D3D10_FORMAT_SUPPORT_TEXTURE1D = 0x10,
	D3D10_FORMAT_SUPPORT_TEXTURE2D = 0x20,
	D3D10_FORMAT_SUPPORT_TEXTURE3D = 0x40,
	D3D10_FORMAT_SUPPORT_TEXTURECUBE = 0x80,
	D3D10_FORMAT_SUPPORT_SHADER_LOAD = 0x100,
	D3D10_FORMAT_SUPPORT_SHADER_SAMPLE = 0x200,
	D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x400,
	D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT = 0x800,
	D3D10_FORMAT_SUPPORT_MIP = 0x1000,
	D3D10_FORMAT_SUPPORT_MIP_AUTOGEN = 0x2000,
	D3D10_FORMAT_SUPPORT_RENDER_TARGET = 0x4000,
	D3D10_FORMAT_SUPPORT_BLENDABLE = 0x8000,
	D3D10_FORMAT_SUPPORT_DEPTH_STENCIL = 0x10000,
	D3D10_FORMAT_SUPPORT_CPU_LOCKABLE = 0x20000,
	D3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE = 0x40000,
	D3D10_FORMAT_SUPPORT_DISPLAY = 0x80000,
	D3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT = 0x100000,
	D3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x200000,
	D3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD = 0x400000,
	D3D10_FORMAT_SUPPORT_SHADER_GATHER = 0x800000,
} D3D10_FORMAT_SUPPORT;


typedef enum D3D10_BLEND {
    D3D10_BLEND_ZERO             = 1,
    D3D10_BLEND_ONE              = 2,
    D3D10_BLEND_SRC_COLOR        = 3,
    D3D10_BLEND_INV_SRC_COLOR    = 4,
    D3D10_BLEND_SRC_ALPHA        = 5,
    D3D10_BLEND_INV_SRC_ALPHA    = 6,
    D3D10_BLEND_DEST_ALPHA       = 7,
    D3D10_BLEND_INV_DEST_ALPHA   = 8,
    D3D10_BLEND_DEST_COLOR       = 9,
    D3D10_BLEND_INV_DEST_COLOR   = 10,
    D3D10_BLEND_SRC_ALPHA_SAT    = 11,
    D3D10_BLEND_BLEND_FACTOR     = 14,
    D3D10_BLEND_INV_BLEND_FACTOR = 15,
    D3D10_BLEND_SRC1_COLOR       = 16,
    D3D10_BLEND_INV_SRC1_COLOR   = 17,
    D3D10_BLEND_SRC1_ALPHA       = 18,
    D3D10_BLEND_INV_SRC1_ALPHA   = 19
} D3D10_BLEND;

typedef enum D3D10_BLEND_OP {
    D3D10_BLEND_OP_ADD = 1,
    D3D10_BLEND_OP_SUBTRACT,
    D3D10_BLEND_OP_REV_SUBTRACT,
    D3D10_BLEND_OP_MIN,
    D3D10_BLEND_OP_MAX,
} D3D10_BLEND_OP;

typedef struct D3D10_BLEND_DESC {
    BOOL AlphaToCoverageEnable;
    BOOL BlendEnable[8];
    D3D10_BLEND SrcBlend;
    D3D10_BLEND DestBlend;
    D3D10_BLEND_OP BlendOp;
    D3D10_BLEND SrcBlendAlpha;
    D3D10_BLEND DestBlendAlpha;
    D3D10_BLEND_OP BlendOpAlpha;
    UINT8 RenderTargetWriteMask[8];
} D3D10_BLEND_DESC;

typedef enum D3D10_DEPTH_WRITE_MASK {
    D3D10_DEPTH_WRITE_MASK_ZERO,
    D3D10_DEPTH_WRITE_MASK_ALL,
} D3D10_DEPTH_WRITE_MASK;

typedef enum D3D10_COMPARISON_FUNC {
    D3D10_COMPARISON_NEVER = 1,
    D3D10_COMPARISON_LESS,
    D3D10_COMPARISON_EQUAL,
    D3D10_COMPARISON_LESS_EQUAL,
    D3D10_COMPARISON_GREATER,
    D3D10_COMPARISON_NOT_EQUAL,
    D3D10_COMPARISON_GREATER_EQUAL,
    D3D10_COMPARISON_ALWAYS,
} D3D10_COMPARISON_FUNC;

typedef enum D3D10_STENCIL_OP {
    D3D10_STENCIL_OP_KEEP = 1,
    D3D10_STENCIL_OP_ZERO,
    D3D10_STENCIL_OP_REPLACE,
    D3D10_STENCIL_OP_INCR_SAT,
    D3D10_STENCIL_OP_DECR_SAT,
    D3D10_STENCIL_OP_INVERT,
    D3D10_STENCIL_OP_INCR,
    D3D10_STENCIL_OP_DECR,
} D3D10_STENCIL_OP;

typedef struct D3D10_DEPTH_STENCILOP_DESC {
    D3D10_STENCIL_OP StencilFailOp;
    D3D10_STENCIL_OP StencilDepthFailOp;
    D3D10_STENCIL_OP StencilPassOp;
    D3D10_COMPARISON_FUNC StencilFunc;
} D3D10_DEPTH_STENCILOP_DESC;

typedef struct D3D10_DEPTH_STENCIL_DESC {
    BOOL DepthEnable;
    D3D10_DEPTH_WRITE_MASK DepthWriteMask;
    D3D10_COMPARISON_FUNC DepthFunc;
    BOOL StencilEnable;
    UINT8 StencilReadMask;
    UINT8 StencilWriteMask;
    D3D10_DEPTH_STENCILOP_DESC FrontFace;
    D3D10_DEPTH_STENCILOP_DESC BackFace;
} D3D10_DEPTH_STENCIL_DESC;

typedef enum D3D10_FILL_MODE {
    D3D10_FILL_WIREFRAME = 2,
    D3D10_FILL_SOLID,
} D3D10_FILL_MODE;

typedef enum D3D10_CULL_MODE {
    D3D10_CULL_NONE = 1,
    D3D10_CULL_FRONT,
    D3D10_CULL_BACK,
} D3D10_CULL_MODE;

typedef struct D3D10_RASTERIZER_DESC {
    D3D10_FILL_MODE FillMode;
    D3D10_CULL_MODE CullMode;
    BOOL FrontCounterClockwise;
    INT DepthBias;
    FLOAT DepthBiasClamp;
    FLOAT SlopeScaledDepthBias;
    BOOL DepthClipEnable;
    BOOL ScissorEnable;
    BOOL MultisampleEnable;
    BOOL AntialiasedLineEnable;
} D3D10_RASTERIZER_DESC;

typedef enum D3D10_FILTER {
    D3D10_FILTER_MIN_MAG_MIP_POINT                          = 0,
    D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR                   = 0x1,
    D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT             = 0x4,
    D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR                   = 0x5,
    D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT                   = 0x10,
    D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR            = 0x11,
    D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT                   = 0x14,
    D3D10_FILTER_MIN_MAG_MIP_LINEAR                         = 0x15,
    D3D10_FILTER_ANISOTROPIC                                = 0x55,
    D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT               = 0x80,
    D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR        = 0x81,
    D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT  = 0x84,
    D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR        = 0x85,
    D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT        = 0x90,
    D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
    D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT        = 0x94,
    D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR              = 0x95,
    D3D10_FILTER_COMPARISON_ANISOTROPIC                     = 0xd5,
    D3D10_FILTER_TEXT_1BIT                                  = 0x80000000
} D3D10_FILTER;

typedef enum D3D10_TEXTURE_ADDRESS_MODE {
    D3D10_TEXTURE_ADDRESS_WRAP = 1,
    D3D10_TEXTURE_ADDRESS_MIRROR,
    D3D10_TEXTURE_ADDRESS_CLAMP,
    D3D10_TEXTURE_ADDRESS_BORDER,
    D3D10_TEXTURE_ADDRESS_MIRROR_ONCE,
} D3D10_TEXTURE_ADDRESS_MODE;

typedef struct D3D10_SAMPLER_DESC {
    D3D10_FILTER Filter;
    D3D10_TEXTURE_ADDRESS_MODE AddressU;
    D3D10_TEXTURE_ADDRESS_MODE AddressV;
    D3D10_TEXTURE_ADDRESS_MODE AddressW;
    FLOAT MipLODBias;
    UINT MaxAnisotropy;
    D3D10_COMPARISON_FUNC ComparisonFunc;
    FLOAT BorderColor[4];
    FLOAT MinLOD;
    FLOAT MaxLOD;
} D3D10_SAMPLER_DESC;

typedef enum D3D10_COUNTER {
    D3D10_COUNTER_GPU_IDLE,
    D3D10_COUNTER_VERTEX_PROCESSING,
    D3D10_COUNTER_GEOMETRY_PROCESSING,
    D3D10_COUNTER_PIXEL_PROCESSING,
    D3D10_COUNTER_OTHER_GPU_PROCESSING,
    D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION,
    D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION,
    D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION,
    D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION,
    D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION,
    D3D10_COUNTER_VS_MEMORY_LIMITED,
    D3D10_COUNTER_VS_COMPUTATION_LIMITED,
    D3D10_COUNTER_GS_MEMORY_LIMITED,
    D3D10_COUNTER_GS_COMPUTATION_LIMITED,
    D3D10_COUNTER_PS_MEMORY_LIMITED,
    D3D10_COUNTER_PS_COMPUTATION_LIMITED,
    D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE,
    D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE,
    D3D10_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000
} D3D10_COUNTER;

typedef struct D3D10_COUNTER_DESC {
    D3D10_COUNTER Counter;
    UINT MiscFlags;
} D3D10_COUNTER_DESC;

typedef enum D3D10_COUNTER_TYPE {
    D3D10_COUNTER_TYPE_FLOAT32,
    D3D10_COUNTER_TYPE_UINT16,
    D3D10_COUNTER_TYPE_UINT32,
    D3D10_COUNTER_TYPE_UINT64,
} D3D10_COUNTER_TYPE;

typedef struct D3D10_COUNTER_INFO {
    D3D10_COUNTER LastDeviceDependentCounter;
    UINT NumSimultaneousCounters;
    UINT8 NumDetectableParallelUnits;
} D3D10_COUNTER_INFO;

typedef enum D3D10_RESOURCE_DIMENSION {
    D3D10_RESOURCE_DIMENSION_UNKNOWN,
    D3D10_RESOURCE_DIMENSION_BUFFER,
    D3D10_RESOURCE_DIMENSION_TEXTURE1D,
    D3D10_RESOURCE_DIMENSION_TEXTURE2D,
    D3D10_RESOURCE_DIMENSION_TEXTURE3D,
} D3D10_RESOURCE_DIMENSION;

typedef enum D3D10_USAGE {
    D3D10_USAGE_DEFAULT,
    D3D10_USAGE_IMMUTABLE,
    D3D10_USAGE_DYNAMIC,
    D3D10_USAGE_STAGING,
} D3D10_USAGE;

typedef struct D3D10_BUFFER_DESC {
    UINT ByteWidth;
    D3D10_USAGE Usage;
    UINT BindFlags;
    UINT CPUAccessFlags;
    UINT MiscFlags;
} D3D10_BUFFER_DESC;

typedef enum D3D10_MAP {
    D3D10_MAP_READ = 1,
    D3D10_MAP_WRITE,
    D3D10_MAP_READ_WRITE,
    D3D10_MAP_WRITE_DISCARD,
    D3D10_MAP_WRITE_NO_OVERWRITE,
} D3D10_MAP;

typedef struct D3D10_TEXTURE1D_DESC {
    UINT Width;
    UINT MipLevels;
    UINT ArraySize;
    DXGI_FORMAT Format;
    D3D10_USAGE Usage;
    UINT BindFlags;
    UINT CPUAccessFlags;
    UINT MiscFlags;
} D3D10_TEXTURE1D_DESC;

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

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

typedef enum D3D10_DSV_DIMENSION
{
    D3D10_DSV_DIMENSION_UNKNOWN,
    D3D10_DSV_DIMENSION_TEXTURE1D,
    D3D10_DSV_DIMENSION_TEXTURE1DARRAY,
    D3D10_DSV_DIMENSION_TEXTURE2D,
    D3D10_DSV_DIMENSION_TEXTURE2DARRAY,
    D3D10_DSV_DIMENSION_TEXTURE2DMS,
    D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY,
} D3D10_DSV_DIMENSION;

typedef struct D3D10_TEX1D_DSV {
    UINT MipSlice;
} D3D10_TEX1D_DSV;

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

typedef struct D3D10_TEX2D_DSV {
    UINT MipSlice;
} D3D10_TEX2D_DSV;

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

typedef struct D3D10_TEX2DMS_DSV {
    UINT UnusedField_NothingToDefine;
} D3D10_TEX2DMS_DSV;

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

typedef struct D3D10_DEPTH_STENCIL_VIEW_DESC {
    DXGI_FORMAT Format;
    D3D10_DSV_DIMENSION ViewDimension;
    union {
        D3D10_TEX1D_DSV Texture1D;
        D3D10_TEX1D_ARRAY_DSV Texture1DArray;
        D3D10_TEX2D_DSV Texture2D;
        D3D10_TEX2D_ARRAY_DSV Texture2DArray;
        D3D10_TEX2DMS_DSV Texture2DMS;
        D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray;
    } DUMMYUNIONNAME;
} D3D10_DEPTH_STENCIL_VIEW_DESC;

typedef enum D3D10_RTV_DIMENSION {
    D3D10_RTV_DIMENSION_UNKNOWN,
    D3D10_RTV_DIMENSION_BUFFER,
    D3D10_RTV_DIMENSION_TEXTURE1D,
    D3D10_RTV_DIMENSION_TEXTURE1DARRAY,
    D3D10_RTV_DIMENSION_TEXTURE2D,
    D3D10_RTV_DIMENSION_TEXTURE2DARRAY,
    D3D10_RTV_DIMENSION_TEXTURE2DMS,
    D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY,
    D3D10_RTV_DIMENSION_TEXTURE3D,
} D3D10_RTV_DIMENSION;

typedef struct D3D10_BUFFER_RTV {
    UINT ElementOffset;
    UINT ElementWidth;
} D3D10_BUFFER_RTV;

typedef struct D3D10_TEX1D_RTV {
    UINT MipSlice;
} D3D10_TEX1D_RTV;

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

typedef struct D3D10_TEX2D_RTV {
    UINT MipSlice;
} D3D10_TEX2D_RTV;

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

typedef struct D3D10_TEX2DMS_RTV {
    UINT UnusedField_NothingToDefine;
} D3D10_TEX2DMS_RTV;

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

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

typedef struct D3D10_RENDER_TARGET_VIEW_DESC {
    DXGI_FORMAT Format;
    D3D10_RTV_DIMENSION ViewDimension;
    union {
        D3D10_BUFFER_RTV Buffer;
        D3D10_TEX1D_RTV Texture1D;
        D3D10_TEX1D_ARRAY_RTV Texture1DArray;
        D3D10_TEX2D_RTV Texture2D;
        D3D10_TEX2D_ARRAY_RTV Texture2DArray;
        D3D10_TEX2DMS_RTV Texture2DMS;
        D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray;
        D3D10_TEX3D_RTV Texture3D;
    } DUMMYUNIONNAME;
} D3D10_RENDER_TARGET_VIEW_DESC;

typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION;

typedef struct D3D10_BUFFER_SRV {
    UINT ElementOffset;
    UINT ElementWidth;
} D3D10_BUFFER_SRV;

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

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

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

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

typedef struct D3D10_TEX2DMS_SRV {
    UINT UnusedField_NothingToDefine;
} D3D10_TEX2DMS_SRV;

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

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

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

typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC {
    DXGI_FORMAT Format;
    D3D10_SRV_DIMENSION ViewDimension;
    union {
        D3D10_BUFFER_SRV Buffer;
        D3D10_TEX1D_SRV Texture1D;
        D3D10_TEX1D_ARRAY_SRV Texture1DArray;
        D3D10_TEX2D_SRV Texture2D;
        D3D10_TEX2D_ARRAY_SRV Texture2DArray;
        D3D10_TEX2DMS_SRV Texture2DMS;
        D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;
        D3D10_TEX3D_SRV Texture3D;
        D3D10_TEXCUBE_SRV TextureCube;
    } DUMMYUNIONNAME;
} D3D10_SHADER_RESOURCE_VIEW_DESC;

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

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

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

typedef enum D3D10_INPUT_CLASSIFICATION {
    D3D10_INPUT_PER_VERTEX_DATA,
    D3D10_INPUT_PER_INSTANCE_DATA,
} D3D10_INPUT_CLASSIFICATION;

typedef struct D3D10_INPUT_ELEMENT_DESC {
    LPCSTR SemanticName;
    UINT SemanticIndex;
    DXGI_FORMAT Format;
    UINT InputSlot;
    UINT AlignedByteOffset;
    D3D10_INPUT_CLASSIFICATION InputSlotClass;
    UINT InstanceDataStepRate;
} D3D10_INPUT_ELEMENT_DESC;

typedef enum D3D10_QUERY {
    D3D10_QUERY_EVENT,
    D3D10_QUERY_OCCLUSION,
    D3D10_QUERY_TIMESTAMP,
    D3D10_QUERY_TIMESTAMP_DISJOINT,
    D3D10_QUERY_PIPELINE_STATISTICS,
    D3D10_QUERY_OCCLUSION_PREDICATE,
    D3D10_QUERY_SO_STATISTICS,
    D3D10_QUERY_SO_OVERFLOW_PREDICATE,
} D3D10_QUERY;

typedef struct D3D10_QUERY_DESC {
    D3D10_QUERY Query;
    UINT MiscFlags;
} D3D10_QUERY_DESC;

typedef D3D_PRIMITIVE_TOPOLOGY D3D10_PRIMITIVE_TOPOLOGY;

typedef RECT D3D10_RECT;

typedef struct D3D10_VIEWPORT {
    INT TopLeftX;
    INT TopLeftY;
    UINT Width;
    UINT Height;
    FLOAT MinDepth;
    FLOAT MaxDepth;
} D3D10_VIEWPORT;

typedef struct D3D10_MAPPED_TEXTURE2D {
    void *pData;
    UINT RowPitch;
} D3D10_MAPPED_TEXTURE2D;

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

typedef enum D3D10_BIND_FLAG {
    D3D10_BIND_VERTEX_BUFFER   = 0x1,
    D3D10_BIND_INDEX_BUFFER    = 0x2,
    D3D10_BIND_CONSTANT_BUFFER = 0x4,
    D3D10_BIND_SHADER_RESOURCE = 0x8,
    D3D10_BIND_STREAM_OUTPUT   = 0x10,
    D3D10_BIND_RENDER_TARGET   = 0x20,
    D3D10_BIND_DEPTH_STENCIL   = 0x40
} D3D10_BIND_FLAG;

typedef enum D3D10_CPU_ACCESS_FLAG {
    D3D10_CPU_ACCESS_WRITE = 0x10000,
    D3D10_CPU_ACCESS_READ  = 0x20000
} D3D10_CPU_ACCESS_FLAG;

typedef enum D3D10_RESOURCE_MISC_FLAG {
    D3D10_RESOURCE_MISC_GENERATE_MIPS = 0x1,
    D3D10_RESOURCE_MISC_SHARED        = 0x2,
    D3D10_RESOURCE_MISC_TEXTURECUBE   = 0x4,
    D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX	= 0x10L,
    D3D10_RESOURCE_MISC_GDI_COMPATIBLE	= 0x20L
} D3D10_RESOURCE_MISC_FLAG;

typedef enum D3D10_MAP_FLAG {
    D3D10_MAP_FLAG_DO_NOT_WAIT = 0x100000,
} D3D10_MAP_FLAG;

typedef enum D3D10_CLEAR_FLAG {
    D3D10_CLEAR_DEPTH   = 0x1,
    D3D10_CLEAR_STENCIL = 0x2
} D3D10_CLEAR_FLAG;

typedef enum D3D10_COLOR_WRITE_ENABLE {
    D3D10_COLOR_WRITE_ENABLE_RED   = 0x1,
    D3D10_COLOR_WRITE_ENABLE_GREEN = 0x2,
    D3D10_COLOR_WRITE_ENABLE_BLUE  = 0x4,
    D3D10_COLOR_WRITE_ENABLE_ALPHA = 0x8,
    D3D10_COLOR_WRITE_ENABLE_ALL   = (D3D10_COLOR_WRITE_ENABLE_RED  | D3D10_COLOR_WRITE_ENABLE_GREEN |
                                      D3D10_COLOR_WRITE_ENABLE_BLUE | D3D10_COLOR_WRITE_ENABLE_ALPHA)
} D3D10_COLOR_WRITE_ENABLE;

typedef enum D3D10_TEXTURECUBE_FACE {
    D3D10_TEXTURECUBE_FACE_POSITIVE_X,
    D3D10_TEXTURECUBE_FACE_NEGATIVE_X,
    D3D10_TEXTURECUBE_FACE_POSITIVE_Y,
    D3D10_TEXTURECUBE_FACE_NEGATIVE_Y,
    D3D10_TEXTURECUBE_FACE_POSITIVE_Z,
    D3D10_TEXTURECUBE_FACE_NEGATIVE_Z,
} D3D10_TEXTURECUBE_FACE;

typedef enum D3D10_ASYNC_GETDATA_FLAG {
    D3D10_ASYNC_GETDATA_DONOTFLUSH = 0x1,
} D3D10_ASYNC_GETDATA_FLAG;

typedef enum D3D10_FILTER_TYPE {
    D3D10_FILTER_TYPE_POINT,
    D3D10_FILTER_TYPE_LINEAR
} D3D10_FILTER_TYPE;

typedef enum D3D10_QUERY_MISC_FLAG {
    D3D10_QUERY_MISC_PREDICATEHINT = 0x1
} D3D10_QUERY_MISC_FLAG;

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

typedef struct D3D10_QUERY_DATA_PIPELINE_STATISTICS {
    UINT64 IAVertices;
    UINT64 IAPrimitives;
    UINT64 VSInvocations;
    UINT64 GSInvocations;
    UINT64 GSPrimitives;
    UINT64 CInvocations;
    UINT64 CPrimitives;
    UINT64 PSInvocations;
} D3D10_QUERY_DATA_PIPELINE_STATISTICS;

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

typedef enum D3D10_CREATE_DEVICE_FLAG {
    D3D10_CREATE_DEVICE_SINGLETHREADED                           = 0x1,
    D3D10_CREATE_DEVICE_DEBUG                                    = 0x2,
    D3D10_CREATE_DEVICE_SWITCH_TO_REF                            = 0x4,
    D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8
} D3D10_CREATE_DEVICE_FLAG;

/* Core */

interface ID3D10Device;

[
    object,
    local,
    uuid(9b7e4c00-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10DeviceChild : IUnknown
{
        void GetDevice(
            [out] ID3D10Device **a);
        HRESULT GetPrivateData(
            [in] REFGUID a,
            [in, out] UINT *b,
            [out] void *c);
        HRESULT SetPrivateData(
            [in] REFGUID a,
            [in] UINT b,
            [in] const void *c);
        HRESULT SetPrivateDataInterface(
            [in] REFGUID a,
            [in] const IUnknown *b);
}

/* Resource */

[
    object,
    local,
    uuid(9b7e4c01-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10Resource : ID3D10DeviceChild
{
        void GetType(
            [out] D3D10_RESOURCE_DIMENSION *a);
        void SetEvictionPriority(
            [in] UINT a);
        UINT GetEvictionPriority();
}

[
    object,
    local,
    uuid(9b7e4c02-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10Buffer : ID3D10Resource
{
        HRESULT Map(
            [in] D3D10_MAP a,
            [in] UINT b,
            [out] void **c);
        void Unmap();
        void GetDesc(
            [out] D3D10_BUFFER_DESC *a);
}

[
    object,
    local,
    uuid(9b7e4c03-342c-4106-a19f-4f2704f689F0)
]
interface ID3D10Texture1D : ID3D10Resource
{
        HRESULT Map(
            [in] UINT a,
            [in] D3D10_MAP b,
            [in] UINT c,
            [out] void **d);
        void Unmap(
            [in] UINT a);
        void GetDesc(
            [out] D3D10_TEXTURE1D_DESC *a);
}

[
    object,
    local,
    uuid(9b7e4c04-342c-4106-a19f-4f2704f689F0)
]
interface ID3D10Texture2D : ID3D10Resource
{
        HRESULT Map(
            [in] UINT a,
            [in] D3D10_MAP b,
            [in] UINT c,
            [out] D3D10_MAPPED_TEXTURE2D *d);
        void Unmap(
            [in] UINT a);
        void GetDesc(
            [out] D3D10_TEXTURE2D_DESC *a);
}

[
    object,
    local,
    uuid(9b7e4c05-342c-4106-a19f-4f2704f689F0)
]
interface ID3D10Texture3D : ID3D10Resource
{
        HRESULT Map(
            [in] UINT a,
            [in] D3D10_MAP b,
            [in] UINT c,
            [out] D3D10_MAPPED_TEXTURE3D *d);
        void Unmap(
            [in] UINT a);
        void GetDesc(
            [out] D3D10_TEXTURE3D_DESC *a);
}

[
    object,
    local,
    uuid(c902b03f-60a7-49ba-9936-2a3ab37a7e33)
]
interface ID3D10View : ID3D10DeviceChild
{
        void GetResource(
            [out] ID3D10Resource **a);
}

[
    object,
    local,
    uuid(9b7e4c09-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10DepthStencilView : ID3D10View
{
        void GetDesc(
            [out] D3D10_DEPTH_STENCIL_VIEW_DESC *a);
}


[
    object,
    local,
    uuid(9b7e4c08-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10RenderTargetView : ID3D10View
{
        void GetDesc(
            [out] D3D10_RENDER_TARGET_VIEW_DESC *a);
}

[
    object,
    local,
    uuid(9b7e4c07-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10ShaderResourceView  : ID3D10View
{
        void GetDesc(
            [out] D3D10_SHADER_RESOURCE_VIEW_DESC *a);
}

/* Resource End */

[
    object,
    local,
    uuid(edad8d19-8a35-4d6d-8566-2ea276cde161)
]
interface ID3D10BlendState : ID3D10DeviceChild
{
    void GetDesc(
            [out] D3D10_BLEND_DESC *a);
}

[
    object,
    local,
    uuid(2b4b1cc8-a4ad-41f8-8322-ca86fc3ec675)
]
interface ID3D10DepthStencilState : ID3D10DeviceChild
{
    void GetDesc(
            [out] D3D10_DEPTH_STENCIL_DESC *a);
}

[
    object,
    local,
    uuid(6316be88-54cd-4040-ab44-20461bc81f68)
]
interface ID3D10GeometryShader  : ID3D10DeviceChild
{
}

[
    object,
    local,
    uuid(9b7e4c0b-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10InputLayout  : ID3D10DeviceChild
{
}

[
    object,
    local,
    uuid(4968b601-9d00-4cde-8346-8e7f675819b6)
]
interface ID3D10PixelShader  : ID3D10DeviceChild
{
}

[
    object,
    local,
    uuid(a2a07292-89af-4345-be2e-c53d9fbb6e9f)
]
interface ID3D10RasterizerState  : ID3D10DeviceChild
{
    void GetDesc(
            [out] D3D10_RASTERIZER_DESC *a);
}

[
    object,
    local,
    uuid(9b7e4c0c-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10SamplerState  : ID3D10DeviceChild
{
    void GetDesc(
            [out] D3D10_SAMPLER_DESC *a);
}

[
    object,
    local,
    uuid(9b7e4c0a-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10VertexShader  : ID3D10DeviceChild
{
}

[
    object,
    local,
    uuid(9b7e4c0d-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10Asynchronous  : ID3D10DeviceChild
{
    void Begin();
    void End();
    HRESULT GetData(
            [out] void *a,
            [in] UINT b,
            [in] UINT c);
    UINT GetDataSize();
}

[
    object,
    local,
    uuid(9b7e4c11-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10Counter  : ID3D10Asynchronous
{
    void GetDesc(
            [out] D3D10_COUNTER_DESC *a);
}

[
    object,
    local,
    uuid(9b7e4C0e-342C-4106-a19f-4f2704f689f0)
]
interface ID3D10Query : ID3D10Asynchronous
{
    void GetDesc(
            [out] D3D10_QUERY_DESC *a);
}

[
    object,
    local,
    uuid(9b7e4c10-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10Predicate : ID3D10Query
{
}

[
    object,
    local,
    uuid(9b7e4c0f-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10Device : IUnknown
{
        void VSSetConstantBuffers(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10Buffer *const *c);
        void PSSetShaderResources(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10ShaderResourceView *const *c);
        void PSSetShader(
            [in] ID3D10PixelShader *a);
        void PSSetSamplers(
            [in] UINT a,
            [in] UINT b,
            [in]ID3D10SamplerState *const *c);
        void VSSetShader(
            [in] ID3D10VertexShader *a);
        void DrawIndexed(
            [in] UINT a,
            [in] UINT b,
            [in] INT c);
        void Draw(
            [in] UINT a,
            [in] UINT b);
        void PSSetConstantBuffers(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10Buffer *const *c);
        void IASetInputLayout(
            [in] ID3D10InputLayout *a);
        void IASetVertexBuffers(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10Buffer *const *c,
            [in] const UINT *d,
            [in] const UINT *e);
        void IASetIndexBuffer(
            [in] ID3D10Buffer *a,
            [in] DXGI_FORMAT b,
            [in] UINT c);
        void DrawIndexedInstanced(
            [in] UINT a,
            [in] UINT b,
            [in] UINT c,
            [in] INT d,
            [in] UINT e);
        void DrawInstanced(
            [in] UINT a,
            [in] UINT b,
            [in] UINT c,
            [in] UINT d);
        void GSSetConstantBuffers(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10Buffer *const *c);
        void GSSetShader(
            [in] ID3D10GeometryShader *a);
        void IASetPrimitiveTopology(
            [in] D3D10_PRIMITIVE_TOPOLOGY a);
        void VSSetShaderResources(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10ShaderResourceView *const *c);
        void VSSetSamplers(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10SamplerState *const *c);
        void SetPredication(
            [in] ID3D10Predicate *a,
            [in] BOOL b);
        void GSSetShaderResources(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10ShaderResourceView * const *c);
        void GSSetSamplers(
            [in] UINT a,
            [in] UINT b,
            [in] ID3D10SamplerState *const *c);
        void OMSetRenderTargets(
            [in] UINT a,
            [in] ID3D10RenderTargetView *const *b,
            [in] ID3D10DepthStencilView *c);
        void OMSetBlendState(
            [in] ID3D10BlendState *a,
            [in] const FLOAT b[4],
            [in] UINT c);
        void OMSetDepthStencilState(
            [in] ID3D10DepthStencilState *a,
            [in] UINT b);
        void SOSetTargets(
            [in] UINT a,
            [in] ID3D10Buffer *const *b,
            [in] const UINT *c);
        void DrawAuto();
        void RSSetState(
            [in] ID3D10RasterizerState *a);
        void RSSetViewports(
            [in] UINT a,
            [in] const D3D10_VIEWPORT *b);
        void RSSetScissorRects(
            [in] UINT a,
            [in] const D3D10_RECT *b);
        void CopySubresourceRegion(
            [in] ID3D10Resource *a,
            [in] UINT b,
            [in] UINT c,
            [in] UINT d,
            [in] UINT e,
            [in] ID3D10Resource *f,
            [in] UINT g,
            [in] const D3D10_BOX *h);
        void CopyResource(
            [in] ID3D10Resource *a,
            [in] ID3D10Resource *b);
        void UpdateSubresource(
            [in] ID3D10Resource *a,
            [in] UINT b,
            [in] const D3D10_BOX *c,
            [in] const void *d,
            [in] UINT e,
            [in] UINT f);
        void ClearRenderTargetView(
            [in] ID3D10RenderTargetView *a,
            [in] const FLOAT b[4]);
        void ClearDepthStencilView(
            [in] ID3D10DepthStencilView *a,
            [in] UINT b,
            [in] FLOAT c,
            [in] UINT8 d);
        void GenerateMips(
            [in] ID3D10ShaderResourceView *a);
        void ResolveSubresource(
            [in] ID3D10Resource *a,
            [in] UINT b,
            [in] ID3D10Resource *c,
            [in] UINT d,
            [in] DXGI_FORMAT e);
        void VSGetConstantBuffers(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10Buffer **c);
        void PSGetShaderResources(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10ShaderResourceView **c);
        void PSGetShader(
            [out] ID3D10PixelShader **a);
        void PSGetSamplers(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10SamplerState **c);
        void VSGetShader(
            [out] ID3D10VertexShader **a);
        void PSGetConstantBuffers(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10Buffer **c);
        void IAGetInputLayout(
            [out] ID3D10InputLayout **a);
        void IAGetVertexBuffers(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10Buffer **c,
            [out] UINT *d,
            [out] UINT *e);
        void IAGetIndexBuffer(
            [out] ID3D10Buffer **a,
            [out] DXGI_FORMAT *b,
            [out] UINT *c);
        void GSGetConstantBuffers(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10Buffer **c);
        void GSGetShader(
            [out] ID3D10GeometryShader **a);
        void IAGetPrimitiveTopology(
            [out] D3D10_PRIMITIVE_TOPOLOGY *a);
        void VSGetShaderResources(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10ShaderResourceView **c);
        void VSGetSamplers(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10SamplerState **c);
        void GetPredication(
            [out] ID3D10Predicate **a,
            [out] BOOL *b);
        void GSGetShaderResources(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10ShaderResourceView **c);
        void GSGetSamplers(
            [in] UINT a,
            [in] UINT b,
            [out] ID3D10SamplerState **c);
        void OMGetRenderTargets(
            [in] UINT a,
            [out] ID3D10RenderTargetView **b,
            [out] ID3D10DepthStencilView **c);
        void OMGetBlendState(
            [out] ID3D10BlendState **a,
            [out] FLOAT b[4],
            [out] UINT *c);
        void OMGetDepthStencilState(
            [out] ID3D10DepthStencilState **a,
            [out] UINT *b);
        void SOGetTargets(
            [in] UINT a,
            [out] ID3D10Buffer **b,
            [out] UINT *c);
        void RSGetState(
            [out] ID3D10RasterizerState **a);
        void RSGetViewports(
            [in, out] UINT *a,
            [out] D3D10_VIEWPORT *b);
        void RSGetScissorRects(
            [in, out] UINT *a,
            [out] D3D10_RECT *b);
        HRESULT GetDeviceRemovedReason();
        HRESULT SetExceptionMode(
            [in] UINT a);
        UINT GetExceptionMode();
        HRESULT GetPrivateData(
            [in] REFGUID a,
            [in, out] UINT *b,
            [out] void *c);
        HRESULT SetPrivateData(
            [in] REFGUID a,
            [in] UINT b,
            [in] const void *c);
        HRESULT SetPrivateDataInterface(
            [in] REFGUID a,
            [in] const IUnknown *b);
        void ClearState();
        void Flush();
        HRESULT CreateBuffer(
            [in] const D3D10_BUFFER_DESC *a,
            [in] const D3D10_SUBRESOURCE_DATA *b,
            [out] ID3D10Buffer **c);
        HRESULT CreateTexture1D(
            [in] const D3D10_TEXTURE1D_DESC *a,
            [in] const D3D10_SUBRESOURCE_DATA *b,
            [out] ID3D10Texture1D **c);
        HRESULT CreateTexture2D(
            [in] const D3D10_TEXTURE2D_DESC *a,
            [in] const D3D10_SUBRESOURCE_DATA *b,
            [out] ID3D10Texture2D **c);
        HRESULT CreateTexture3D(
            [in] const D3D10_TEXTURE3D_DESC *a,
            [in] const D3D10_SUBRESOURCE_DATA *b,
            [out] ID3D10Texture3D **c);
        HRESULT CreateShaderResourceView(
            [in] ID3D10Resource *a,
            [in] const D3D10_SHADER_RESOURCE_VIEW_DESC *b,
            [out] ID3D10ShaderResourceView **c);
        HRESULT CreateRenderTargetView(
            [in] ID3D10Resource *a,
            [in] const D3D10_RENDER_TARGET_VIEW_DESC *b,
            [out] ID3D10RenderTargetView **c);
        HRESULT CreateDepthStencilView(
            [in] ID3D10Resource *a,
            [in] const D3D10_DEPTH_STENCIL_VIEW_DESC *b,
            [out] ID3D10DepthStencilView **c);
        HRESULT CreateInputLayout(
            [in] const D3D10_INPUT_ELEMENT_DESC *a,
            [in] UINT b,
            [in] const void *c,
            [in] SIZE_T d,
            [out] ID3D10InputLayout **e);
        HRESULT CreateVertexShader(
            [in] const void *a,
            [in] SIZE_T b,
            [out] ID3D10VertexShader **c);
        HRESULT CreateGeometryShader(
            [in] const void *a,
            [in] SIZE_T b,
            [out] ID3D10GeometryShader **c);
        HRESULT CreateGeometryShaderWithStreamOutput(
            [in] const void *a,
            [in] SIZE_T b,
            [in] const D3D10_SO_DECLARATION_ENTRY *c,
            [in] UINT d,
            [in] UINT e,
            [out] ID3D10GeometryShader **f);
        HRESULT CreatePixelShader(
            [in] const void *a,
            [in] SIZE_T b,
            [out] ID3D10PixelShader **c);
        HRESULT CreateBlendState(
            [in] const D3D10_BLEND_DESC *a,
            [out] ID3D10BlendState **b);
        HRESULT CreateDepthStencilState(
            [in] const D3D10_DEPTH_STENCIL_DESC *a,
            [out] ID3D10DepthStencilState **b);
        HRESULT CreateRasterizerState(
            [in] const D3D10_RASTERIZER_DESC *a,
            [out] ID3D10RasterizerState **b);
        HRESULT CreateSamplerState(
            [in] const D3D10_SAMPLER_DESC *a,
            [out] ID3D10SamplerState **b);
        HRESULT CreateQuery(
            [in] const D3D10_QUERY_DESC *a,
            [out] ID3D10Query **b);
        HRESULT CreatePredicate(
            [in] const D3D10_QUERY_DESC *a,
            [out] ID3D10Predicate **b);
        HRESULT CreateCounter(
            [in] const D3D10_COUNTER_DESC *a,
            [out] ID3D10Counter **b);
        HRESULT CheckFormatSupport(
            [in] DXGI_FORMAT a,
            [out] UINT *b);
        HRESULT CheckMultisampleQualityLevels(
            [in] DXGI_FORMAT a,
            [in] UINT b,
            [out] UINT *c);
        void CheckCounterInfo(
            [out] D3D10_COUNTER_INFO *a);
        HRESULT CheckCounter(
            [in] const D3D10_COUNTER_DESC *a,
            [out] D3D10_COUNTER_TYPE *b,
            [out] UINT *c,
            [out] LPSTR d,
            [in, out] UINT *e,
            [out] LPSTR f,
            [in, out] UINT *g,
            [out] LPSTR h,
            [in, out] UINT *i);
        UINT GetCreationFlags();
        HRESULT OpenSharedResource(
            [in] HANDLE a,
            [in] REFIID b,
            [out] void **c);
        void SetTextFilterSize(
            [in] UINT a,
            [in] UINT b);
        void GetTextFilterSize(
            [out] UINT *a,
            [out] UINT *b);
}

[
    object,
    local,
    uuid(9b7e4e00-342c-4106-a19f-4f2704f689f0)
]
interface ID3D10Multithread : IUnknown
{
        void Enter();
        void Leave();
        BOOL SetMultithreadProtected(
            [in] BOOL a);
        BOOL GetMultithreadProtected();
}

cpp_quote("#include \"d3d10misc.h\"")
cpp_quote("#include \"d3d10shader.h\"")
cpp_quote("#include \"d3d10effect.h\"")
/* TODO: Include "d310sdklayers.h" as soon as it exists */
