/*
 * Copyright 2009 Henri Verbeet for CodeWeavers
 *
 * 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 "d3d10.idl";
import "d3d10shader.idl";

interface ID3D10EffectConstantBuffer;
interface ID3D10EffectBlendVariable;
interface ID3D10EffectDepthStencilVariable;
interface ID3D10EffectDepthStencilViewVariable;
interface ID3D10EffectMatrixVariable;
interface ID3D10EffectPass;
interface ID3D10EffectRasterizerVariable;
interface ID3D10EffectRenderTargetViewVariable;
interface ID3D10EffectSamplerVariable;
interface ID3D10EffectScalarVariable;
interface ID3D10EffectShaderVariable;
interface ID3D10EffectShaderResourceVariable;
interface ID3D10EffectStringVariable;
interface ID3D10EffectVectorVariable;

#ifndef D3D10_BYTES_FROM_BITS
#define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3)
#endif
cpp_quote("#ifndef D3D10_BYTES_FROM_BITS")
cpp_quote("#define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3)")
cpp_quote("#endif")

const unsigned int D3D10_EFFECT_VARIABLE_POOLED                 = 0x1;
const unsigned int D3D10_EFFECT_VARIABLE_ANNOTATION             = 0x2;
const unsigned int D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT    = 0x4;

typedef enum _D3D10_DEVICE_STATE_TYPES
{
    D3D10_DST_SO_BUFFERS = 1,
    D3D10_DST_OM_RENDER_TARGETS,
    D3D10_DST_OM_DEPTH_STENCIL_STATE,
    D3D10_DST_OM_BLEND_STATE,
    D3D10_DST_VS,
    D3D10_DST_VS_SAMPLERS,
    D3D10_DST_VS_SHADER_RESOURCES,
    D3D10_DST_VS_CONSTANT_BUFFERS,
    D3D10_DST_GS,
    D3D10_DST_GS_SAMPLERS,
    D3D10_DST_GS_SHADER_RESOURCES,
    D3D10_DST_GS_CONSTANT_BUFFERS,
    D3D10_DST_PS,
    D3D10_DST_PS_SAMPLERS,
    D3D10_DST_PS_SHADER_RESOURCES,
    D3D10_DST_PS_CONSTANT_BUFFERS,
    D3D10_DST_IA_VERTEX_BUFFERS,
    D3D10_DST_IA_INDEX_BUFFER,
    D3D10_DST_IA_INPUT_LAYOUT,
    D3D10_DST_IA_PRIMITIVE_TOPOLOGY,
    D3D10_DST_RS_VIEWPORTS,
    D3D10_DST_RS_SCISSOR_RECTS,
    D3D10_DST_RS_RASTERIZER_STATE,
    D3D10_DST_PREDICATION,
} D3D10_DEVICE_STATE_TYPES;

typedef struct _D3D10_EFFECT_TYPE_DESC
{
    const char *TypeName;
    D3D10_SHADER_VARIABLE_CLASS Class;
    D3D10_SHADER_VARIABLE_TYPE Type;
    UINT Elements;
    UINT Members;
    UINT Rows;
    UINT Columns;
    UINT PackedSize;
    UINT UnpackedSize;
    UINT Stride;
} D3D10_EFFECT_TYPE_DESC;

typedef struct _D3D10_EFFECT_VARIABLE_DESC
{
    const char *Name;
    const char *Semantic;
    UINT Flags;
    UINT Annotations;
    UINT BufferOffset;
    UINT ExplicitBindPoint;
} D3D10_EFFECT_VARIABLE_DESC;

typedef struct _D3D10_TECHNIQUE_DESC
{
    const char *Name;
    UINT Passes;
    UINT Annotations;
} D3D10_TECHNIQUE_DESC;

typedef struct _D3D10_STATE_BLOCK_MASK
{
    BYTE VS;
    BYTE VSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
    BYTE VSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
    BYTE VSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
    BYTE GS;
    BYTE GSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
    BYTE GSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
    BYTE GSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
    BYTE PS;
    BYTE PSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
    BYTE PSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
    BYTE PSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
    BYTE IAVertexBuffers[D3D10_BYTES_FROM_BITS(D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)];
    BYTE IAIndexBuffer;
    BYTE IAInputLayout;
    BYTE IAPrimitiveTopology;
    BYTE OMRenderTargets;
    BYTE OMDepthStencilState;
    BYTE OMBlendState;
    BYTE RSViewports;
    BYTE RSScissorRects;
    BYTE RSRasterizerState;
    BYTE SOBuffers;
    BYTE Predication;
} D3D10_STATE_BLOCK_MASK;

typedef struct _D3D10_EFFECT_DESC
{
    BOOL IsChildEffect;
    UINT ConstantBuffers;
    UINT SharedConstantBuffers;
    UINT GlobalVariables;
    UINT SharedGlobalVariables;
    UINT Techniques;
} D3D10_EFFECT_DESC;

typedef struct _D3D10_EFFECT_SHADER_DESC
{
    const BYTE *pInputSignature;
    BOOL IsInline;
    const BYTE *pBytecode;
    UINT BytecodeLength;
    const char *SODecl;
    UINT NumInputSignatureEntries;
    UINT NumOutputSignatureEntries;
} D3D10_EFFECT_SHADER_DESC;

typedef struct _D3D10_PASS_DESC
{
    const char *Name;
    UINT Annotations;
    BYTE *pIAInputSignature;
    SIZE_T IAInputSignatureSize;
    UINT StencilRef;
    UINT SampleMask;
    FLOAT BlendFactor[4];
} D3D10_PASS_DESC;

typedef struct _D3D10_PASS_SHADER_DESC
{
    ID3D10EffectShaderVariable *pShaderVariable;
    UINT ShaderIndex;
} D3D10_PASS_SHADER_DESC;

const unsigned int D3D10_EFFECT_COMPILE_CHILD_EFFECT    = 0x0001;
const unsigned int D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS  = 0x0002;
const unsigned int D3D10_EFFECT_SINGLE_THREADED         = 0x0008;

[
    local,
    object,
    uuid(4e9e1ddc-cd9d-4772-a837-00180b9b88fd),
]
interface ID3D10EffectType
{
    BOOL IsValid();
    HRESULT GetDesc(D3D10_EFFECT_TYPE_DESC *desc);
    ID3D10EffectType *GetMemberTypeByIndex(UINT index);
    ID3D10EffectType *GetMemberTypeByName(const char *name);
    ID3D10EffectType *GetMemberTypeBySemantic(const char *semantic);
    const char *GetMemberName(UINT index);
    const char *GetMemberSemantic(UINT index);
}

[
    local,
    object,
    uuid(ae897105-00e6-45bf-bb8e-281dd6db8e1b),
]
interface ID3D10EffectVariable
{
    BOOL IsValid();
    ID3D10EffectType *GetType();
    HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC *desc);
    ID3D10EffectVariable *GetAnnotationByIndex(UINT index);
    ID3D10EffectVariable *GetAnnotationByName(const char *name);
    ID3D10EffectVariable *GetMemberByIndex(UINT index);
    ID3D10EffectVariable *GetMemberByName(const char *name);
    ID3D10EffectVariable *GetMemberBySemantic(const char *semantic);
    ID3D10EffectVariable *GetElement(UINT index);
    ID3D10EffectConstantBuffer *GetParentConstantBuffer();
    ID3D10EffectScalarVariable *AsScalar();
    ID3D10EffectVectorVariable *AsVector();
    ID3D10EffectMatrixVariable *AsMatrix();
    ID3D10EffectStringVariable *AsString();
    ID3D10EffectShaderResourceVariable *AsShaderResource();
    ID3D10EffectRenderTargetViewVariable *AsRenderTargetView();
    ID3D10EffectDepthStencilViewVariable *AsDepthStencilView();
    ID3D10EffectConstantBuffer *AsConstantBuffer();
    ID3D10EffectShaderVariable *AsShader();
    ID3D10EffectBlendVariable *AsBlend();
    ID3D10EffectDepthStencilVariable *AsDepthStencil();
    ID3D10EffectRasterizerVariable *AsRasterizer();
    ID3D10EffectSamplerVariable *AsSampler();
    HRESULT SetRawValue(void *data, UINT offset, UINT count);
    HRESULT GetRawValue(void *data, UINT offset, UINT count);
}

[
    local,
    object,
    uuid(56648f4d-cc8b-4444-a5ad-b5a3d76e91b3),
]
interface ID3D10EffectConstantBuffer : ID3D10EffectVariable
{
    HRESULT SetConstantBuffer(ID3D10Buffer *buffer);
    HRESULT GetConstantBuffer(ID3D10Buffer **buffer);
    HRESULT SetTextureBuffer(ID3D10ShaderResourceView *view);
    HRESULT GetTextureBuffer(ID3D10ShaderResourceView **view);
}

[
    local,
    object,
    uuid(00e48f7b-d2c8-49e8-a86c-022dee53431f),
]
interface ID3D10EffectScalarVariable : ID3D10EffectVariable
{
    HRESULT SetFloat(float value);
    HRESULT GetFloat(float *value);
    HRESULT SetFloatArray(float *values, UINT offset, UINT count);
    HRESULT GetFloatArray(float *values, UINT offset, UINT count);
    HRESULT SetInt(int value);
    HRESULT GetInt(int *value);
    HRESULT SetIntArray(int *values, UINT offset, UINT count);
    HRESULT GetIntArray(int *values, UINT offset, UINT count);
    HRESULT SetBool(BOOL value);
    HRESULT GetBool(BOOL *value);
    HRESULT SetBoolArray(BOOL *values, UINT offset, UINT count);
    HRESULT GetBoolArray(BOOL *values, UINT offset, UINT count);
}

[
    local,
    object,
    uuid(62b98c44-1f82-4c67-bcd0-72cf8f217e81),
]
interface ID3D10EffectVectorVariable : ID3D10EffectVariable
{
    HRESULT SetBoolVector(BOOL *value);
    HRESULT SetIntVector(int *value);
    HRESULT SetFloatVector(float *value);
    HRESULT GetBoolVector(BOOL *value);
    HRESULT GetIntVector(int *value);
    HRESULT GetFloatVector(float *value);
    HRESULT SetBoolVectorArray(BOOL *values, UINT offset, UINT count);
    HRESULT SetIntVectorArray(int *values, UINT offset, UINT count);
    HRESULT SetFloatVectorArray(float *values, UINT offset, UINT count);
    HRESULT GetBoolVectorArray(BOOL *values, UINT offset, UINT count);
    HRESULT GetIntVectorArray(int *values, UINT offset, UINT count);
    HRESULT GetFloatVectorArray(float *values, UINT offset, UINT count);
}

[
    local,
    object,
    uuid(50666c24-b82f-4eed-a172-5b6e7e8522e0),
]
interface ID3D10EffectMatrixVariable : ID3D10EffectVariable
{
    HRESULT SetMatrix(float *data);
    HRESULT GetMatrix(float *data);
    HRESULT SetMatrixArray(float *data, UINT offset, UINT count);
    HRESULT GetMatrixArray(float *data, UINT offset, UINT count);
    HRESULT SetMatrixTranspose(float *data);
    HRESULT GetMatrixTranspose(float *data);
    HRESULT SetMatrixTransposeArray(float *data, UINT offset, UINT count);
    HRESULT GetMatrixTransposeArray(float *data, UINT offset, UINT count);
}

[
    local,
    object,
    uuid(71417501-8df9-4e0a-a78a-255f9756baff),
]
interface ID3D10EffectStringVariable : ID3D10EffectVariable
{
    HRESULT GetString(const char **str);
    HRESULT GetStringArray(const char **strs, UINT offset, UINT count);
}

[
    local,
    object,
    uuid(c0a7157b-d872-4b1d-8073-efc2acd4b1fc),
]
interface ID3D10EffectShaderResourceVariable : ID3D10EffectVariable
{
    HRESULT SetResource(ID3D10ShaderResourceView *resource);
    HRESULT GetResource(ID3D10ShaderResourceView **resource);
    HRESULT SetResourceArray(ID3D10ShaderResourceView **resources, UINT offset, UINT count);
    HRESULT GetResourceArray(ID3D10ShaderResourceView **resources, UINT offset, UINT count);
}

[
    local,
    object,
    uuid(28ca0cc3-c2c9-40bb-b57f-67b737122b17),
]
interface ID3D10EffectRenderTargetViewVariable : ID3D10EffectVariable
{
    HRESULT SetRenderTarget(ID3D10RenderTargetView *view);
    HRESULT GetRenderTarget(ID3D10RenderTargetView **view);
    HRESULT SetRenderTargetArray(ID3D10RenderTargetView **views, UINT offset, UINT count);
    HRESULT GetRenderTargetArray(ID3D10RenderTargetView **views, UINT offset, UINT count);
}

[
    local,
    object,
    uuid(3e02c918-cc79-4985-b622-2d92ad701623),
]
interface ID3D10EffectDepthStencilViewVariable : ID3D10EffectVariable
{
    HRESULT SetDepthStencil(ID3D10DepthStencilView *view);
    HRESULT GetDepthStencil(ID3D10DepthStencilView **view);
    HRESULT SetDepthStencilArray(ID3D10DepthStencilView **views, UINT offset, UINT count);
    HRESULT GetDepthStencilArray(ID3D10DepthStencilView **views, UINT offset, UINT count);
}

[
    local,
    object,
    uuid(80849279-c799-4797-8c33-0407a07d9e06),
]
interface ID3D10EffectShaderVariable : ID3D10EffectVariable
{
    HRESULT GetShaderDesc(UINT index, D3D10_EFFECT_SHADER_DESC *desc);
    HRESULT GetVertexShader(UINT index, ID3D10VertexShader **shader);
    HRESULT GetGeometryShader(UINT index, ID3D10GeometryShader **shader);
    HRESULT GetPixelShader(UINT index, ID3D10PixelShader **shader);
    HRESULT GetInputSignatureElementDesc(UINT shader_index, UINT element_index,
            D3D10_SIGNATURE_PARAMETER_DESC *desc);
    HRESULT GetOutputSignatureElementDesc(UINT shader_index, UINT element_index,
            D3D10_SIGNATURE_PARAMETER_DESC *desc);
}

[
    local,
    object,
    uuid(1fcd2294-df6d-4eae-86b3-0e9160cfb07b),
]
interface ID3D10EffectBlendVariable : ID3D10EffectVariable
{
    HRESULT GetBlendState(UINT index, ID3D10BlendState **blend_state);
    HRESULT GetBackingStore(UINT index, D3D10_BLEND_DESC *desc);
}

[
    local,
    object,
    uuid(af482368-330a-46a5-9a5c-01c71af24c8d),
]
interface ID3D10EffectDepthStencilVariable : ID3D10EffectVariable
{
    HRESULT GetDepthStencilState(UINT index, ID3D10DepthStencilState **depth_stencil_state);
    HRESULT GetBackingStore(UINT index, D3D10_DEPTH_STENCIL_DESC *desc);
}

[
    local,
    object,
    uuid(21af9f0e-4d94-4ea9-9785-2cb76b8c0b34),
]
interface ID3D10EffectRasterizerVariable : ID3D10EffectVariable
{
    HRESULT GetRasterizerState(UINT index, ID3D10RasterizerState **rasterizer_state);
    HRESULT GetBackingStore(UINT index, D3D10_RASTERIZER_DESC *desc);
}

[
    local,
    object,
    uuid(6530d5c7-07e9-4271-a418-e7ce4bd1e480),
]
interface ID3D10EffectSamplerVariable : ID3D10EffectVariable
{
    HRESULT GetSampler(UINT index, ID3D10SamplerState **sampler);
    HRESULT GetBackingStore(UINT index, D3D10_SAMPLER_DESC *desc);
}

[
    local,
    object,
    uuid(db122ce8-d1c9-4292-b237-24ed3de8b175),
]
interface ID3D10EffectTechnique
{
    BOOL IsValid();
    HRESULT GetDesc(D3D10_TECHNIQUE_DESC *desc);
    ID3D10EffectVariable *GetAnnotationByIndex(UINT index);
    ID3D10EffectVariable *GetAnnotationByName(const char *name);
    ID3D10EffectPass *GetPassByIndex(UINT index);
    ID3D10EffectPass *GetPassByName(const char *name);
    HRESULT ComputeStateBlockMask(D3D10_STATE_BLOCK_MASK *mask);
}

[
    local,
    object,
    uuid(51b0ca8b-ec0b-4519-870d-8ee1cb5017c7),
]
interface ID3D10Effect : IUnknown
{
    BOOL IsValid();
    BOOL IsPool();
    HRESULT GetDevice(ID3D10Device **device);
    HRESULT GetDesc(D3D10_EFFECT_DESC *desc);
    ID3D10EffectConstantBuffer *GetConstantBufferByIndex(UINT index);
    ID3D10EffectConstantBuffer *GetConstantBufferByName(const char *name);
    ID3D10EffectVariable *GetVariableByIndex(UINT index);
    ID3D10EffectVariable *GetVariableByName(const char *name);
    ID3D10EffectVariable *GetVariableBySemantic(const char *semantic);
    ID3D10EffectTechnique *GetTechniqueByIndex(UINT index);
    ID3D10EffectTechnique *GetTechniqueByName(const char *name);
    HRESULT Optimize();
    BOOL IsOptimized();
}

[
    local,
    object,
    uuid(9537ab04-3250-412e-8213-fcd2f8677933),
]
interface ID3D10EffectPool : IUnknown
{
    ID3D10Effect *AsEffect();
}

[
    local,
    object,
    uuid(5cfbeb89-1a06-46e0-b282-e3f9bfa36a54),
]
interface ID3D10EffectPass
{
    BOOL IsValid();
    HRESULT GetDesc(D3D10_PASS_DESC *desc);
    HRESULT GetVertexShaderDesc(D3D10_PASS_SHADER_DESC *desc);
    HRESULT GetGeometryShaderDesc(D3D10_PASS_SHADER_DESC *desc);
    HRESULT GetPixelShaderDesc(D3D10_PASS_SHADER_DESC *desc);
    ID3D10EffectVariable *GetAnnotationByIndex(UINT index);
    ID3D10EffectVariable *GetAnnotationByName(const char *name);
    HRESULT Apply(UINT flags);
    HRESULT ComputeStateBlockMask(D3D10_STATE_BLOCK_MASK *mask);
}

[
    local,
    object,
    uuid(0803425a-57f5-4dd6-9465-a87570834a08),
]
interface ID3D10StateBlock : IUnknown
{
    HRESULT Capture();
    HRESULT Apply();
    HRESULT ReleaseAllDeviceObjects();
    HRESULT GetDevice(ID3D10Device **device);
}

HRESULT __stdcall D3D10CompileEffectFromMemory(void *data, SIZE_T data_size, const char *filename,
        const D3D10_SHADER_MACRO *defines, ID3D10Include *include, UINT hlsl_flags, UINT fx_flags,
        ID3D10Blob **effect, ID3D10Blob **errors);
HRESULT __stdcall D3D10CreateEffectFromMemory(void *data, SIZE_T data_size, UINT flags,
        ID3D10Device *device, ID3D10EffectPool *effect_pool, ID3D10Effect **effect);
HRESULT __stdcall D3D10CreateEffectPoolFromMemory(void *data, SIZE_T data_size, UINT fx_flags,
        ID3D10Device *device, ID3D10EffectPool **effect_pool);
HRESULT __stdcall D3D10CreateStateBlock(ID3D10Device *device,
        D3D10_STATE_BLOCK_MASK *mask, ID3D10StateBlock **stateblock);

HRESULT __stdcall D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *mask_x,
        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
HRESULT __stdcall D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *mask);
HRESULT __stdcall D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *mask,
        D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);
HRESULT __stdcall D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *mask);
HRESULT __stdcall D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *mask,
        D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);
BOOL __stdcall D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *mask,
        D3D10_DEVICE_STATE_TYPES state_type, UINT idx);
HRESULT __stdcall D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *mask_x,
        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
HRESULT __stdcall D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *mask_x,
        D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
