/*** Autogenerated by WIDL 9.9 from /var/tmp/portage/app-emulation/wine-vanilla-9.9/work/wine-9.9/include/d2d1effectauthor.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __d2d1effectauthor_h__
#define __d2d1effectauthor_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#ifndef __ID2D1VertexBuffer_FWD_DEFINED__
#define __ID2D1VertexBuffer_FWD_DEFINED__
typedef interface ID2D1VertexBuffer ID2D1VertexBuffer;
#ifdef __cplusplus
interface ID2D1VertexBuffer;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ResourceTexture_FWD_DEFINED__
#define __ID2D1ResourceTexture_FWD_DEFINED__
typedef interface ID2D1ResourceTexture ID2D1ResourceTexture;
#ifdef __cplusplus
interface ID2D1ResourceTexture;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1RenderInfo_FWD_DEFINED__
#define __ID2D1RenderInfo_FWD_DEFINED__
typedef interface ID2D1RenderInfo ID2D1RenderInfo;
#ifdef __cplusplus
interface ID2D1RenderInfo;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DrawInfo_FWD_DEFINED__
#define __ID2D1DrawInfo_FWD_DEFINED__
typedef interface ID2D1DrawInfo ID2D1DrawInfo;
#ifdef __cplusplus
interface ID2D1DrawInfo;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ComputeInfo_FWD_DEFINED__
#define __ID2D1ComputeInfo_FWD_DEFINED__
typedef interface ID2D1ComputeInfo ID2D1ComputeInfo;
#ifdef __cplusplus
interface ID2D1ComputeInfo;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1TransformNode_FWD_DEFINED__
#define __ID2D1TransformNode_FWD_DEFINED__
typedef interface ID2D1TransformNode ID2D1TransformNode;
#ifdef __cplusplus
interface ID2D1TransformNode;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1TransformGraph_FWD_DEFINED__
#define __ID2D1TransformGraph_FWD_DEFINED__
typedef interface ID2D1TransformGraph ID2D1TransformGraph;
#ifdef __cplusplus
interface ID2D1TransformGraph;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Transform_FWD_DEFINED__
#define __ID2D1Transform_FWD_DEFINED__
typedef interface ID2D1Transform ID2D1Transform;
#ifdef __cplusplus
interface ID2D1Transform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DrawTransform_FWD_DEFINED__
#define __ID2D1DrawTransform_FWD_DEFINED__
typedef interface ID2D1DrawTransform ID2D1DrawTransform;
#ifdef __cplusplus
interface ID2D1DrawTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ComputeTransform_FWD_DEFINED__
#define __ID2D1ComputeTransform_FWD_DEFINED__
typedef interface ID2D1ComputeTransform ID2D1ComputeTransform;
#ifdef __cplusplus
interface ID2D1ComputeTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1AnalysisTransform_FWD_DEFINED__
#define __ID2D1AnalysisTransform_FWD_DEFINED__
typedef interface ID2D1AnalysisTransform ID2D1AnalysisTransform;
#ifdef __cplusplus
interface ID2D1AnalysisTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1SourceTransform_FWD_DEFINED__
#define __ID2D1SourceTransform_FWD_DEFINED__
typedef interface ID2D1SourceTransform ID2D1SourceTransform;
#ifdef __cplusplus
interface ID2D1SourceTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ConcreteTransform_FWD_DEFINED__
#define __ID2D1ConcreteTransform_FWD_DEFINED__
typedef interface ID2D1ConcreteTransform ID2D1ConcreteTransform;
#ifdef __cplusplus
interface ID2D1ConcreteTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1BlendTransform_FWD_DEFINED__
#define __ID2D1BlendTransform_FWD_DEFINED__
typedef interface ID2D1BlendTransform ID2D1BlendTransform;
#ifdef __cplusplus
interface ID2D1BlendTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1BorderTransform_FWD_DEFINED__
#define __ID2D1BorderTransform_FWD_DEFINED__
typedef interface ID2D1BorderTransform ID2D1BorderTransform;
#ifdef __cplusplus
interface ID2D1BorderTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1OffsetTransform_FWD_DEFINED__
#define __ID2D1OffsetTransform_FWD_DEFINED__
typedef interface ID2D1OffsetTransform ID2D1OffsetTransform;
#ifdef __cplusplus
interface ID2D1OffsetTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1BoundsAdjustmentTransform_FWD_DEFINED__
#define __ID2D1BoundsAdjustmentTransform_FWD_DEFINED__
typedef interface ID2D1BoundsAdjustmentTransform ID2D1BoundsAdjustmentTransform;
#ifdef __cplusplus
interface ID2D1BoundsAdjustmentTransform;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1EffectContext_FWD_DEFINED__
#define __ID2D1EffectContext_FWD_DEFINED__
typedef interface ID2D1EffectContext ID2D1EffectContext;
#ifdef __cplusplus
interface ID2D1EffectContext;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1EffectImpl_FWD_DEFINED__
#define __ID2D1EffectImpl_FWD_DEFINED__
typedef interface ID2D1EffectImpl ID2D1EffectImpl;
#ifdef __cplusplus
interface ID2D1EffectImpl;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <d2d1_1.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef HRESULT (__stdcall *PD2D1_PROPERTY_SET_FUNCTION)(IUnknown *effect,const BYTE *data,UINT32 data_size);
typedef HRESULT (__stdcall *PD2D1_PROPERTY_GET_FUNCTION)(const IUnknown *effect,BYTE *data,UINT32 data_size,UINT32 *actual_size);
typedef enum D2D1_FILTER {
    D2D1_FILTER_MIN_MAG_MIP_POINT = 0x0,
    D2D1_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1,
    D2D1_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4,
    D2D1_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5,
    D2D1_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
    D2D1_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
    D2D1_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
    D2D1_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
    D2D1_FILTER_ANISOTROPIC = 0x55,
    D2D1_FILTER_FORCE_DWORD = 0xffffffff
} D2D1_FILTER;
typedef enum D2D1_FEATURE {
    D2D1_FEATURE_DOUBLES = 0x0,
    D2D1_FEATURE_D3D10_X_HARDWARE_OPTIONS = 0x1,
    D2D1_FEATURE_FORCE_DWORD = 0xffffffff
} D2D1_FEATURE;
typedef struct D2D1_PROPERTY_BINDING {
    const WCHAR *propertyName;
    PD2D1_PROPERTY_SET_FUNCTION setFunction;
    PD2D1_PROPERTY_GET_FUNCTION getFunction;
} D2D1_PROPERTY_BINDING;
typedef enum D2D1_CHANNEL_DEPTH {
    D2D1_CHANNEL_DEPTH_DEFAULT = 0x0,
    D2D1_CHANNEL_DEPTH_1 = 0x1,
    D2D1_CHANNEL_DEPTH_4 = 0x4,
    D2D1_CHANNEL_DEPTH_FORCE_DWORD = 0xffffffff
} D2D1_CHANNEL_DEPTH;
typedef enum D2D1_CHANGE_TYPE {
    D2D1_CHANGE_TYPE_NONE = 0x0,
    D2D1_CHANGE_TYPE_PROPERTIES = 0x1,
    D2D1_CHANGE_TYPE_CONTEXT = 0x2,
    D2D1_CHANGE_TYPE_GRAPH = 0x3,
    D2D1_CHANGE_TYPE_FORCE_DWORD = 0xffffffff
} D2D1_CHANGE_TYPE;
typedef enum D2D1_PIXEL_OPTIONS {
    D2D1_PIXEL_OPTIONS_NONE = 0x0,
    D2D1_PIXEL_OPTIONS_TRIVIAL_SAMPLING = 0x1,
    D2D1_PIXEL_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_PIXEL_OPTIONS;
typedef enum D2D1_VERTEX_OPTIONS {
    D2D1_VERTEX_OPTIONS_NONE = 0x0,
    D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR = 0x1,
    D2D1_VERTEX_OPTIONS_USE_DEPTH_BUFFER = 0x2,
    D2D1_VERTEX_OPTIONS_ASSUME_NO_OVERLAP = 0x4,
    D2D1_VERTEX_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_VERTEX_OPTIONS;
typedef enum D2D1_VERTEX_USAGE {
    D2D1_VERTEX_USAGE_STATIC = 0x0,
    D2D1_VERTEX_USAGE_DYNAMIC = 0x1,
    D2D1_VERTEX_USAGE_FORCE_DWORD = 0xffffffff
} D2D1_VERTEX_USAGE;
typedef enum D2D1_BLEND_OPERATION {
    D2D1_BLEND_OPERATION_ADD = 0x1,
    D2D1_BLEND_OPERATION_SUBTRACT = 0x2,
    D2D1_BLEND_OPERATION_REV_SUBTRACT = 0x3,
    D2D1_BLEND_OPERATION_MIN = 0x4,
    D2D1_BLEND_OPERATION_MAX = 0x5,
    D2D1_BLEND_OPERATION_FORCE_DWORD = 0xffffffff
} D2D1_BLEND_OPERATION;
typedef enum D2D1_BLEND {
    D2D1_BLEND_ZERO = 1,
    D2D1_BLEND_ONE = 2,
    D2D1_BLEND_SRC_COLOR = 3,
    D2D1_BLEND_INV_SRC_COLOR = 4,
    D2D1_BLEND_SRC_ALPHA = 5,
    D2D1_BLEND_INV_SRC_ALPHA = 6,
    D2D1_BLEND_DEST_ALPHA = 7,
    D2D1_BLEND_INV_DEST_ALPHA = 8,
    D2D1_BLEND_DEST_COLOR = 9,
    D2D1_BLEND_INV_DEST_COLOR = 10,
    D2D1_BLEND_SRC_ALPHA_SAT = 11,
    D2D1_BLEND_BLEND_FACTOR = 14,
    D2D1_BLEND_INV_BLEND_FACTOR = 15,
    D2D1_BLEND_FORCE_DWORD = 0xffffffff
} D2D1_BLEND;
typedef struct D2D1_INPUT_DESCRIPTION {
    D2D1_FILTER filter;
    UINT32 levelOfDetailCount;
} D2D1_INPUT_DESCRIPTION;
typedef struct D2D1_VERTEX_RANGE {
    UINT32 startVertex;
    UINT32 vertexCount;
} D2D1_VERTEX_RANGE;
typedef struct D2D1_BLEND_DESCRIPTION {
    D2D1_BLEND sourceBlend;
    D2D1_BLEND destinationBlend;
    D2D1_BLEND_OPERATION blendOperation;
    D2D1_BLEND sourceBlendAlpha;
    D2D1_BLEND destinationBlendAlpha;
    D2D1_BLEND_OPERATION blendOperationAlpha;
    float blendFactor[4];
} D2D1_BLEND_DESCRIPTION;
typedef struct D2D1_RESOURCE_TEXTURE_PROPERTIES {
    const UINT32 *extents;
    UINT32 dimensions;
    D2D1_BUFFER_PRECISION bufferPrecision;
    D2D1_CHANNEL_DEPTH channelDepth;
    D2D1_FILTER filter;
    const D2D1_EXTEND_MODE *extendModes;
} D2D1_RESOURCE_TEXTURE_PROPERTIES;
typedef struct D2D1_INPUT_ELEMENT_DESC {
    const char *semanticName;
    UINT32 semanticIndex;
    DXGI_FORMAT format;
    UINT32 inputSlot;
    UINT32 alignedByteOffset;
} D2D1_INPUT_ELEMENT_DESC;
typedef struct D2D1_VERTEX_BUFFER_PROPERTIES {
    UINT32 inputCount;
    D2D1_VERTEX_USAGE usage;
    const BYTE *data;
    UINT32 byteWidth;
} D2D1_VERTEX_BUFFER_PROPERTIES;
typedef struct D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES {
    const BYTE *shaderBufferWithInputSignature;
    UINT32 shaderBufferSize;
    const D2D1_INPUT_ELEMENT_DESC *inputElements;
    UINT32 elementCount;
    UINT32 stride;
} D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES;
/*****************************************************************************
 * ID2D1VertexBuffer interface
 */
#ifndef __ID2D1VertexBuffer_INTERFACE_DEFINED__
#define __ID2D1VertexBuffer_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1VertexBuffer, 0x9b8b1336, 0x00a5, 0x4668, 0x92,0xb7, 0xce,0xd5,0xd8,0xbf,0x9b,0x7b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9b8b1336-00a5-4668-92b7-ced5d8bf9b7b")
ID2D1VertexBuffer : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Map(
        BYTE **data,
        UINT32 size) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unmap(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1VertexBuffer, 0x9b8b1336, 0x00a5, 0x4668, 0x92,0xb7, 0xce,0xd5,0xd8,0xbf,0x9b,0x7b)
