/**************************************************************************
 *
 * Copyright 2010 Luca Barbieri
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice (including the
 * next paragraph) shall be included in all copies or substantial
 * portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 **************************************************************************/

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

const unsigned int D3D10_1_SDK_VERSION = 0x20;

cpp_quote("#ifndef _D3D10_1_CONSTANTS")
cpp_quote("#define _D3D10_1_CONSTANTS")
const unsigned int D3D10_1_DEFAULT_SAMPLE_MASK = 0xffffffff;
const float D3D10_1_FLOAT16_FUSED_TOLERANCE_IN_ULP = 0.6;
const float D3D10_1_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP = 0.6;
const unsigned int D3D10_1_GS_INPUT_REGISTER_COUNT = 32;
const unsigned int D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32;
const unsigned int D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 128;
const unsigned int D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 32;
const unsigned int D3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENTS = 1;
const unsigned int D3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32;
const unsigned int D3D10_1_PS_OUTPUT_MASK_REGISTER_COUNT = 1;
const unsigned int D3D10_1_SHADER_MAJOR_VERSION = 4;
const unsigned int D3D10_1_SHADER_MINOR_VERSION = 1;
const unsigned int D3D10_1_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048;
const unsigned int D3D10_1_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 256;
const unsigned int D3D10_1_SO_BUFFER_SLOT_COUNT = 4;
const unsigned int D3D10_1_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER = 1;
const unsigned int D3D10_1_SO_SINGLE_BUFFER_COMPONENT_LIMIT = 64;
const unsigned int D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT = 32;
const unsigned int D3D10_1_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8;
const unsigned int D3D10_1_VS_INPUT_REGISTER_COUNT = 32;
const unsigned int D3D10_1_VS_OUTPUT_REGISTER_COUNT = 32;
cpp_quote("#endif")

typedef enum D3D10_FEATURE_LEVEL1
{
	D3D10_FEATURE_LEVEL_10_0 = 0xa000,
	D3D10_FEATURE_LEVEL_10_1 = 0xa100,
	D3D10_FEATURE_LEVEL_9_1 = 0x9100,
	D3D10_FEATURE_LEVEL_9_2 = 0x9200,
	D3D10_FEATURE_LEVEL_9_3 = 0x9300
} D3D10_FEATURE_LEVEL1;

typedef struct D3D10_RENDER_TARGET_BLEND_DESC1
{
	BOOL BlendEnable;
	D3D10_BLEND SrcBlend;
	D3D10_BLEND DestBlend;
	D3D10_BLEND_OP BlendOp;
	D3D10_BLEND SrcBlendAlpha;
	D3D10_BLEND DestBlendAlpha;
	D3D10_BLEND_OP BlendOpAlpha;
	UINT8 RenderTargetWriteMask;
} D3D10_RENDER_TARGET_BLEND_DESC1;

typedef struct D3D10_BLEND_DESC1
{
	BOOL AlphaToCoverageEnable;
	BOOL IndependentBlendEnable;
	D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget[8];
} D3D10_BLEND_DESC1;

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

typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION1;

typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC1
{
	DXGI_FORMAT Format;
	D3D10_SRV_DIMENSION1 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;
		D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray;
	} ;
} D3D10_SHADER_RESOURCE_VIEW_DESC1;

typedef enum D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS
{
	D3D10_STANDARD_MULTISAMPLE_PATTERN = 0xffffffff,
	D3D10_CENTER_MULTISAMPLE_PATTERN = 0xfffffffe
} D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS;

[object, local, uuid("EDAD8D99-8A35-4d6d-8566-2EA276CDE161")]
interface ID3D10BlendState1 : ID3D10BlendState
{
	void GetDesc1( 
		[out] D3D10_BLEND_DESC1 *a
	);
};

[object, local, uuid("9B7E4C87-342C-4106-A19F-4F2704F689F0")]
interface ID3D10ShaderResourceView1 : ID3D10ShaderResourceView
{
	void GetDesc1( 
		[out] D3D10_SHADER_RESOURCE_VIEW_DESC1 *a
	);
};

[object, local, uuid("9B7E4C8F-342C-4106-A19F-4F2704F689F0")]
interface ID3D10Device1 : ID3D10Device
{
	HRESULT CreateShaderResourceView1( 
		[in] ID3D10Resource *a,
		[in] const D3D10_SHADER_RESOURCE_VIEW_DESC1 *b,
		[out,optional] ID3D10ShaderResourceView1 **c
	);
	
	HRESULT CreateBlendState1( 
		[in] const D3D10_BLEND_DESC1 *a,
		[out, optional] ID3D10BlendState1 **b
	);

	D3D10_FEATURE_LEVEL1 GetFeatureLevel();
};

//cpp_quote("#include \"d3d10_1shader.h\"")

typedef enum D3D10_DRIVER_TYPE D3D10_DRIVER_TYPE;

HRESULT D3D10CreateDevice1(
	[in,optional] IDXGIAdapter* a,
	[in] D3D10_DRIVER_TYPE b,
	[in] HMODULE c,
	[in] UINT d,
	[in] D3D10_FEATURE_LEVEL1 e,
	[in] UINT f,
	[out,optional] ID3D10Device1** g
);

typedef HRESULT (* PFN_D3D10_CREATE_DEVICE_AND_SWAP_CHAIN1)(
	[in,optional] IDXGIAdapter*,
	D3D10_DRIVER_TYPE,
	HMODULE,
	UINT, 
	D3D10_FEATURE_LEVEL1,
	UINT,
	[in, optional] DXGI_SWAP_CHAIN_DESC*,
	[out,optional] IDXGISwapChain**,
	[out,optional] ID3D10Device1**
);

HRESULT D3D10CreateDeviceAndSwapChain1(
	[in,optional] IDXGIAdapter* a,
	[in] D3D10_DRIVER_TYPE b,
	[in] HMODULE c,
	[in] UINT d,
	[in] D3D10_FEATURE_LEVEL1 e,
	[in] UINT f,
	[in,optional] DXGI_SWAP_CHAIN_DESC* g,
	[out,optional] IDXGISwapChain** h,
	[out,optional] ID3D10Device1** i
);