#endif
#else
typedef struct ID2D1VertexBufferVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1VertexBuffer *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1VertexBuffer *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1VertexBuffer *This);

    /*** ID2D1VertexBuffer methods ***/
    HRESULT (STDMETHODCALLTYPE *Map)(
        ID2D1VertexBuffer *This,
        BYTE **data,
        UINT32 size);

    HRESULT (STDMETHODCALLTYPE *Unmap)(
        ID2D1VertexBuffer *This);

    END_INTERFACE
} ID2D1VertexBufferVtbl;

interface ID2D1VertexBuffer {
    CONST_VTBL ID2D1VertexBufferVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1VertexBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1VertexBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1VertexBuffer_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1VertexBuffer methods ***/
#define ID2D1VertexBuffer_Map(This,data,size) (This)->lpVtbl->Map(This,data,size)
#define ID2D1VertexBuffer_Unmap(This) (This)->lpVtbl->Unmap(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1VertexBuffer_QueryInterface(ID2D1VertexBuffer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1VertexBuffer_AddRef(ID2D1VertexBuffer* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1VertexBuffer_Release(ID2D1VertexBuffer* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1VertexBuffer methods ***/
static __WIDL_INLINE HRESULT ID2D1VertexBuffer_Map(ID2D1VertexBuffer* This,BYTE **data,UINT32 size) {
    return This->lpVtbl->Map(This,data,size);
}
static __WIDL_INLINE HRESULT ID2D1VertexBuffer_Unmap(ID2D1VertexBuffer* This) {
    return This->lpVtbl->Unmap(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1VertexBuffer_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1ResourceTexture interface
 */
#ifndef __ID2D1ResourceTexture_INTERFACE_DEFINED__
#define __ID2D1ResourceTexture_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ResourceTexture, 0x688d15c3, 0x02b0, 0x438d, 0xb1,0x3a, 0xd1,0xb4,0x4c,0x32,0xc3,0x9a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("688d15c3-02b0-438d-b13a-d1b44c32c39a")
ID2D1ResourceTexture : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Update(
        const UINT32 *min_extents,
        const UINT32 *max_extents,
        const UINT32 *strides,
        UINT32 dimensions,
        const BYTE *data,
        UINT32 data_size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ResourceTexture, 0x688d15c3, 0x02b0, 0x438d, 0xb1,0x3a, 0xd1,0xb4,0x4c,0x32,0xc3,0x9a)
#endif
#else
typedef struct ID2D1ResourceTextureVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1ResourceTexture *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1ResourceTexture *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1ResourceTexture *This);

    /*** ID2D1ResourceTexture methods ***/
    HRESULT (STDMETHODCALLTYPE *Update)(
        ID2D1ResourceTexture *This,
        const UINT32 *min_extents,
        const UINT32 *max_extents,
        const UINT32 *strides,
        UINT32 dimensions,
        const BYTE *data,
        UINT32 data_size);

    END_INTERFACE
} ID2D1ResourceTextureVtbl;

interface ID2D1ResourceTexture {
    CONST_VTBL ID2D1ResourceTextureVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ResourceTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ResourceTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ResourceTexture_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1ResourceTexture methods ***/
#define ID2D1ResourceTexture_Update(This,min_extents,max_extents,strides,dimensions,data,data_size) (This)->lpVtbl->Update(This,min_extents,max_extents,strides,dimensions,data,data_size)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1ResourceTexture_QueryInterface(ID2D1ResourceTexture* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1ResourceTexture_AddRef(ID2D1ResourceTexture* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1ResourceTexture_Release(ID2D1ResourceTexture* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1ResourceTexture methods ***/
static __WIDL_INLINE HRESULT ID2D1ResourceTexture_Update(ID2D1ResourceTexture* This,const UINT32 *min_extents,const UINT32 *max_extents,const UINT32 *strides,UINT32 dimensions,const BYTE *data,UINT32 data_size) {
    return This->lpVtbl->Update(This,min_extents,max_extents,strides,dimensions,data,data_size);
}
#endif
#endif

#endif


#endif  /* __ID2D1ResourceTexture_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1RenderInfo interface
 */
#ifndef __ID2D1RenderInfo_INTERFACE_DEFINED__
#define __ID2D1RenderInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1RenderInfo, 0x519ae1bd, 0xd19a, 0x420d, 0xb8,0x49, 0x36,0x4f,0x59,0x47,0x76,0xb7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("519ae1bd-d19a-420d-b849-364f594776b7")
ID2D1RenderInfo : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetInputDescription(
        UINT32 index,
        D2D1_INPUT_DESCRIPTION description) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputBuffer(
        D2D1_BUFFER_PRECISION precision,
        D2D1_CHANNEL_DEPTH depth) = 0;

    virtual void STDMETHODCALLTYPE SetCached(
        BOOL is_cached) = 0;

    virtual void STDMETHODCALLTYPE SetInstructionCountHint(
        UINT32 count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1RenderInfo, 0x519ae1bd, 0xd19a, 0x420d, 0xb8,0x49, 0x36,0x4f,0x59,0x47,0x76,0xb7)
#endif
#else
typedef struct ID2D1RenderInfoVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1RenderInfo *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1RenderInfo *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1RenderInfo *This);

    /*** ID2D1RenderInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInputDescription)(
        ID2D1RenderInfo *This,
        UINT32 index,
        D2D1_INPUT_DESCRIPTION description);

    HRESULT (STDMETHODCALLTYPE *SetOutputBuffer)(
        ID2D1RenderInfo *This,
        D2D1_BUFFER_PRECISION precision,
        D2D1_CHANNEL_DEPTH depth);

    void (STDMETHODCALLTYPE *SetCached)(
        ID2D1RenderInfo *This,
        BOOL is_cached);

    void (STDMETHODCALLTYPE *SetInstructionCountHint)(
        ID2D1RenderInfo *This,
        UINT32 count);

    END_INTERFACE
} ID2D1RenderInfoVtbl;

interface ID2D1RenderInfo {
    CONST_VTBL ID2D1RenderInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1RenderInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1RenderInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1RenderInfo_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1RenderInfo methods ***/
#define ID2D1RenderInfo_SetInputDescription(This,index,description) (This)->lpVtbl->SetInputDescription(This,index,description)
#define ID2D1RenderInfo_SetOutputBuffer(This,precision,depth) (This)->lpVtbl->SetOutputBuffer(This,precision,depth)
#define ID2D1RenderInfo_SetCached(This,is_cached) (This)->lpVtbl->SetCached(This,is_cached)
#define ID2D1RenderInfo_SetInstructionCountHint(This,count) (This)->lpVtbl->SetInstructionCountHint(This,count)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1RenderInfo_QueryInterface(ID2D1RenderInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1RenderInfo_AddRef(ID2D1RenderInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1RenderInfo_Release(ID2D1RenderInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1RenderInfo methods ***/
static __WIDL_INLINE HRESULT ID2D1RenderInfo_SetInputDescription(ID2D1RenderInfo* This,UINT32 index,D2D1_INPUT_DESCRIPTION description) {
    return This->lpVtbl->SetInputDescription(This,index,description);
}
static __WIDL_INLINE HRESULT ID2D1RenderInfo_SetOutputBuffer(ID2D1RenderInfo* This,D2D1_BUFFER_PRECISION precision,D2D1_CHANNEL_DEPTH depth) {
    return This->lpVtbl->SetOutputBuffer(This,precision,depth);
}
static __WIDL_INLINE void ID2D1RenderInfo_SetCached(ID2D1RenderInfo* This,BOOL is_cached) {
    This->lpVtbl->SetCached(This,is_cached);
}
static __WIDL_INLINE void ID2D1RenderInfo_SetInstructionCountHint(ID2D1RenderInfo* This,UINT32 count) {
    This->lpVtbl->SetInstructionCountHint(This,count);
}
#endif
#endif

#endif


#endif  /* __ID2D1RenderInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DrawInfo interface
 */
#ifndef __ID2D1DrawInfo_INTERFACE_DEFINED__
#define __ID2D1DrawInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DrawInfo, 0x693ce632, 0x7f2f, 0x45de, 0x93,0xfe, 0x18,0xd8,0x8b,0x37,0xaa,0x21);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("693ce632-7f2f-45de-93fe-18d88b37aa21")
ID2D1DrawInfo : public ID2D1RenderInfo
{
    virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantBuffer(
        const BYTE *buffer,
        UINT32 size) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetResourceTexture(
        UINT32 index,
        ID2D1ResourceTexture *texture) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantBuffer(
        const BYTE *buffer,
        UINT32 size) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPixelShader(
        REFGUID id,
        D2D1_PIXEL_OPTIONS options) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetVertexProcessing(
        ID2D1VertexBuffer *buffer,
        D2D1_VERTEX_OPTIONS options,
        const D2D1_BLEND_DESCRIPTION *description,
        const D2D1_VERTEX_RANGE *range,
        const GUID *shader) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DrawInfo, 0x693ce632, 0x7f2f, 0x45de, 0x93,0xfe, 0x18,0xd8,0x8b,0x37,0xaa,0x21)
#endif
#else
typedef struct ID2D1DrawInfoVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1DrawInfo *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1DrawInfo *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1DrawInfo *This);

    /*** ID2D1RenderInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInputDescription)(
        ID2D1DrawInfo *This,
        UINT32 index,
        D2D1_INPUT_DESCRIPTION description);

    HRESULT (STDMETHODCALLTYPE *SetOutputBuffer)(
        ID2D1DrawInfo *This,
        D2D1_BUFFER_PRECISION precision,
        D2D1_CHANNEL_DEPTH depth);

    void (STDMETHODCALLTYPE *SetCached)(
        ID2D1DrawInfo *This,
        BOOL is_cached);

    void (STDMETHODCALLTYPE *SetInstructionCountHint)(
        ID2D1DrawInfo *This,
        UINT32 count);

    /*** ID2D1DrawInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantBuffer)(
        ID2D1DrawInfo *This,
        const BYTE *buffer,
        UINT32 size);

    HRESULT (STDMETHODCALLTYPE *SetResourceTexture)(
        ID2D1DrawInfo *This,
        UINT32 index,
        ID2D1ResourceTexture *texture);

    HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantBuffer)(
        ID2D1DrawInfo *This,
        const BYTE *buffer,
        UINT32 size);

    HRESULT (STDMETHODCALLTYPE *SetPixelShader)(
        ID2D1DrawInfo *This,
        REFGUID id,
        D2D1_PIXEL_OPTIONS options);

    HRESULT (STDMETHODCALLTYPE *SetVertexProcessing)(
        ID2D1DrawInfo *This,
        ID2D1VertexBuffer *buffer,
        D2D1_VERTEX_OPTIONS options,
        const D2D1_BLEND_DESCRIPTION *description,
        const D2D1_VERTEX_RANGE *range,
        const GUID *shader);

    END_INTERFACE
} ID2D1DrawInfoVtbl;

interface ID2D1DrawInfo {
    CONST_VTBL ID2D1DrawInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DrawInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DrawInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DrawInfo_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1RenderInfo methods ***/
#define ID2D1DrawInfo_SetInputDescription(This,index,description) (This)->lpVtbl->SetInputDescription(This,index,description)
#define ID2D1DrawInfo_SetOutputBuffer(This,precision,depth) (This)->lpVtbl->SetOutputBuffer(This,precision,depth)
#define ID2D1DrawInfo_SetCached(This,is_cached) (This)->lpVtbl->SetCached(This,is_cached)
#define ID2D1DrawInfo_SetInstructionCountHint(This,count) (This)->lpVtbl->SetInstructionCountHint(This,count)
/*** ID2D1DrawInfo methods ***/
#define ID2D1DrawInfo_SetPixelShaderConstantBuffer(This,buffer,size) (This)->lpVtbl->SetPixelShaderConstantBuffer(This,buffer,size)
#define ID2D1DrawInfo_SetResourceTexture(This,index,texture) (This)->lpVtbl->SetResourceTexture(This,index,texture)
#define ID2D1DrawInfo_SetVertexShaderConstantBuffer(This,buffer,size) (This)->lpVtbl->SetVertexShaderConstantBuffer(This,buffer,size)
#define ID2D1DrawInfo_SetPixelShader(This,id,options) (This)->lpVtbl->SetPixelShader(This,id,options)
#define ID2D1DrawInfo_SetVertexProcessing(This,buffer,options,description,range,shader) (This)->lpVtbl->SetVertexProcessing(This,buffer,options,description,range,shader)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1DrawInfo_QueryInterface(ID2D1DrawInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1DrawInfo_AddRef(ID2D1DrawInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1DrawInfo_Release(ID2D1DrawInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1RenderInfo methods ***/
static __WIDL_INLINE HRESULT ID2D1DrawInfo_SetInputDescription(ID2D1DrawInfo* This,UINT32 index,D2D1_INPUT_DESCRIPTION description) {
    return This->lpVtbl->SetInputDescription(This,index,description);
}
static __WIDL_INLINE HRESULT ID2D1DrawInfo_SetOutputBuffer(ID2D1DrawInfo* This,D2D1_BUFFER_PRECISION precision,D2D1_CHANNEL_DEPTH depth) {
    return This->lpVtbl->SetOutputBuffer(This,precision,depth);
}
static __WIDL_INLINE void ID2D1DrawInfo_SetCached(ID2D1DrawInfo* This,BOOL is_cached) {
    This->lpVtbl->SetCached(This,is_cached);
}
static __WIDL_INLINE void ID2D1DrawInfo_SetInstructionCountHint(ID2D1DrawInfo* This,UINT32 count) {
    This->lpVtbl->SetInstructionCountHint(This,count);
}
/*** ID2D1DrawInfo methods ***/
static __WIDL_INLINE HRESULT ID2D1DrawInfo_SetPixelShaderConstantBuffer(ID2D1DrawInfo* This,const BYTE *buffer,UINT32 size) {
    return This->lpVtbl->SetPixelShaderConstantBuffer(This,buffer,size);
}
static __WIDL_INLINE HRESULT ID2D1DrawInfo_SetResourceTexture(ID2D1DrawInfo* This,UINT32 index,ID2D1ResourceTexture *texture) {
    return This->lpVtbl->SetResourceTexture(This,index,texture);
}
static __WIDL_INLINE HRESULT ID2D1DrawInfo_SetVertexShaderConstantBuffer(ID2D1DrawInfo* This,const BYTE *buffer,UINT32 size) {
    return This->lpVtbl->SetVertexShaderConstantBuffer(This,buffer,size);
}
static __WIDL_INLINE HRESULT ID2D1DrawInfo_SetPixelShader(ID2D1DrawInfo* This,REFGUID id,D2D1_PIXEL_OPTIONS options) {
    return This->lpVtbl->SetPixelShader(This,id,options);
}
static __WIDL_INLINE HRESULT ID2D1DrawInfo_SetVertexProcessing(ID2D1DrawInfo* This,ID2D1VertexBuffer *buffer,D2D1_VERTEX_OPTIONS options,const D2D1_BLEND_DESCRIPTION *description,const D2D1_VERTEX_RANGE *range,const GUID *shader) {
    return This->lpVtbl->SetVertexProcessing(This,buffer,options,description,range,shader);
}
#endif
#endif

#endif


#endif  /* __ID2D1DrawInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1ComputeInfo interface
 */
#ifndef __ID2D1ComputeInfo_INTERFACE_DEFINED__
#define __ID2D1ComputeInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ComputeInfo, 0x5598b14b, 0x9fd7, 0x48b7, 0x9b,0xdb, 0x8f,0x09,0x64,0xeb,0x38,0xbc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5598b14b-9fd7-48b7-9bdb-8f0964eb38bc")
ID2D1ComputeInfo : public ID2D1RenderInfo
{
    virtual HRESULT STDMETHODCALLTYPE SetComputeShaderconstantBuffer(
        const BYTE *buffer,
        UINT32 size) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetComputeShader(
        REFGUID id) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetResourceTexture(
        UINT32 index,
        ID2D1ResourceTexture *texture) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ComputeInfo, 0x5598b14b, 0x9fd7, 0x48b7, 0x9b,0xdb, 0x8f,0x09,0x64,0xeb,0x38,0xbc)
#endif
#else
typedef struct ID2D1ComputeInfoVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1ComputeInfo *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1ComputeInfo *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1ComputeInfo *This);

    /*** ID2D1RenderInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *SetInputDescription)(
        ID2D1ComputeInfo *This,
        UINT32 index,
        D2D1_INPUT_DESCRIPTION description);

    HRESULT (STDMETHODCALLTYPE *SetOutputBuffer)(
        ID2D1ComputeInfo *This,
        D2D1_BUFFER_PRECISION precision,
        D2D1_CHANNEL_DEPTH depth);

    void (STDMETHODCALLTYPE *SetCached)(
        ID2D1ComputeInfo *This,
        BOOL is_cached);

    void (STDMETHODCALLTYPE *SetInstructionCountHint)(
        ID2D1ComputeInfo *This,
        UINT32 count);

    /*** ID2D1ComputeInfo methods ***/
    HRESULT (STDMETHODCALLTYPE *SetComputeShaderconstantBuffer)(
        ID2D1ComputeInfo *This,
        const BYTE *buffer,
        UINT32 size);

    HRESULT (STDMETHODCALLTYPE *SetComputeShader)(
        ID2D1ComputeInfo *This,
        REFGUID id);

    HRESULT (STDMETHODCALLTYPE *SetResourceTexture)(
        ID2D1ComputeInfo *This,
        UINT32 index,
        ID2D1ResourceTexture *texture);

    END_INTERFACE
} ID2D1ComputeInfoVtbl;

interface ID2D1ComputeInfo {
    CONST_VTBL ID2D1ComputeInfoVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ComputeInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ComputeInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ComputeInfo_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1RenderInfo methods ***/
#define ID2D1ComputeInfo_SetInputDescription(This,index,description) (This)->lpVtbl->SetInputDescription(This,index,description)
#define ID2D1ComputeInfo_SetOutputBuffer(This,precision,depth) (This)->lpVtbl->SetOutputBuffer(This,precision,depth)
#define ID2D1ComputeInfo_SetCached(This,is_cached) (This)->lpVtbl->SetCached(This,is_cached)
#define ID2D1ComputeInfo_SetInstructionCountHint(This,count) (This)->lpVtbl->SetInstructionCountHint(This,count)
/*** ID2D1ComputeInfo methods ***/
#define ID2D1ComputeInfo_SetComputeShaderconstantBuffer(This,buffer,size) (This)->lpVtbl->SetComputeShaderconstantBuffer(This,buffer,size)
#define ID2D1ComputeInfo_SetComputeShader(This,id) (This)->lpVtbl->SetComputeShader(This,id)
#define ID2D1ComputeInfo_SetResourceTexture(This,index,texture) (This)->lpVtbl->SetResourceTexture(This,index,texture)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1ComputeInfo_QueryInterface(ID2D1ComputeInfo* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1ComputeInfo_AddRef(ID2D1ComputeInfo* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1ComputeInfo_Release(ID2D1ComputeInfo* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1RenderInfo methods ***/
static __WIDL_INLINE HRESULT ID2D1ComputeInfo_SetInputDescription(ID2D1ComputeInfo* This,UINT32 index,D2D1_INPUT_DESCRIPTION description) {
    return This->lpVtbl->SetInputDescription(This,index,description);
}
static __WIDL_INLINE HRESULT ID2D1ComputeInfo_SetOutputBuffer(ID2D1ComputeInfo* This,D2D1_BUFFER_PRECISION precision,D2D1_CHANNEL_DEPTH depth) {
    return This->lpVtbl->SetOutputBuffer(This,precision,depth);
}
static __WIDL_INLINE void ID2D1ComputeInfo_SetCached(ID2D1ComputeInfo* This,BOOL is_cached) {
    This->lpVtbl->SetCached(This,is_cached);
}
static __WIDL_INLINE void ID2D1ComputeInfo_SetInstructionCountHint(ID2D1ComputeInfo* This,UINT32 count) {
    This->lpVtbl->SetInstructionCountHint(This,count);
}
/*** ID2D1ComputeInfo methods ***/
static __WIDL_INLINE HRESULT ID2D1ComputeInfo_SetComputeShaderconstantBuffer(ID2D1ComputeInfo* This,const BYTE *buffer,UINT32 size) {
    return This->lpVtbl->SetComputeShaderconstantBuffer(This,buffer,size);
}
static __WIDL_INLINE HRESULT ID2D1ComputeInfo_SetComputeShader(ID2D1ComputeInfo* This,REFGUID id) {
    return This->lpVtbl->SetComputeShader(This,id);
}
static __WIDL_INLINE HRESULT ID2D1ComputeInfo_SetResourceTexture(ID2D1ComputeInfo* This,UINT32 index,ID2D1ResourceTexture *texture) {
    return This->lpVtbl->SetResourceTexture(This,index,texture);
}
#endif
#endif

#endif


#endif  /* __ID2D1ComputeInfo_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1TransformNode interface
 */
#ifndef __ID2D1TransformNode_INTERFACE_DEFINED__
#define __ID2D1TransformNode_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1TransformNode, 0xb2efe1e7, 0x729f, 0x4102, 0x94,0x9f, 0x50,0x5f,0xa2,0x1b,0xf6,0x66);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b2efe1e7-729f-4102-949f-505fa21bf666")
ID2D1TransformNode : public IUnknown
{
    virtual UINT32 STDMETHODCALLTYPE GetInputCount(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1TransformNode, 0xb2efe1e7, 0x729f, 0x4102, 0x94,0x9f, 0x50,0x5f,0xa2,0x1b,0xf6,0x66)
#endif
#else
typedef struct ID2D1TransformNodeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1TransformNode *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1TransformNode *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1TransformNode *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1TransformNode *This);

    END_INTERFACE
} ID2D1TransformNodeVtbl;

interface ID2D1TransformNode {
    CONST_VTBL ID2D1TransformNodeVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1TransformNode_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1TransformNode_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1TransformNode_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1TransformNode_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1TransformNode_QueryInterface(ID2D1TransformNode* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1TransformNode_AddRef(ID2D1TransformNode* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1TransformNode_Release(ID2D1TransformNode* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1TransformNode_GetInputCount(ID2D1TransformNode* This) {
    return This->lpVtbl->GetInputCount(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1TransformNode_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1TransformGraph interface
 */
#ifndef __ID2D1TransformGraph_INTERFACE_DEFINED__
#define __ID2D1TransformGraph_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1TransformGraph, 0x13d29038, 0xc3e6, 0x4034, 0x90,0x81, 0x13,0xb5,0x3a,0x41,0x79,0x92);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("13d29038-c3e6-4034-9081-13b53a417992")
ID2D1TransformGraph : public IUnknown
{
    virtual UINT32 STDMETHODCALLTYPE GetInputCount(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSingleTransformNode(
        ID2D1TransformNode *node) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddNode(
        ID2D1TransformNode *node) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveNode(
        ID2D1TransformNode *node) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOutputNode(
        ID2D1TransformNode *node) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConnectNode(
        ID2D1TransformNode *from_node,
        ID2D1TransformNode *to_node,
        UINT32 index) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConnectToEffectInput(
        UINT32 input_index,
        ID2D1TransformNode *node,
        UINT32 node_index) = 0;

    virtual void STDMETHODCALLTYPE Clear(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPassthroughGraph(
        UINT32 index) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1TransformGraph, 0x13d29038, 0xc3e6, 0x4034, 0x90,0x81, 0x13,0xb5,0x3a,0x41,0x79,0x92)
#endif
#else
typedef struct ID2D1TransformGraphVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1TransformGraph *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1TransformGraph *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1TransformGraph *This);

    /*** ID2D1TransformGraph methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1TransformGraph *This);

    HRESULT (STDMETHODCALLTYPE *SetSingleTransformNode)(
        ID2D1TransformGraph *This,
        ID2D1TransformNode *node);

    HRESULT (STDMETHODCALLTYPE *AddNode)(
        ID2D1TransformGraph *This,
        ID2D1TransformNode *node);

    HRESULT (STDMETHODCALLTYPE *RemoveNode)(
        ID2D1TransformGraph *This,
        ID2D1TransformNode *node);

    HRESULT (STDMETHODCALLTYPE *SetOutputNode)(
        ID2D1TransformGraph *This,
        ID2D1TransformNode *node);

    HRESULT (STDMETHODCALLTYPE *ConnectNode)(
        ID2D1TransformGraph *This,
        ID2D1TransformNode *from_node,
        ID2D1TransformNode *to_node,
        UINT32 index);

    HRESULT (STDMETHODCALLTYPE *ConnectToEffectInput)(
        ID2D1TransformGraph *This,
        UINT32 input_index,
        ID2D1TransformNode *node,
        UINT32 node_index);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1TransformGraph *This);

    HRESULT (STDMETHODCALLTYPE *SetPassthroughGraph)(
        ID2D1TransformGraph *This,
        UINT32 index);

    END_INTERFACE
} ID2D1TransformGraphVtbl;

interface ID2D1TransformGraph {
    CONST_VTBL ID2D1TransformGraphVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1TransformGraph_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1TransformGraph_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1TransformGraph_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformGraph methods ***/
#define ID2D1TransformGraph_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
#define ID2D1TransformGraph_SetSingleTransformNode(This,node) (This)->lpVtbl->SetSingleTransformNode(This,node)
#define ID2D1TransformGraph_AddNode(This,node) (This)->lpVtbl->AddNode(This,node)
#define ID2D1TransformGraph_RemoveNode(This,node) (This)->lpVtbl->RemoveNode(This,node)
#define ID2D1TransformGraph_SetOutputNode(This,node) (This)->lpVtbl->SetOutputNode(This,node)
#define ID2D1TransformGraph_ConnectNode(This,from_node,to_node,index) (This)->lpVtbl->ConnectNode(This,from_node,to_node,index)
#define ID2D1TransformGraph_ConnectToEffectInput(This,input_index,node,node_index) (This)->lpVtbl->ConnectToEffectInput(This,input_index,node,node_index)
#define ID2D1TransformGraph_Clear(This) (This)->lpVtbl->Clear(This)
#define ID2D1TransformGraph_SetPassthroughGraph(This,index) (This)->lpVtbl->SetPassthroughGraph(This,index)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1TransformGraph_QueryInterface(ID2D1TransformGraph* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1TransformGraph_AddRef(ID2D1TransformGraph* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1TransformGraph_Release(ID2D1TransformGraph* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformGraph methods ***/
static __WIDL_INLINE UINT32 ID2D1TransformGraph_GetInputCount(ID2D1TransformGraph* This) {
    return This->lpVtbl->GetInputCount(This);
}
static __WIDL_INLINE HRESULT ID2D1TransformGraph_SetSingleTransformNode(ID2D1TransformGraph* This,ID2D1TransformNode *node) {
    return This->lpVtbl->SetSingleTransformNode(This,node);
}
static __WIDL_INLINE HRESULT ID2D1TransformGraph_AddNode(ID2D1TransformGraph* This,ID2D1TransformNode *node) {
    return This->lpVtbl->AddNode(This,node);
}
static __WIDL_INLINE HRESULT ID2D1TransformGraph_RemoveNode(ID2D1TransformGraph* This,ID2D1TransformNode *node) {
    return This->lpVtbl->RemoveNode(This,node);
}
static __WIDL_INLINE HRESULT ID2D1TransformGraph_SetOutputNode(ID2D1TransformGraph* This,ID2D1TransformNode *node) {
    return This->lpVtbl->SetOutputNode(This,node);
}
static __WIDL_INLINE HRESULT ID2D1TransformGraph_ConnectNode(ID2D1TransformGraph* This,ID2D1TransformNode *from_node,ID2D1TransformNode *to_node,UINT32 index) {
    return This->lpVtbl->ConnectNode(This,from_node,to_node,index);
}
static __WIDL_INLINE HRESULT ID2D1TransformGraph_ConnectToEffectInput(ID2D1TransformGraph* This,UINT32 input_index,ID2D1TransformNode *node,UINT32 node_index) {
    return This->lpVtbl->ConnectToEffectInput(This,input_index,node,node_index);
}
static __WIDL_INLINE void ID2D1TransformGraph_Clear(ID2D1TransformGraph* This) {
    This->lpVtbl->Clear(This);
}
static __WIDL_INLINE HRESULT ID2D1TransformGraph_SetPassthroughGraph(ID2D1TransformGraph* This,UINT32 index) {
    return This->lpVtbl->SetPassthroughGraph(This,index);
}
#endif
#endif

#endif


#endif  /* __ID2D1TransformGraph_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Transform interface
 */
#ifndef __ID2D1Transform_INTERFACE_DEFINED__
#define __ID2D1Transform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Transform, 0xef1a287d, 0x342a, 0x4f76, 0x8f,0xdb, 0xda,0x0d,0x6e,0xa9,0xf9,0x2b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ef1a287d-342a-4f76-8fdb-da0d6ea9f92b")
ID2D1Transform : public ID2D1TransformNode
{
    virtual HRESULT STDMETHODCALLTYPE MapOutputRectToInputRects(
        const D2D1_RECT_L *output_rect,
        D2D1_RECT_L *input_rects,
        UINT32 input_rects_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE MapInputRectsToOutputRect(
        const D2D1_RECT_L *input_rects,
        const D2D1_RECT_L *input_opaque_rects,
        UINT32 input_rect_count,
        D2D1_RECT_L *output_rect,
        D2D1_RECT_L *output_opaque_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE MapInvalidRect(
        UINT32 index,
        D2D1_RECT_L input_rect,
        D2D1_RECT_L *output_rect) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Transform, 0xef1a287d, 0x342a, 0x4f76, 0x8f,0xdb, 0xda,0x0d,0x6e,0xa9,0xf9,0x2b)
#endif
#else
typedef struct ID2D1TransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1Transform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1Transform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1Transform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1Transform *This);

    /*** ID2D1Transform methods ***/
    HRESULT (STDMETHODCALLTYPE *MapOutputRectToInputRects)(
        ID2D1Transform *This,
        const D2D1_RECT_L *output_rect,
        D2D1_RECT_L *input_rects,
        UINT32 input_rects_count);

    HRESULT (STDMETHODCALLTYPE *MapInputRectsToOutputRect)(
        ID2D1Transform *This,
        const D2D1_RECT_L *input_rects,
        const D2D1_RECT_L *input_opaque_rects,
        UINT32 input_rect_count,
        D2D1_RECT_L *output_rect,
        D2D1_RECT_L *output_opaque_rect);

    HRESULT (STDMETHODCALLTYPE *MapInvalidRect)(
        ID2D1Transform *This,
        UINT32 index,
        D2D1_RECT_L input_rect,
        D2D1_RECT_L *output_rect);

    END_INTERFACE
} ID2D1TransformVtbl;

interface ID2D1Transform {
    CONST_VTBL ID2D1TransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Transform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Transform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Transform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1Transform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1Transform methods ***/
#define ID2D1Transform_MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count) (This)->lpVtbl->MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count)
#define ID2D1Transform_MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect) (This)->lpVtbl->MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect)
#define ID2D1Transform_MapInvalidRect(This,index,input_rect,output_rect) (This)->lpVtbl->MapInvalidRect(This,index,input_rect,output_rect)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1Transform_QueryInterface(ID2D1Transform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1Transform_AddRef(ID2D1Transform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1Transform_Release(ID2D1Transform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1Transform_GetInputCount(ID2D1Transform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1Transform methods ***/
static __WIDL_INLINE HRESULT ID2D1Transform_MapOutputRectToInputRects(ID2D1Transform* This,const D2D1_RECT_L *output_rect,D2D1_RECT_L *input_rects,UINT32 input_rects_count) {
    return This->lpVtbl->MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count);
}
static __WIDL_INLINE HRESULT ID2D1Transform_MapInputRectsToOutputRect(ID2D1Transform* This,const D2D1_RECT_L *input_rects,const D2D1_RECT_L *input_opaque_rects,UINT32 input_rect_count,D2D1_RECT_L *output_rect,D2D1_RECT_L *output_opaque_rect) {
    return This->lpVtbl->MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect);
}
static __WIDL_INLINE HRESULT ID2D1Transform_MapInvalidRect(ID2D1Transform* This,UINT32 index,D2D1_RECT_L input_rect,D2D1_RECT_L *output_rect) {
    return This->lpVtbl->MapInvalidRect(This,index,input_rect,output_rect);
}
#endif
#endif

#endif


#endif  /* __ID2D1Transform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DrawTransform interface
 */
#ifndef __ID2D1DrawTransform_INTERFACE_DEFINED__
#define __ID2D1DrawTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DrawTransform, 0x36bfdcb6, 0x9739, 0x435d, 0xa3,0x0d, 0xa6,0x53,0xbe,0xff,0x6a,0x6f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("36bfdcb6-9739-435d-a30d-a653beff6a6f")
ID2D1DrawTransform : public ID2D1Transform
{
    virtual HRESULT STDMETHODCALLTYPE SetDrawInfo(
        ID2D1DrawInfo *info) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DrawTransform, 0x36bfdcb6, 0x9739, 0x435d, 0xa3,0x0d, 0xa6,0x53,0xbe,0xff,0x6a,0x6f)
#endif
#else
typedef struct ID2D1DrawTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1DrawTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1DrawTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1DrawTransform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1DrawTransform *This);

    /*** ID2D1Transform methods ***/
    HRESULT (STDMETHODCALLTYPE *MapOutputRectToInputRects)(
        ID2D1DrawTransform *This,
        const D2D1_RECT_L *output_rect,
        D2D1_RECT_L *input_rects,
        UINT32 input_rects_count);

    HRESULT (STDMETHODCALLTYPE *MapInputRectsToOutputRect)(
        ID2D1DrawTransform *This,
        const D2D1_RECT_L *input_rects,
        const D2D1_RECT_L *input_opaque_rects,
        UINT32 input_rect_count,
        D2D1_RECT_L *output_rect,
        D2D1_RECT_L *output_opaque_rect);

    HRESULT (STDMETHODCALLTYPE *MapInvalidRect)(
        ID2D1DrawTransform *This,
        UINT32 index,
        D2D1_RECT_L input_rect,
        D2D1_RECT_L *output_rect);

    /*** ID2D1DrawTransform methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDrawInfo)(
        ID2D1DrawTransform *This,
        ID2D1DrawInfo *info);

    END_INTERFACE
} ID2D1DrawTransformVtbl;

interface ID2D1DrawTransform {
    CONST_VTBL ID2D1DrawTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DrawTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DrawTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DrawTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1DrawTransform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1Transform methods ***/
#define ID2D1DrawTransform_MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count) (This)->lpVtbl->MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count)
#define ID2D1DrawTransform_MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect) (This)->lpVtbl->MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect)
#define ID2D1DrawTransform_MapInvalidRect(This,index,input_rect,output_rect) (This)->lpVtbl->MapInvalidRect(This,index,input_rect,output_rect)
/*** ID2D1DrawTransform methods ***/
#define ID2D1DrawTransform_SetDrawInfo(This,info) (This)->lpVtbl->SetDrawInfo(This,info)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1DrawTransform_QueryInterface(ID2D1DrawTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1DrawTransform_AddRef(ID2D1DrawTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1DrawTransform_Release(ID2D1DrawTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1DrawTransform_GetInputCount(ID2D1DrawTransform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1Transform methods ***/
static __WIDL_INLINE HRESULT ID2D1DrawTransform_MapOutputRectToInputRects(ID2D1DrawTransform* This,const D2D1_RECT_L *output_rect,D2D1_RECT_L *input_rects,UINT32 input_rects_count) {
    return This->lpVtbl->MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count);
}
static __WIDL_INLINE HRESULT ID2D1DrawTransform_MapInputRectsToOutputRect(ID2D1DrawTransform* This,const D2D1_RECT_L *input_rects,const D2D1_RECT_L *input_opaque_rects,UINT32 input_rect_count,D2D1_RECT_L *output_rect,D2D1_RECT_L *output_opaque_rect) {
    return This->lpVtbl->MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect);
}
static __WIDL_INLINE HRESULT ID2D1DrawTransform_MapInvalidRect(ID2D1DrawTransform* This,UINT32 index,D2D1_RECT_L input_rect,D2D1_RECT_L *output_rect) {
    return This->lpVtbl->MapInvalidRect(This,index,input_rect,output_rect);
}
/*** ID2D1DrawTransform methods ***/
static __WIDL_INLINE HRESULT ID2D1DrawTransform_SetDrawInfo(ID2D1DrawTransform* This,ID2D1DrawInfo *info) {
    return This->lpVtbl->SetDrawInfo(This,info);
}
#endif
#endif

#endif


#endif  /* __ID2D1DrawTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1ComputeTransform interface
 */
#ifndef __ID2D1ComputeTransform_INTERFACE_DEFINED__
#define __ID2D1ComputeTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ComputeTransform, 0x0d85573c, 0x01e3, 0x4f7d, 0xbf,0xd9, 0x0d,0x60,0x60,0x8b,0xf3,0xc3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0d85573c-01e3-4f7d-bfd9-0d60608bf3c3")
ID2D1ComputeTransform : public ID2D1Transform
{
    virtual HRESULT STDMETHODCALLTYPE SetComputeInfo(
        ID2D1ComputeInfo *info) = 0;

    virtual HRESULT STDMETHODCALLTYPE CalculateThreadgroups(
        const D2D1_RECT_L *output_rect,
        UINT32 *dimension_x,
        UINT32 *dimension_y,
        UINT32 *dimension_z) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ComputeTransform, 0x0d85573c, 0x01e3, 0x4f7d, 0xbf,0xd9, 0x0d,0x60,0x60,0x8b,0xf3,0xc3)
#endif
#else
typedef struct ID2D1ComputeTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1ComputeTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1ComputeTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1ComputeTransform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1ComputeTransform *This);

    /*** ID2D1Transform methods ***/
    HRESULT (STDMETHODCALLTYPE *MapOutputRectToInputRects)(
        ID2D1ComputeTransform *This,
        const D2D1_RECT_L *output_rect,
        D2D1_RECT_L *input_rects,
        UINT32 input_rects_count);

    HRESULT (STDMETHODCALLTYPE *MapInputRectsToOutputRect)(
        ID2D1ComputeTransform *This,
        const D2D1_RECT_L *input_rects,
        const D2D1_RECT_L *input_opaque_rects,
        UINT32 input_rect_count,
        D2D1_RECT_L *output_rect,
        D2D1_RECT_L *output_opaque_rect);

    HRESULT (STDMETHODCALLTYPE *MapInvalidRect)(
        ID2D1ComputeTransform *This,
        UINT32 index,
        D2D1_RECT_L input_rect,
        D2D1_RECT_L *output_rect);

    /*** ID2D1ComputeTransform methods ***/
    HRESULT (STDMETHODCALLTYPE *SetComputeInfo)(
        ID2D1ComputeTransform *This,
        ID2D1ComputeInfo *info);

    HRESULT (STDMETHODCALLTYPE *CalculateThreadgroups)(
        ID2D1ComputeTransform *This,
        const D2D1_RECT_L *output_rect,
        UINT32 *dimension_x,
        UINT32 *dimension_y,
        UINT32 *dimension_z);

    END_INTERFACE
} ID2D1ComputeTransformVtbl;

interface ID2D1ComputeTransform {
    CONST_VTBL ID2D1ComputeTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ComputeTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ComputeTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ComputeTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1ComputeTransform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1Transform methods ***/
#define ID2D1ComputeTransform_MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count) (This)->lpVtbl->MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count)
#define ID2D1ComputeTransform_MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect) (This)->lpVtbl->MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect)
#define ID2D1ComputeTransform_MapInvalidRect(This,index,input_rect,output_rect) (This)->lpVtbl->MapInvalidRect(This,index,input_rect,output_rect)
/*** ID2D1ComputeTransform methods ***/
#define ID2D1ComputeTransform_SetComputeInfo(This,info) (This)->lpVtbl->SetComputeInfo(This,info)
#define ID2D1ComputeTransform_CalculateThreadgroups(This,output_rect,dimension_x,dimension_y,dimension_z) (This)->lpVtbl->CalculateThreadgroups(This,output_rect,dimension_x,dimension_y,dimension_z)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1ComputeTransform_QueryInterface(ID2D1ComputeTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1ComputeTransform_AddRef(ID2D1ComputeTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1ComputeTransform_Release(ID2D1ComputeTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1ComputeTransform_GetInputCount(ID2D1ComputeTransform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1Transform methods ***/
static __WIDL_INLINE HRESULT ID2D1ComputeTransform_MapOutputRectToInputRects(ID2D1ComputeTransform* This,const D2D1_RECT_L *output_rect,D2D1_RECT_L *input_rects,UINT32 input_rects_count) {
    return This->lpVtbl->MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count);
}
static __WIDL_INLINE HRESULT ID2D1ComputeTransform_MapInputRectsToOutputRect(ID2D1ComputeTransform* This,const D2D1_RECT_L *input_rects,const D2D1_RECT_L *input_opaque_rects,UINT32 input_rect_count,D2D1_RECT_L *output_rect,D2D1_RECT_L *output_opaque_rect) {
    return This->lpVtbl->MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect);
}
static __WIDL_INLINE HRESULT ID2D1ComputeTransform_MapInvalidRect(ID2D1ComputeTransform* This,UINT32 index,D2D1_RECT_L input_rect,D2D1_RECT_L *output_rect) {
    return This->lpVtbl->MapInvalidRect(This,index,input_rect,output_rect);
}
/*** ID2D1ComputeTransform methods ***/
static __WIDL_INLINE HRESULT ID2D1ComputeTransform_SetComputeInfo(ID2D1ComputeTransform* This,ID2D1ComputeInfo *info) {
    return This->lpVtbl->SetComputeInfo(This,info);
}
static __WIDL_INLINE HRESULT ID2D1ComputeTransform_CalculateThreadgroups(ID2D1ComputeTransform* This,const D2D1_RECT_L *output_rect,UINT32 *dimension_x,UINT32 *dimension_y,UINT32 *dimension_z) {
    return This->lpVtbl->CalculateThreadgroups(This,output_rect,dimension_x,dimension_y,dimension_z);
}
#endif
#endif

#endif


#endif  /* __ID2D1ComputeTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1AnalysisTransform interface
 */
#ifndef __ID2D1AnalysisTransform_INTERFACE_DEFINED__
#define __ID2D1AnalysisTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1AnalysisTransform, 0x0359dc30, 0x95e6, 0x4568, 0x90,0x55, 0x27,0x72,0x0d,0x13,0x0e,0x93);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0359dc30-95e6-4568-9055-27720d130e93")
ID2D1AnalysisTransform : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE ProcessAnalysisResults(
        const BYTE *data,
        UINT32 size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1AnalysisTransform, 0x0359dc30, 0x95e6, 0x4568, 0x90,0x55, 0x27,0x72,0x0d,0x13,0x0e,0x93)
#endif
#else
typedef struct ID2D1AnalysisTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1AnalysisTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1AnalysisTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1AnalysisTransform *This);

    /*** ID2D1AnalysisTransform methods ***/
    HRESULT (STDMETHODCALLTYPE *ProcessAnalysisResults)(
        ID2D1AnalysisTransform *This,
        const BYTE *data,
        UINT32 size);

    END_INTERFACE
} ID2D1AnalysisTransformVtbl;

interface ID2D1AnalysisTransform {
    CONST_VTBL ID2D1AnalysisTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1AnalysisTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1AnalysisTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1AnalysisTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1AnalysisTransform methods ***/
#define ID2D1AnalysisTransform_ProcessAnalysisResults(This,data,size) (This)->lpVtbl->ProcessAnalysisResults(This,data,size)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1AnalysisTransform_QueryInterface(ID2D1AnalysisTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1AnalysisTransform_AddRef(ID2D1AnalysisTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1AnalysisTransform_Release(ID2D1AnalysisTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1AnalysisTransform methods ***/
static __WIDL_INLINE HRESULT ID2D1AnalysisTransform_ProcessAnalysisResults(ID2D1AnalysisTransform* This,const BYTE *data,UINT32 size) {
    return This->lpVtbl->ProcessAnalysisResults(This,data,size);
}
#endif
#endif

#endif


#endif  /* __ID2D1AnalysisTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1SourceTransform interface
 */
#ifndef __ID2D1SourceTransform_INTERFACE_DEFINED__
#define __ID2D1SourceTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1SourceTransform, 0xdb1800dd, 0x0c34, 0x4cf9, 0xbe,0x90, 0x31,0xcc,0x0a,0x56,0x53,0xe1);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("db1800dd-0c34-4cf9-be90-31cc0a5653e1")
ID2D1SourceTransform : public ID2D1Transform
{
    virtual HRESULT STDMETHODCALLTYPE SetRenderInfo(
        ID2D1RenderInfo *info) = 0;

    virtual HRESULT STDMETHODCALLTYPE Draw(
        ID2D1Bitmap1 *target,
        const D2D1_RECT_L *draw_rect,
        D2D1_POINT_2U target_origin) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1SourceTransform, 0xdb1800dd, 0x0c34, 0x4cf9, 0xbe,0x90, 0x31,0xcc,0x0a,0x56,0x53,0xe1)
#endif
#else
typedef struct ID2D1SourceTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1SourceTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1SourceTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1SourceTransform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1SourceTransform *This);

    /*** ID2D1Transform methods ***/
    HRESULT (STDMETHODCALLTYPE *MapOutputRectToInputRects)(
        ID2D1SourceTransform *This,
        const D2D1_RECT_L *output_rect,
        D2D1_RECT_L *input_rects,
        UINT32 input_rects_count);

    HRESULT (STDMETHODCALLTYPE *MapInputRectsToOutputRect)(
        ID2D1SourceTransform *This,
        const D2D1_RECT_L *input_rects,
        const D2D1_RECT_L *input_opaque_rects,
        UINT32 input_rect_count,
        D2D1_RECT_L *output_rect,
        D2D1_RECT_L *output_opaque_rect);

    HRESULT (STDMETHODCALLTYPE *MapInvalidRect)(
        ID2D1SourceTransform *This,
        UINT32 index,
        D2D1_RECT_L input_rect,
        D2D1_RECT_L *output_rect);

    /*** ID2D1SourceTransform methods ***/
    HRESULT (STDMETHODCALLTYPE *SetRenderInfo)(
        ID2D1SourceTransform *This,
        ID2D1RenderInfo *info);

    HRESULT (STDMETHODCALLTYPE *Draw)(
        ID2D1SourceTransform *This,
        ID2D1Bitmap1 *target,
        const D2D1_RECT_L *draw_rect,
        D2D1_POINT_2U target_origin);

    END_INTERFACE
} ID2D1SourceTransformVtbl;

interface ID2D1SourceTransform {
    CONST_VTBL ID2D1SourceTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1SourceTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1SourceTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1SourceTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1SourceTransform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1Transform methods ***/
#define ID2D1SourceTransform_MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count) (This)->lpVtbl->MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count)
#define ID2D1SourceTransform_MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect) (This)->lpVtbl->MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect)
#define ID2D1SourceTransform_MapInvalidRect(This,index,input_rect,output_rect) (This)->lpVtbl->MapInvalidRect(This,index,input_rect,output_rect)
/*** ID2D1SourceTransform methods ***/
#define ID2D1SourceTransform_SetRenderInfo(This,info) (This)->lpVtbl->SetRenderInfo(This,info)
#define ID2D1SourceTransform_Draw(This,target,draw_rect,target_origin) (This)->lpVtbl->Draw(This,target,draw_rect,target_origin)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1SourceTransform_QueryInterface(ID2D1SourceTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1SourceTransform_AddRef(ID2D1SourceTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1SourceTransform_Release(ID2D1SourceTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1SourceTransform_GetInputCount(ID2D1SourceTransform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1Transform methods ***/
static __WIDL_INLINE HRESULT ID2D1SourceTransform_MapOutputRectToInputRects(ID2D1SourceTransform* This,const D2D1_RECT_L *output_rect,D2D1_RECT_L *input_rects,UINT32 input_rects_count) {
    return This->lpVtbl->MapOutputRectToInputRects(This,output_rect,input_rects,input_rects_count);
}
static __WIDL_INLINE HRESULT ID2D1SourceTransform_MapInputRectsToOutputRect(ID2D1SourceTransform* This,const D2D1_RECT_L *input_rects,const D2D1_RECT_L *input_opaque_rects,UINT32 input_rect_count,D2D1_RECT_L *output_rect,D2D1_RECT_L *output_opaque_rect) {
    return This->lpVtbl->MapInputRectsToOutputRect(This,input_rects,input_opaque_rects,input_rect_count,output_rect,output_opaque_rect);
}
static __WIDL_INLINE HRESULT ID2D1SourceTransform_MapInvalidRect(ID2D1SourceTransform* This,UINT32 index,D2D1_RECT_L input_rect,D2D1_RECT_L *output_rect) {
    return This->lpVtbl->MapInvalidRect(This,index,input_rect,output_rect);
}
/*** ID2D1SourceTransform methods ***/
static __WIDL_INLINE HRESULT ID2D1SourceTransform_SetRenderInfo(ID2D1SourceTransform* This,ID2D1RenderInfo *info) {
    return This->lpVtbl->SetRenderInfo(This,info);
}
static __WIDL_INLINE HRESULT ID2D1SourceTransform_Draw(ID2D1SourceTransform* This,ID2D1Bitmap1 *target,const D2D1_RECT_L *draw_rect,D2D1_POINT_2U target_origin) {
    return This->lpVtbl->Draw(This,target,draw_rect,target_origin);
}
#endif
#endif

#endif


#endif  /* __ID2D1SourceTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1ConcreteTransform interface
 */
#ifndef __ID2D1ConcreteTransform_INTERFACE_DEFINED__
#define __ID2D1ConcreteTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ConcreteTransform, 0x1a799d8a, 0x69f7, 0x4e4c, 0x9f,0xed, 0x43,0x7c,0xcc,0x66,0x84,0xcc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1a799d8a-69f7-4e4c-9fed-437ccc6684cc")
ID2D1ConcreteTransform : public ID2D1TransformNode
{
    virtual HRESULT STDMETHODCALLTYPE SetOutputBuffer(
        D2D1_BUFFER_PRECISION precision,
        D2D1_CHANNEL_DEPTH depth) = 0;

    virtual void STDMETHODCALLTYPE SetCached(
        BOOL is_cached) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ConcreteTransform, 0x1a799d8a, 0x69f7, 0x4e4c, 0x9f,0xed, 0x43,0x7c,0xcc,0x66,0x84,0xcc)
#endif
#else
typedef struct ID2D1ConcreteTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1ConcreteTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1ConcreteTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1ConcreteTransform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1ConcreteTransform *This);

    /*** ID2D1ConcreteTransform methods ***/
    HRESULT (STDMETHODCALLTYPE *SetOutputBuffer)(
        ID2D1ConcreteTransform *This,
        D2D1_BUFFER_PRECISION precision,
        D2D1_CHANNEL_DEPTH depth);

    void (STDMETHODCALLTYPE *SetCached)(
        ID2D1ConcreteTransform *This,
        BOOL is_cached);

    END_INTERFACE
} ID2D1ConcreteTransformVtbl;

interface ID2D1ConcreteTransform {
    CONST_VTBL ID2D1ConcreteTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ConcreteTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ConcreteTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ConcreteTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1ConcreteTransform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1ConcreteTransform methods ***/
#define ID2D1ConcreteTransform_SetOutputBuffer(This,precision,depth) (This)->lpVtbl->SetOutputBuffer(This,precision,depth)
#define ID2D1ConcreteTransform_SetCached(This,is_cached) (This)->lpVtbl->SetCached(This,is_cached)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1ConcreteTransform_QueryInterface(ID2D1ConcreteTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1ConcreteTransform_AddRef(ID2D1ConcreteTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1ConcreteTransform_Release(ID2D1ConcreteTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1ConcreteTransform_GetInputCount(ID2D1ConcreteTransform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1ConcreteTransform methods ***/
static __WIDL_INLINE HRESULT ID2D1ConcreteTransform_SetOutputBuffer(ID2D1ConcreteTransform* This,D2D1_BUFFER_PRECISION precision,D2D1_CHANNEL_DEPTH depth) {
    return This->lpVtbl->SetOutputBuffer(This,precision,depth);
}
static __WIDL_INLINE void ID2D1ConcreteTransform_SetCached(ID2D1ConcreteTransform* This,BOOL is_cached) {
    This->lpVtbl->SetCached(This,is_cached);
}
#endif
#endif

#endif


#endif  /* __ID2D1ConcreteTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1BlendTransform interface
 */
#ifndef __ID2D1BlendTransform_INTERFACE_DEFINED__
#define __ID2D1BlendTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1BlendTransform, 0x63ac0b32, 0xba44, 0x450f, 0x88,0x06, 0x7f,0x4c,0xa1,0xff,0x2f,0x1b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("63ac0b32-ba44-450f-8806-7f4ca1ff2f1b")
ID2D1BlendTransform : public ID2D1ConcreteTransform
{
    virtual void STDMETHODCALLTYPE SetDescription(
        const D2D1_BLEND_DESCRIPTION *description) = 0;

    virtual void STDMETHODCALLTYPE GetDescription(
        D2D1_BLEND_DESCRIPTION *description) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1BlendTransform, 0x63ac0b32, 0xba44, 0x450f, 0x88,0x06, 0x7f,0x4c,0xa1,0xff,0x2f,0x1b)
#endif
#else
typedef struct ID2D1BlendTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1BlendTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1BlendTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1BlendTransform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1BlendTransform *This);

    /*** ID2D1ConcreteTransform methods ***/
    HRESULT (STDMETHODCALLTYPE *SetOutputBuffer)(
        ID2D1BlendTransform *This,
        D2D1_BUFFER_PRECISION precision,
        D2D1_CHANNEL_DEPTH depth);

    void (STDMETHODCALLTYPE *SetCached)(
        ID2D1BlendTransform *This,
        BOOL is_cached);

    /*** ID2D1BlendTransform methods ***/
    void (STDMETHODCALLTYPE *SetDescription)(
        ID2D1BlendTransform *This,
        const D2D1_BLEND_DESCRIPTION *description);

    void (STDMETHODCALLTYPE *GetDescription)(
        ID2D1BlendTransform *This,
        D2D1_BLEND_DESCRIPTION *description);

    END_INTERFACE
} ID2D1BlendTransformVtbl;

interface ID2D1BlendTransform {
    CONST_VTBL ID2D1BlendTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1BlendTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1BlendTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1BlendTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1BlendTransform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1ConcreteTransform methods ***/
#define ID2D1BlendTransform_SetOutputBuffer(This,precision,depth) (This)->lpVtbl->SetOutputBuffer(This,precision,depth)
#define ID2D1BlendTransform_SetCached(This,is_cached) (This)->lpVtbl->SetCached(This,is_cached)
/*** ID2D1BlendTransform methods ***/
#define ID2D1BlendTransform_SetDescription(This,description) (This)->lpVtbl->SetDescription(This,description)
#define ID2D1BlendTransform_GetDescription(This,description) (This)->lpVtbl->GetDescription(This,description)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1BlendTransform_QueryInterface(ID2D1BlendTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1BlendTransform_AddRef(ID2D1BlendTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1BlendTransform_Release(ID2D1BlendTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1BlendTransform_GetInputCount(ID2D1BlendTransform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1ConcreteTransform methods ***/
static __WIDL_INLINE HRESULT ID2D1BlendTransform_SetOutputBuffer(ID2D1BlendTransform* This,D2D1_BUFFER_PRECISION precision,D2D1_CHANNEL_DEPTH depth) {
    return This->lpVtbl->SetOutputBuffer(This,precision,depth);
}
static __WIDL_INLINE void ID2D1BlendTransform_SetCached(ID2D1BlendTransform* This,BOOL is_cached) {
    This->lpVtbl->SetCached(This,is_cached);
}
/*** ID2D1BlendTransform methods ***/
static __WIDL_INLINE void ID2D1BlendTransform_SetDescription(ID2D1BlendTransform* This,const D2D1_BLEND_DESCRIPTION *description) {
    This->lpVtbl->SetDescription(This,description);
}
static __WIDL_INLINE void ID2D1BlendTransform_GetDescription(ID2D1BlendTransform* This,D2D1_BLEND_DESCRIPTION *description) {
    This->lpVtbl->GetDescription(This,description);
}
#endif
#endif

#endif


#endif  /* __ID2D1BlendTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1BorderTransform interface
 */
#ifndef __ID2D1BorderTransform_INTERFACE_DEFINED__
#define __ID2D1BorderTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1BorderTransform, 0x4998735c, 0x3a19, 0x473c, 0x97,0x81, 0x65,0x68,0x47,0xe3,0xa3,0x47);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4998735c-3a19-473c-9781-656847e3a347")
ID2D1BorderTransform : public ID2D1ConcreteTransform
{
    virtual void STDMETHODCALLTYPE SetExtendModeX(
        D2D1_EXTEND_MODE mode) = 0;

    virtual void STDMETHODCALLTYPE SetExtendModeY(
        D2D1_EXTEND_MODE mode) = 0;

    virtual D2D1_EXTEND_MODE STDMETHODCALLTYPE GetExtendModeX(
        ) = 0;

    virtual D2D1_EXTEND_MODE STDMETHODCALLTYPE GetExtendModeY(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1BorderTransform, 0x4998735c, 0x3a19, 0x473c, 0x97,0x81, 0x65,0x68,0x47,0xe3,0xa3,0x47)
#endif
#else
typedef struct ID2D1BorderTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1BorderTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1BorderTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1BorderTransform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1BorderTransform *This);

    /*** ID2D1ConcreteTransform methods ***/
    HRESULT (STDMETHODCALLTYPE *SetOutputBuffer)(
        ID2D1BorderTransform *This,
        D2D1_BUFFER_PRECISION precision,
        D2D1_CHANNEL_DEPTH depth);

    void (STDMETHODCALLTYPE *SetCached)(
        ID2D1BorderTransform *This,
        BOOL is_cached);

    /*** ID2D1BorderTransform methods ***/
    void (STDMETHODCALLTYPE *SetExtendModeX)(
        ID2D1BorderTransform *This,
        D2D1_EXTEND_MODE mode);

    void (STDMETHODCALLTYPE *SetExtendModeY)(
        ID2D1BorderTransform *This,
        D2D1_EXTEND_MODE mode);

    D2D1_EXTEND_MODE (STDMETHODCALLTYPE *GetExtendModeX)(
        ID2D1BorderTransform *This);

    D2D1_EXTEND_MODE (STDMETHODCALLTYPE *GetExtendModeY)(
        ID2D1BorderTransform *This);

    END_INTERFACE
} ID2D1BorderTransformVtbl;

interface ID2D1BorderTransform {
    CONST_VTBL ID2D1BorderTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1BorderTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1BorderTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1BorderTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1BorderTransform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1ConcreteTransform methods ***/
#define ID2D1BorderTransform_SetOutputBuffer(This,precision,depth) (This)->lpVtbl->SetOutputBuffer(This,precision,depth)
#define ID2D1BorderTransform_SetCached(This,is_cached) (This)->lpVtbl->SetCached(This,is_cached)
/*** ID2D1BorderTransform methods ***/
#define ID2D1BorderTransform_SetExtendModeX(This,mode) (This)->lpVtbl->SetExtendModeX(This,mode)
#define ID2D1BorderTransform_SetExtendModeY(This,mode) (This)->lpVtbl->SetExtendModeY(This,mode)
#define ID2D1BorderTransform_GetExtendModeX(This) (This)->lpVtbl->GetExtendModeX(This)
#define ID2D1BorderTransform_GetExtendModeY(This) (This)->lpVtbl->GetExtendModeY(This)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1BorderTransform_QueryInterface(ID2D1BorderTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1BorderTransform_AddRef(ID2D1BorderTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1BorderTransform_Release(ID2D1BorderTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1BorderTransform_GetInputCount(ID2D1BorderTransform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1ConcreteTransform methods ***/
static __WIDL_INLINE HRESULT ID2D1BorderTransform_SetOutputBuffer(ID2D1BorderTransform* This,D2D1_BUFFER_PRECISION precision,D2D1_CHANNEL_DEPTH depth) {
    return This->lpVtbl->SetOutputBuffer(This,precision,depth);
}
static __WIDL_INLINE void ID2D1BorderTransform_SetCached(ID2D1BorderTransform* This,BOOL is_cached) {
    This->lpVtbl->SetCached(This,is_cached);
}
/*** ID2D1BorderTransform methods ***/
static __WIDL_INLINE void ID2D1BorderTransform_SetExtendModeX(ID2D1BorderTransform* This,D2D1_EXTEND_MODE mode) {
    This->lpVtbl->SetExtendModeX(This,mode);
}
static __WIDL_INLINE void ID2D1BorderTransform_SetExtendModeY(ID2D1BorderTransform* This,D2D1_EXTEND_MODE mode) {
    This->lpVtbl->SetExtendModeY(This,mode);
}
static __WIDL_INLINE D2D1_EXTEND_MODE ID2D1BorderTransform_GetExtendModeX(ID2D1BorderTransform* This) {
    return This->lpVtbl->GetExtendModeX(This);
}
static __WIDL_INLINE D2D1_EXTEND_MODE ID2D1BorderTransform_GetExtendModeY(ID2D1BorderTransform* This) {
    return This->lpVtbl->GetExtendModeY(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1BorderTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1OffsetTransform interface
 */
#ifndef __ID2D1OffsetTransform_INTERFACE_DEFINED__
#define __ID2D1OffsetTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1OffsetTransform, 0x3fe6adea, 0x7643, 0x4f53, 0xbd,0x14, 0xa0,0xce,0x63,0xf2,0x40,0x42);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3fe6adea-7643-4f53-bd14-a0ce63f24042")
ID2D1OffsetTransform : public ID2D1TransformNode
{
    virtual void STDMETHODCALLTYPE SetOffset(
        D2D1_POINT_2L offset) = 0;

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_POINT_2L* STDMETHODCALLTYPE GetOffset(
        D2D1_POINT_2L *__ret) = 0;
    D2D1_POINT_2L STDMETHODCALLTYPE GetOffset(
        )
    {
        D2D1_POINT_2L __ret;
        return *GetOffset(&__ret);
    }
#else
    virtual D2D1_POINT_2L STDMETHODCALLTYPE GetOffset(
        ) = 0;
#endif

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1OffsetTransform, 0x3fe6adea, 0x7643, 0x4f53, 0xbd,0x14, 0xa0,0xce,0x63,0xf2,0x40,0x42)
#endif
#else
typedef struct ID2D1OffsetTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1OffsetTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1OffsetTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1OffsetTransform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1OffsetTransform *This);

    /*** ID2D1OffsetTransform methods ***/
    void (STDMETHODCALLTYPE *SetOffset)(
        ID2D1OffsetTransform *This,
        D2D1_POINT_2L offset);

    D2D1_POINT_2L * (STDMETHODCALLTYPE *GetOffset)(
        ID2D1OffsetTransform *This,
        D2D1_POINT_2L *__ret);

    END_INTERFACE
} ID2D1OffsetTransformVtbl;

interface ID2D1OffsetTransform {
    CONST_VTBL ID2D1OffsetTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1OffsetTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1OffsetTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1OffsetTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1OffsetTransform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1OffsetTransform methods ***/
#define ID2D1OffsetTransform_SetOffset(This,offset) (This)->lpVtbl->SetOffset(This,offset)
#define ID2D1OffsetTransform_GetOffset(This) ID2D1OffsetTransform_GetOffset_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1OffsetTransform_QueryInterface(ID2D1OffsetTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1OffsetTransform_AddRef(ID2D1OffsetTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1OffsetTransform_Release(ID2D1OffsetTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1OffsetTransform_GetInputCount(ID2D1OffsetTransform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1OffsetTransform methods ***/
static __WIDL_INLINE void ID2D1OffsetTransform_SetOffset(ID2D1OffsetTransform* This,D2D1_POINT_2L offset) {
    This->lpVtbl->SetOffset(This,offset);
}
static __WIDL_INLINE D2D1_POINT_2L ID2D1OffsetTransform_GetOffset(ID2D1OffsetTransform* This) {
    D2D1_POINT_2L __ret;
    return *This->lpVtbl->GetOffset(This,&__ret);
}
#endif
#endif

#endif


#endif  /* __ID2D1OffsetTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1BoundsAdjustmentTransform interface
 */
#ifndef __ID2D1BoundsAdjustmentTransform_INTERFACE_DEFINED__
#define __ID2D1BoundsAdjustmentTransform_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1BoundsAdjustmentTransform, 0x90f732e2, 0x5092, 0x4606, 0xa8,0x19, 0x86,0x51,0x97,0x0b,0xac,0xcd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("90f732e2-5092-4606-a819-8651970baccd")
ID2D1BoundsAdjustmentTransform : public ID2D1TransformNode
{
    virtual void STDMETHODCALLTYPE SetOutputBounds(
        const D2D1_RECT_L *bounds) = 0;

    virtual void STDMETHODCALLTYPE GetOutputBounds(
        D2D1_RECT_L *bounds) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1BoundsAdjustmentTransform, 0x90f732e2, 0x5092, 0x4606, 0xa8,0x19, 0x86,0x51,0x97,0x0b,0xac,0xcd)
#endif
#else
typedef struct ID2D1BoundsAdjustmentTransformVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1BoundsAdjustmentTransform *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1BoundsAdjustmentTransform *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1BoundsAdjustmentTransform *This);

    /*** ID2D1TransformNode methods ***/
    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1BoundsAdjustmentTransform *This);

    /*** ID2D1BoundsAdjustmentTransform methods ***/
    void (STDMETHODCALLTYPE *SetOutputBounds)(
        ID2D1BoundsAdjustmentTransform *This,
        const D2D1_RECT_L *bounds);

    void (STDMETHODCALLTYPE *GetOutputBounds)(
        ID2D1BoundsAdjustmentTransform *This,
        D2D1_RECT_L *bounds);

    END_INTERFACE
} ID2D1BoundsAdjustmentTransformVtbl;

interface ID2D1BoundsAdjustmentTransform {
    CONST_VTBL ID2D1BoundsAdjustmentTransformVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1BoundsAdjustmentTransform_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1BoundsAdjustmentTransform_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1BoundsAdjustmentTransform_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TransformNode methods ***/
#define ID2D1BoundsAdjustmentTransform_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
/*** ID2D1BoundsAdjustmentTransform methods ***/
#define ID2D1BoundsAdjustmentTransform_SetOutputBounds(This,bounds) (This)->lpVtbl->SetOutputBounds(This,bounds)
#define ID2D1BoundsAdjustmentTransform_GetOutputBounds(This,bounds) (This)->lpVtbl->GetOutputBounds(This,bounds)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1BoundsAdjustmentTransform_QueryInterface(ID2D1BoundsAdjustmentTransform* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1BoundsAdjustmentTransform_AddRef(ID2D1BoundsAdjustmentTransform* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1BoundsAdjustmentTransform_Release(ID2D1BoundsAdjustmentTransform* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TransformNode methods ***/
static __WIDL_INLINE UINT32 ID2D1BoundsAdjustmentTransform_GetInputCount(ID2D1BoundsAdjustmentTransform* This) {
    return This->lpVtbl->GetInputCount(This);
}
/*** ID2D1BoundsAdjustmentTransform methods ***/
static __WIDL_INLINE void ID2D1BoundsAdjustmentTransform_SetOutputBounds(ID2D1BoundsAdjustmentTransform* This,const D2D1_RECT_L *bounds) {
    This->lpVtbl->SetOutputBounds(This,bounds);
}
static __WIDL_INLINE void ID2D1BoundsAdjustmentTransform_GetOutputBounds(ID2D1BoundsAdjustmentTransform* This,D2D1_RECT_L *bounds) {
    This->lpVtbl->GetOutputBounds(This,bounds);
}
#endif
#endif

#endif


#endif  /* __ID2D1BoundsAdjustmentTransform_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1EffectContext interface
 */
#ifndef __ID2D1EffectContext_INTERFACE_DEFINED__
#define __ID2D1EffectContext_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1EffectContext, 0x3d9f916b, 0x27dc, 0x4ad7, 0xb4,0xf1, 0x64,0x94,0x53,0x40,0xf5,0x63);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("3d9f916b-27dc-4ad7-b4f1-64945340f563")
ID2D1EffectContext : public IUnknown
{
    virtual void STDMETHODCALLTYPE GetDpi(
        float *dpi_x,
        float *dpi_y) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateEffect(
        REFCLSID clsid,
        ID2D1Effect **effect) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMaximumSupportedFeatureLevel(
        const D3D_FEATURE_LEVEL *levels,
        UINT32 level_count,
        D3D_FEATURE_LEVEL *max_level) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateTransformNodeFromEffect(
        ID2D1Effect *effect,
        ID2D1TransformNode **node) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBlendTransform(
        UINT32 num_inputs,
        const D2D1_BLEND_DESCRIPTION *description,
        ID2D1BlendTransform **transform) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBorderTransform(
        D2D1_EXTEND_MODE mode_x,
        D2D1_EXTEND_MODE mode_y,
        ID2D1BorderTransform **transform) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateOffsetTransform(
        D2D1_POINT_2L offset,
        ID2D1OffsetTransform **transform) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBoundsAdjustmentTransform(
        const D2D1_RECT_L *output_rect,
        ID2D1BoundsAdjustmentTransform **transform) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadPixelShader(
        REFGUID shader_id,
        const BYTE *buffer,
        UINT32 buffer_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadVertexShader(
        REFGUID shader_id,
        const BYTE *buffer,
        UINT32 buffer_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadComputeShader(
        REFGUID shader_id,
        const BYTE *buffer,
        UINT32 buffer_size) = 0;

    virtual BOOL STDMETHODCALLTYPE IsShaderLoaded(
        REFGUID shader_id) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateResourceTexture(
        const GUID *id,
        const D2D1_RESOURCE_TEXTURE_PROPERTIES *texture_properties,
        const BYTE *data,
        const UINT32 *strides,
        UINT32 data_size,
        ID2D1ResourceTexture **texture) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindResourceTexture(
        const GUID *id,
        ID2D1ResourceTexture **texture) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateVertexBuffer(
        const D2D1_VERTEX_BUFFER_PROPERTIES *buffer_properties,
        const GUID *id,
        const D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES *custom_buffer_properties,
        ID2D1VertexBuffer **buffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindVertexBuffer(
        const GUID *id,
        ID2D1VertexBuffer **buffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateColorContext(
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateColorContextFromFilename(
        const WCHAR *filename,
        ID2D1ColorContext **color_context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateColorContextFromWicColorContext(
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport(
        D2D1_FEATURE feature,
        void *data,
        UINT32 data_size) = 0;

    virtual BOOL STDMETHODCALLTYPE IsBufferPrecisionSupported(
        D2D1_BUFFER_PRECISION precision) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1EffectContext, 0x3d9f916b, 0x27dc, 0x4ad7, 0xb4,0xf1, 0x64,0x94,0x53,0x40,0xf5,0x63)
#endif
#else
typedef struct ID2D1EffectContextVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1EffectContext *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1EffectContext *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1EffectContext *This);

    /*** ID2D1EffectContext methods ***/
    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1EffectContext *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CreateEffect)(
        ID2D1EffectContext *This,
        REFCLSID clsid,
        ID2D1Effect **effect);

    HRESULT (STDMETHODCALLTYPE *GetMaximumSupportedFeatureLevel)(
        ID2D1EffectContext *This,
        const D3D_FEATURE_LEVEL *levels,
        UINT32 level_count,
        D3D_FEATURE_LEVEL *max_level);

    HRESULT (STDMETHODCALLTYPE *CreateTransformNodeFromEffect)(
        ID2D1EffectContext *This,
        ID2D1Effect *effect,
        ID2D1TransformNode **node);

    HRESULT (STDMETHODCALLTYPE *CreateBlendTransform)(
        ID2D1EffectContext *This,
        UINT32 num_inputs,
        const D2D1_BLEND_DESCRIPTION *description,
        ID2D1BlendTransform **transform);

    HRESULT (STDMETHODCALLTYPE *CreateBorderTransform)(
        ID2D1EffectContext *This,
        D2D1_EXTEND_MODE mode_x,
        D2D1_EXTEND_MODE mode_y,
        ID2D1BorderTransform **transform);

    HRESULT (STDMETHODCALLTYPE *CreateOffsetTransform)(
        ID2D1EffectContext *This,
        D2D1_POINT_2L offset,
        ID2D1OffsetTransform **transform);

    HRESULT (STDMETHODCALLTYPE *CreateBoundsAdjustmentTransform)(
        ID2D1EffectContext *This,
        const D2D1_RECT_L *output_rect,
        ID2D1BoundsAdjustmentTransform **transform);

    HRESULT (STDMETHODCALLTYPE *LoadPixelShader)(
        ID2D1EffectContext *This,
        REFGUID shader_id,
        const BYTE *buffer,
        UINT32 buffer_size);

    HRESULT (STDMETHODCALLTYPE *LoadVertexShader)(
        ID2D1EffectContext *This,
        REFGUID shader_id,
        const BYTE *buffer,
        UINT32 buffer_size);

    HRESULT (STDMETHODCALLTYPE *LoadComputeShader)(
        ID2D1EffectContext *This,
        REFGUID shader_id,
        const BYTE *buffer,
        UINT32 buffer_size);

    BOOL (STDMETHODCALLTYPE *IsShaderLoaded)(
        ID2D1EffectContext *This,
        REFGUID shader_id);

    HRESULT (STDMETHODCALLTYPE *CreateResourceTexture)(
        ID2D1EffectContext *This,
        const GUID *id,
        const D2D1_RESOURCE_TEXTURE_PROPERTIES *texture_properties,
        const BYTE *data,
        const UINT32 *strides,
        UINT32 data_size,
        ID2D1ResourceTexture **texture);

    HRESULT (STDMETHODCALLTYPE *FindResourceTexture)(
        ID2D1EffectContext *This,
        const GUID *id,
        ID2D1ResourceTexture **texture);

    HRESULT (STDMETHODCALLTYPE *CreateVertexBuffer)(
        ID2D1EffectContext *This,
        const D2D1_VERTEX_BUFFER_PROPERTIES *buffer_properties,
        const GUID *id,
        const D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES *custom_buffer_properties,
        ID2D1VertexBuffer **buffer);

    HRESULT (STDMETHODCALLTYPE *FindVertexBuffer)(
        ID2D1EffectContext *This,
        const GUID *id,
        ID2D1VertexBuffer **buffer);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        ID2D1EffectContext *This,
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromFilename)(
        ID2D1EffectContext *This,
        const WCHAR *filename,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromWicColorContext)(
        ID2D1EffectContext *This,
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CheckFeatureSupport)(
        ID2D1EffectContext *This,
        D2D1_FEATURE feature,
        void *data,
        UINT32 data_size);

    BOOL (STDMETHODCALLTYPE *IsBufferPrecisionSupported)(
        ID2D1EffectContext *This,
        D2D1_BUFFER_PRECISION precision);

    END_INTERFACE
} ID2D1EffectContextVtbl;

interface ID2D1EffectContext {
    CONST_VTBL ID2D1EffectContextVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1EffectContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1EffectContext_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1EffectContext_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1EffectContext methods ***/
#define ID2D1EffectContext_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1EffectContext_CreateEffect(This,clsid,effect) (This)->lpVtbl->CreateEffect(This,clsid,effect)
#define ID2D1EffectContext_GetMaximumSupportedFeatureLevel(This,levels,level_count,max_level) (This)->lpVtbl->GetMaximumSupportedFeatureLevel(This,levels,level_count,max_level)
#define ID2D1EffectContext_CreateTransformNodeFromEffect(This,effect,node) (This)->lpVtbl->CreateTransformNodeFromEffect(This,effect,node)
#define ID2D1EffectContext_CreateBlendTransform(This,num_inputs,description,transform) (This)->lpVtbl->CreateBlendTransform(This,num_inputs,description,transform)
#define ID2D1EffectContext_CreateBorderTransform(This,mode_x,mode_y,transform) (This)->lpVtbl->CreateBorderTransform(This,mode_x,mode_y,transform)
#define ID2D1EffectContext_CreateOffsetTransform(This,offset,transform) (This)->lpVtbl->CreateOffsetTransform(This,offset,transform)
#define ID2D1EffectContext_CreateBoundsAdjustmentTransform(This,output_rect,transform) (This)->lpVtbl->CreateBoundsAdjustmentTransform(This,output_rect,transform)
#define ID2D1EffectContext_LoadPixelShader(This,shader_id,buffer,buffer_size) (This)->lpVtbl->LoadPixelShader(This,shader_id,buffer,buffer_size)
#define ID2D1EffectContext_LoadVertexShader(This,shader_id,buffer,buffer_size) (This)->lpVtbl->LoadVertexShader(This,shader_id,buffer,buffer_size)
#define ID2D1EffectContext_LoadComputeShader(This,shader_id,buffer,buffer_size) (This)->lpVtbl->LoadComputeShader(This,shader_id,buffer,buffer_size)
#define ID2D1EffectContext_IsShaderLoaded(This,shader_id) (This)->lpVtbl->IsShaderLoaded(This,shader_id)
#define ID2D1EffectContext_CreateResourceTexture(This,id,texture_properties,data,strides,data_size,texture) (This)->lpVtbl->CreateResourceTexture(This,id,texture_properties,data,strides,data_size,texture)
#define ID2D1EffectContext_FindResourceTexture(This,id,texture) (This)->lpVtbl->FindResourceTexture(This,id,texture)
#define ID2D1EffectContext_CreateVertexBuffer(This,buffer_properties,id,custom_buffer_properties,buffer) (This)->lpVtbl->CreateVertexBuffer(This,buffer_properties,id,custom_buffer_properties,buffer)
#define ID2D1EffectContext_FindVertexBuffer(This,id,buffer) (This)->lpVtbl->FindVertexBuffer(This,id,buffer)
#define ID2D1EffectContext_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1EffectContext_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1EffectContext_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1EffectContext_CheckFeatureSupport(This,feature,data,data_size) (This)->lpVtbl->CheckFeatureSupport(This,feature,data,data_size)
#define ID2D1EffectContext_IsBufferPrecisionSupported(This,precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,precision)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1EffectContext_QueryInterface(ID2D1EffectContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1EffectContext_AddRef(ID2D1EffectContext* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1EffectContext_Release(ID2D1EffectContext* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1EffectContext methods ***/
static __WIDL_INLINE void ID2D1EffectContext_GetDpi(ID2D1EffectContext* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateEffect(ID2D1EffectContext* This,REFCLSID clsid,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,clsid,effect);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_GetMaximumSupportedFeatureLevel(ID2D1EffectContext* This,const D3D_FEATURE_LEVEL *levels,UINT32 level_count,D3D_FEATURE_LEVEL *max_level) {
    return This->lpVtbl->GetMaximumSupportedFeatureLevel(This,levels,level_count,max_level);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateTransformNodeFromEffect(ID2D1EffectContext* This,ID2D1Effect *effect,ID2D1TransformNode **node) {
    return This->lpVtbl->CreateTransformNodeFromEffect(This,effect,node);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateBlendTransform(ID2D1EffectContext* This,UINT32 num_inputs,const D2D1_BLEND_DESCRIPTION *description,ID2D1BlendTransform **transform) {
    return This->lpVtbl->CreateBlendTransform(This,num_inputs,description,transform);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateBorderTransform(ID2D1EffectContext* This,D2D1_EXTEND_MODE mode_x,D2D1_EXTEND_MODE mode_y,ID2D1BorderTransform **transform) {
    return This->lpVtbl->CreateBorderTransform(This,mode_x,mode_y,transform);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateOffsetTransform(ID2D1EffectContext* This,D2D1_POINT_2L offset,ID2D1OffsetTransform **transform) {
    return This->lpVtbl->CreateOffsetTransform(This,offset,transform);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateBoundsAdjustmentTransform(ID2D1EffectContext* This,const D2D1_RECT_L *output_rect,ID2D1BoundsAdjustmentTransform **transform) {
    return This->lpVtbl->CreateBoundsAdjustmentTransform(This,output_rect,transform);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_LoadPixelShader(ID2D1EffectContext* This,REFGUID shader_id,const BYTE *buffer,UINT32 buffer_size) {
    return This->lpVtbl->LoadPixelShader(This,shader_id,buffer,buffer_size);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_LoadVertexShader(ID2D1EffectContext* This,REFGUID shader_id,const BYTE *buffer,UINT32 buffer_size) {
    return This->lpVtbl->LoadVertexShader(This,shader_id,buffer,buffer_size);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_LoadComputeShader(ID2D1EffectContext* This,REFGUID shader_id,const BYTE *buffer,UINT32 buffer_size) {
    return This->lpVtbl->LoadComputeShader(This,shader_id,buffer,buffer_size);
}
static __WIDL_INLINE BOOL ID2D1EffectContext_IsShaderLoaded(ID2D1EffectContext* This,REFGUID shader_id) {
    return This->lpVtbl->IsShaderLoaded(This,shader_id);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateResourceTexture(ID2D1EffectContext* This,const GUID *id,const D2D1_RESOURCE_TEXTURE_PROPERTIES *texture_properties,const BYTE *data,const UINT32 *strides,UINT32 data_size,ID2D1ResourceTexture **texture) {
    return This->lpVtbl->CreateResourceTexture(This,id,texture_properties,data,strides,data_size,texture);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_FindResourceTexture(ID2D1EffectContext* This,const GUID *id,ID2D1ResourceTexture **texture) {
    return This->lpVtbl->FindResourceTexture(This,id,texture);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateVertexBuffer(ID2D1EffectContext* This,const D2D1_VERTEX_BUFFER_PROPERTIES *buffer_properties,const GUID *id,const D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES *custom_buffer_properties,ID2D1VertexBuffer **buffer) {
    return This->lpVtbl->CreateVertexBuffer(This,buffer_properties,id,custom_buffer_properties,buffer);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_FindVertexBuffer(ID2D1EffectContext* This,const GUID *id,ID2D1VertexBuffer **buffer) {
    return This->lpVtbl->FindVertexBuffer(This,id,buffer);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateColorContext(ID2D1EffectContext* This,D2D1_COLOR_SPACE space,const BYTE *profile,UINT32 profile_size,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateColorContextFromFilename(ID2D1EffectContext* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CreateColorContextFromWicColorContext(ID2D1EffectContext* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static __WIDL_INLINE HRESULT ID2D1EffectContext_CheckFeatureSupport(ID2D1EffectContext* This,D2D1_FEATURE feature,void *data,UINT32 data_size) {
    return This->lpVtbl->CheckFeatureSupport(This,feature,data,data_size);
}
static __WIDL_INLINE BOOL ID2D1EffectContext_IsBufferPrecisionSupported(ID2D1EffectContext* This,D2D1_BUFFER_PRECISION precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,precision);
}
#endif
#endif

#endif


#endif  /* __ID2D1EffectContext_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1EffectImpl interface
 */
#ifndef __ID2D1EffectImpl_INTERFACE_DEFINED__
#define __ID2D1EffectImpl_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1EffectImpl, 0xa248fd3f, 0x3e6c, 0x4e63, 0x9f,0x03, 0x7f,0x68,0xec,0xc9,0x1d,0xb9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a248fd3f-3e6c-4e63-9f03-7f68ecc91db9")
ID2D1EffectImpl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Initialize(
        ID2D1EffectContext *context,
        ID2D1TransformGraph *graph) = 0;

    virtual HRESULT STDMETHODCALLTYPE PrepareForRender(
        D2D1_CHANGE_TYPE type) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetGraph(
        ID2D1TransformGraph *graph) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1EffectImpl, 0xa248fd3f, 0x3e6c, 0x4e63, 0x9f,0x03, 0x7f,0x68,0xec,0xc9,0x1d,0xb9)
#endif
#else
typedef struct ID2D1EffectImplVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ID2D1EffectImpl *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ID2D1EffectImpl *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ID2D1EffectImpl *This);

    /*** ID2D1EffectImpl methods ***/
    HRESULT (STDMETHODCALLTYPE *Initialize)(
        ID2D1EffectImpl *This,
        ID2D1EffectContext *context,
        ID2D1TransformGraph *graph);

    HRESULT (STDMETHODCALLTYPE *PrepareForRender)(
        ID2D1EffectImpl *This,
        D2D1_CHANGE_TYPE type);

    HRESULT (STDMETHODCALLTYPE *SetGraph)(
        ID2D1EffectImpl *This,
        ID2D1TransformGraph *graph);

    END_INTERFACE
} ID2D1EffectImplVtbl;

interface ID2D1EffectImpl {
    CONST_VTBL ID2D1EffectImplVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1EffectImpl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1EffectImpl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1EffectImpl_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1EffectImpl methods ***/
#define ID2D1EffectImpl_Initialize(This,context,graph) (This)->lpVtbl->Initialize(This,context,graph)
#define ID2D1EffectImpl_PrepareForRender(This,type) (This)->lpVtbl->PrepareForRender(This,type)
#define ID2D1EffectImpl_SetGraph(This,graph) (This)->lpVtbl->SetGraph(This,graph)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT ID2D1EffectImpl_QueryInterface(ID2D1EffectImpl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG ID2D1EffectImpl_AddRef(ID2D1EffectImpl* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG ID2D1EffectImpl_Release(ID2D1EffectImpl* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1EffectImpl methods ***/
static __WIDL_INLINE HRESULT ID2D1EffectImpl_Initialize(ID2D1EffectImpl* This,ID2D1EffectContext *context,ID2D1TransformGraph *graph) {
    return This->lpVtbl->Initialize(This,context,graph);
}
static __WIDL_INLINE HRESULT ID2D1EffectImpl_PrepareForRender(ID2D1EffectImpl* This,D2D1_CHANGE_TYPE type) {
    return This->lpVtbl->PrepareForRender(This,type);
}
static __WIDL_INLINE HRESULT ID2D1EffectImpl_SetGraph(ID2D1EffectImpl* This,ID2D1TransformGraph *graph) {
    return This->lpVtbl->SetGraph(This,graph);
}
#endif
#endif

#endif


#endif  /* __ID2D1EffectImpl_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __d2d1effectauthor_h__ */
