[PATCH] d3d11: Upgrade to ID3D11BlendState1.

James McDonnell topgamer7 at gmail.com
Sat May 14 02:35:09 CDT 2022


On 2022-05-13 11:46, Chip Davis wrote:
> Signed-off-by: Chip Davis <cdavis5x at gmail.com>
> ---
>   dlls/d3d11/d3d11_private.h | 12 ++---
>   dlls/d3d11/device.c        | 65 ++++++++++++++++++---------
>   dlls/d3d11/state.c         | 92 ++++++++++++++++++++++++--------------
>   3 files changed, 109 insertions(+), 60 deletions(-)
>
> diff --git a/dlls/d3d11/d3d11_private.h b/dlls/d3d11/d3d11_private.h
> index efe26551258..29a01dd91ad 100644
> --- a/dlls/d3d11/d3d11_private.h
> +++ b/dlls/d3d11/d3d11_private.h
> @@ -408,26 +408,26 @@ struct d3d11_class_linkage
>   HRESULT d3d11_class_linkage_create(struct d3d_device *device,
>           struct d3d11_class_linkage **class_linkage) DECLSPEC_HIDDEN;
>   
> -/* ID3D11BlendState, ID3D10BlendState1 */
> +/* ID3D11BlendState1, ID3D10BlendState1 */
>   struct d3d_blend_state
>   {
> -    ID3D11BlendState ID3D11BlendState_iface;
> +    ID3D11BlendState1 ID3D11BlendState1_iface;
>       ID3D10BlendState1 ID3D10BlendState1_iface;
>       LONG refcount;
>   
>       struct wined3d_private_store private_store;
>       struct wined3d_blend_state *wined3d_state;
> -    D3D11_BLEND_DESC desc;
> +    D3D11_BLEND_DESC1 desc;
>       struct wine_rb_entry entry;
>       ID3D11Device2 *device;
>   };
>   
> -static inline struct d3d_blend_state *impl_from_ID3D11BlendState(ID3D11BlendState *iface)
> +static inline struct d3d_blend_state *impl_from_ID3D11BlendState1(ID3D11BlendState1 *iface)
>   {
> -    return CONTAINING_RECORD(iface, struct d3d_blend_state, ID3D11BlendState_iface);
> +    return CONTAINING_RECORD(iface, struct d3d_blend_state, ID3D11BlendState1_iface);
>   }
>   
> -HRESULT d3d_blend_state_create(struct d3d_device *device, const D3D11_BLEND_DESC *desc,
> +HRESULT d3d_blend_state_create(struct d3d_device *device, const D3D11_BLEND_DESC1 *desc,
>           struct d3d_blend_state **state) DECLSPEC_HIDDEN;
>   struct d3d_blend_state *unsafe_impl_from_ID3D11BlendState(ID3D11BlendState *iface) DECLSPEC_HIDDEN;
>   struct d3d_blend_state *unsafe_impl_from_ID3D10BlendState(ID3D10BlendState *iface) DECLSPEC_HIDDEN;
> diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
> index ecf45e9ce33..263613911f8 100644
> --- a/dlls/d3d11/device.c
> +++ b/dlls/d3d11/device.c
> @@ -2204,7 +2204,7 @@ static void STDMETHODCALLTYPE d3d11_device_context_OMGetBlendState(ID3D11DeviceC
>           if (wined3d_state)
>           {
>               blend_state_impl = wined3d_blend_state_get_parent(wined3d_state);
> -            ID3D11BlendState_AddRef(*blend_state = &blend_state_impl->ID3D11BlendState_iface);
> +            ID3D11BlendState_AddRef(*blend_state = (ID3D11BlendState *)&blend_state_impl->ID3D11BlendState1_iface);
>           }
>           else
>               *blend_state = NULL;
> @@ -3632,23 +3632,53 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateClassLinkage(ID3D11Device2 *
>       return S_OK;
>   }
>   
> -static HRESULT STDMETHODCALLTYPE d3d11_device_CreateBlendState(ID3D11Device2 *iface,
> -        const D3D11_BLEND_DESC *desc, ID3D11BlendState **blend_state)
> +static HRESULT STDMETHODCALLTYPE d3d11_device_CreateBlendState1(ID3D11Device2 *iface,
> +        const D3D11_BLEND_DESC1 *desc, ID3D11BlendState1 **state)
>   {
>       struct d3d_device *device = impl_from_ID3D11Device2(iface);
>       struct d3d_blend_state *object;
>       HRESULT hr;
>   
> -    TRACE("iface %p, desc %p, blend_state %p.\n", iface, desc, blend_state);
> +    TRACE("iface %p, desc %p, state %p.\n", iface, desc, state);
>   
>       if (FAILED(hr = d3d_blend_state_create(device, desc, &object)))
>           return hr;
>   
> -    *blend_state = &object->ID3D11BlendState_iface;
> +    *state = &object->ID3D11BlendState1_iface;
>   
>       return S_OK;
>   }
>   
> +static HRESULT STDMETHODCALLTYPE d3d11_device_CreateBlendState(ID3D11Device2 *iface,
> +        const D3D11_BLEND_DESC *desc, ID3D11BlendState **blend_state)
> +{
> +    D3D11_BLEND_DESC1 d3d11_1_desc;
> +    unsigned int i;
> +
> +    TRACE("iface %p, desc %p, blend_state %p.\n", iface, desc, blend_state);
> +
> +    if (!desc)
> +        return E_INVALIDARG;
> +
> +    d3d11_1_desc.AlphaToCoverageEnable = desc->AlphaToCoverageEnable;
> +    d3d11_1_desc.IndependentBlendEnable = desc->IndependentBlendEnable;
> +    for (i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
> +    {
> +        d3d11_1_desc.RenderTarget[i].BlendEnable = desc->RenderTarget[i].BlendEnable;
> +        d3d11_1_desc.RenderTarget[i].LogicOpEnable = FALSE;
> +        d3d11_1_desc.RenderTarget[i].SrcBlend = desc->RenderTarget[i].SrcBlend;
> +        d3d11_1_desc.RenderTarget[i].DestBlend = desc->RenderTarget[i].DestBlend;
> +        d3d11_1_desc.RenderTarget[i].BlendOp = desc->RenderTarget[i].BlendOp;
> +        d3d11_1_desc.RenderTarget[i].SrcBlendAlpha = desc->RenderTarget[i].SrcBlendAlpha;
> +        d3d11_1_desc.RenderTarget[i].DestBlendAlpha = desc->RenderTarget[i].DestBlendAlpha;
> +        d3d11_1_desc.RenderTarget[i].BlendOpAlpha = desc->RenderTarget[i].BlendOpAlpha;
> +        d3d11_1_desc.RenderTarget[i].LogicOp = D3D11_LOGIC_OP_COPY;
> +        d3d11_1_desc.RenderTarget[i].RenderTargetWriteMask = desc->RenderTarget[i].RenderTargetWriteMask;
> +    }
Shouldn't this include a FIXME to warn that LogicOp is hard coded?
> +
> +    return d3d11_device_CreateBlendState1(iface, &d3d11_1_desc, (ID3D11BlendState1 **)blend_state);
> +}
> +
>   static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDepthStencilState(ID3D11Device2 *iface,
>           const D3D11_DEPTH_STENCIL_DESC *desc, ID3D11DepthStencilState **depth_stencil_state)
>   {
> @@ -4281,14 +4311,6 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDeferredContext1(ID3D11Devic
>       return S_OK;
>   }
>   
> -static HRESULT STDMETHODCALLTYPE d3d11_device_CreateBlendState1(ID3D11Device2 *iface,
> -        const D3D11_BLEND_DESC1 *desc, ID3D11BlendState1 **state)
> -{
> -    FIXME("iface %p, desc %p, state %p stub!\n", iface, desc, state);
> -
> -    return E_NOTIMPL;
> -}
> -
>   static HRESULT STDMETHODCALLTYPE d3d11_device_CreateRasterizerState1(ID3D11Device2 *iface,
>           const D3D11_RASTERIZER_DESC1 *desc, ID3D11RasterizerState1 **state)
>   {
> @@ -4993,7 +5015,8 @@ static void STDMETHODCALLTYPE d3d10_device_OMSetBlendState(ID3D10Device1 *iface,
>   
>       blend_state_object = unsafe_impl_from_ID3D10BlendState(blend_state);
>       d3d11_device_context_OMSetBlendState(&device->immediate_context.ID3D11DeviceContext1_iface,
> -            blend_state_object ? &blend_state_object->ID3D11BlendState_iface : NULL, blend_factor, sample_mask);
> +            blend_state_object ? (ID3D11BlendState *)&blend_state_object->ID3D11BlendState1_iface : NULL,
> +            blend_factor, sample_mask);
>   }
>   
>   static void STDMETHODCALLTYPE d3d10_device_OMSetDepthStencilState(ID3D10Device1 *iface,
> @@ -5670,7 +5693,8 @@ static void STDMETHODCALLTYPE d3d10_device_OMGetBlendState(ID3D10Device1 *iface,
>       {
>           if (d3d11_blend_state)
>           {
> -            *blend_state = (ID3D10BlendState *)&impl_from_ID3D11BlendState(d3d11_blend_state)->ID3D10BlendState1_iface;
> +            *blend_state = (ID3D10BlendState *)&impl_from_ID3D11BlendState1(
> +                    (ID3D11BlendState1 *)d3d11_blend_state)->ID3D10BlendState1_iface;
>               ID3D10BlendState_AddRef(*blend_state);
>           }
>           else
> @@ -6267,16 +6291,15 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateBlendState1(ID3D10Device1 *i
>           const D3D10_BLEND_DESC1 *desc, ID3D10BlendState1 **blend_state)
>   {
>       struct d3d_device *device = impl_from_ID3D10Device(iface);
> -    struct d3d_blend_state *object;
> +    ID3D11BlendState *object;
>       HRESULT hr;
>   
>       TRACE("iface %p, desc %p, blend_state %p.\n", iface, desc, blend_state);
>   
> -    if (FAILED(hr = d3d_blend_state_create(device, (const D3D11_BLEND_DESC *)desc, &object)))
> +    if (FAILED(hr = d3d11_device_CreateBlendState(&device->ID3D11Device2_iface, (const D3D11_BLEND_DESC *)desc, &object)))
>           return hr;
>   
> -    *blend_state = &object->ID3D10BlendState1_iface;
> -
> +    *blend_state = &impl_from_ID3D11BlendState1((ID3D11BlendState1 *)object)->ID3D10BlendState1_iface;
>       return S_OK;
>   }
>   
> @@ -6867,8 +6890,8 @@ static int d3d_sampler_state_compare(const void *key, const struct wine_rb_entry
>   
>   static int d3d_blend_state_compare(const void *key, const struct wine_rb_entry *entry)
>   {
> -    const D3D11_BLEND_DESC *ka = key;
> -    const D3D11_BLEND_DESC *kb = &WINE_RB_ENTRY_VALUE(entry, const struct d3d_blend_state, entry)->desc;
> +    const D3D11_BLEND_DESC1 *ka = key;
> +    const D3D11_BLEND_DESC1 *kb = &WINE_RB_ENTRY_VALUE(entry, const struct d3d_blend_state, entry)->desc;
>   
>       return memcmp(ka, kb, sizeof(*ka));
>   }
> diff --git a/dlls/d3d11/state.c b/dlls/d3d11/state.c
> index f67017ff1ef..e465d4113e3 100644
> --- a/dlls/d3d11/state.c
> +++ b/dlls/d3d11/state.c
> @@ -21,20 +21,21 @@
>   
>   WINE_DEFAULT_DEBUG_CHANNEL(d3d11);
>   
> -/* ID3D11BlendState methods */
> +/* ID3D11BlendState1 methods */
>   
> -static HRESULT STDMETHODCALLTYPE d3d11_blend_state_QueryInterface(ID3D11BlendState *iface,
> +static HRESULT STDMETHODCALLTYPE d3d11_blend_state_QueryInterface(ID3D11BlendState1 *iface,
>           REFIID riid, void **object)
>   {
> -    struct d3d_blend_state *state = impl_from_ID3D11BlendState(iface);
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
>   
>       TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
>   
> -    if (IsEqualGUID(riid, &IID_ID3D11BlendState)
> +    if (IsEqualGUID(riid, &IID_ID3D11BlendState1)
> +            || IsEqualGUID(riid, &IID_ID3D11BlendState)
>               || IsEqualGUID(riid, &IID_ID3D11DeviceChild)
>               || IsEqualGUID(riid, &IID_IUnknown))
>       {
> -        ID3D11BlendState_AddRef(iface);
> +        ID3D11BlendState1_AddRef(iface);
>           *object = iface;
>           return S_OK;
>       }
> @@ -54,9 +55,9 @@ static HRESULT STDMETHODCALLTYPE d3d11_blend_state_QueryInterface(ID3D11BlendSta
>       return E_NOINTERFACE;
>   }
>   
> -static ULONG STDMETHODCALLTYPE d3d11_blend_state_AddRef(ID3D11BlendState *iface)
> +static ULONG STDMETHODCALLTYPE d3d11_blend_state_AddRef(ID3D11BlendState1 *iface)
>   {
> -    struct d3d_blend_state *state = impl_from_ID3D11BlendState(iface);
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
>       ULONG refcount = InterlockedIncrement(&state->refcount);
>   
>       TRACE("%p increasing refcount to %lu.\n", state, refcount);
> @@ -70,9 +71,9 @@ static ULONG STDMETHODCALLTYPE d3d11_blend_state_AddRef(ID3D11BlendState *iface)
>       return refcount;
>   }
>   
> -static ULONG STDMETHODCALLTYPE d3d11_blend_state_Release(ID3D11BlendState *iface)
> +static ULONG STDMETHODCALLTYPE d3d11_blend_state_Release(ID3D11BlendState1 *iface)
>   {
> -    struct d3d_blend_state *state = impl_from_ID3D11BlendState(iface);
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
>       ULONG refcount = InterlockedDecrement(&state->refcount);
>   
>       TRACE("%p decreasing refcount to %lu.\n", state, refcount);
> @@ -87,10 +88,10 @@ static ULONG STDMETHODCALLTYPE d3d11_blend_state_Release(ID3D11BlendState *iface
>       return refcount;
>   }
>   
> -static void STDMETHODCALLTYPE d3d11_blend_state_GetDevice(ID3D11BlendState *iface,
> +static void STDMETHODCALLTYPE d3d11_blend_state_GetDevice(ID3D11BlendState1 *iface,
>           ID3D11Device **device)
>   {
> -    struct d3d_blend_state *state = impl_from_ID3D11BlendState(iface);
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
>   
>       TRACE("iface %p, device %p.\n", iface, device);
>   
> @@ -98,46 +99,69 @@ static void STDMETHODCALLTYPE d3d11_blend_state_GetDevice(ID3D11BlendState *ifac
>       ID3D11Device_AddRef(*device);
>   }
>   
> -static HRESULT STDMETHODCALLTYPE d3d11_blend_state_GetPrivateData(ID3D11BlendState *iface,
> +static HRESULT STDMETHODCALLTYPE d3d11_blend_state_GetPrivateData(ID3D11BlendState1 *iface,
>           REFGUID guid, UINT *data_size, void *data)
>   {
> -    struct d3d_blend_state *state = impl_from_ID3D11BlendState(iface);
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
>   
>       TRACE("iface %p, guid %s, data_size %p, data %p.\n", iface, debugstr_guid(guid), data_size, data);
>   
>       return d3d_get_private_data(&state->private_store, guid, data_size, data);
>   }
>   
> -static HRESULT STDMETHODCALLTYPE d3d11_blend_state_SetPrivateData(ID3D11BlendState *iface,
> +static HRESULT STDMETHODCALLTYPE d3d11_blend_state_SetPrivateData(ID3D11BlendState1 *iface,
>           REFGUID guid, UINT data_size, const void *data)
>   {
> -    struct d3d_blend_state *state = impl_from_ID3D11BlendState(iface);
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
>   
>       TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
>   
>       return d3d_set_private_data(&state->private_store, guid, data_size, data);
>   }
>   
> -static HRESULT STDMETHODCALLTYPE d3d11_blend_state_SetPrivateDataInterface(ID3D11BlendState *iface,
> +static HRESULT STDMETHODCALLTYPE d3d11_blend_state_SetPrivateDataInterface(ID3D11BlendState1 *iface,
>           REFGUID guid, const IUnknown *data)
>   {
> -    struct d3d_blend_state *state = impl_from_ID3D11BlendState(iface);
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
>   
>       TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
>   
>       return d3d_set_private_data_interface(&state->private_store, guid, data);
>   }
>   
> -static void STDMETHODCALLTYPE d3d11_blend_state_GetDesc(ID3D11BlendState *iface, D3D11_BLEND_DESC *desc)
> +static void STDMETHODCALLTYPE d3d11_blend_state_GetDesc(ID3D11BlendState1 *iface, D3D11_BLEND_DESC *desc)
>   {
> -    struct d3d_blend_state *state = impl_from_ID3D11BlendState(iface);
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
> +    const D3D11_BLEND_DESC1 *d3d11_desc = &state->desc;
> +    unsigned int i;
> +
> +    TRACE("iface %p, desc %p.\n", iface, desc);
> +
> +    desc->AlphaToCoverageEnable = d3d11_desc->AlphaToCoverageEnable;
> +    desc->IndependentBlendEnable = d3d11_desc->IndependentBlendEnable;
> +    for (i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)
> +    {
> +        desc->RenderTarget[i].BlendEnable = d3d11_desc->RenderTarget[i].BlendEnable;
> +        desc->RenderTarget[i].SrcBlend = d3d11_desc->RenderTarget[i].SrcBlend;
> +        desc->RenderTarget[i].DestBlend = d3d11_desc->RenderTarget[i].DestBlend;
> +        desc->RenderTarget[i].BlendOp = d3d11_desc->RenderTarget[i].BlendOp;
> +        desc->RenderTarget[i].SrcBlendAlpha = d3d11_desc->RenderTarget[i].SrcBlendAlpha;
> +        desc->RenderTarget[i].DestBlendAlpha = d3d11_desc->RenderTarget[i].DestBlendAlpha;
> +        desc->RenderTarget[i].BlendOpAlpha = d3d11_desc->RenderTarget[i].BlendOpAlpha;
> +        desc->RenderTarget[i].RenderTargetWriteMask = d3d11_desc->RenderTarget[i].RenderTargetWriteMask;
> +    }
> +}
> +
> +static void STDMETHODCALLTYPE d3d11_blend_state_GetDesc1(ID3D11BlendState1 *iface, D3D11_BLEND_DESC1 *desc)
> +{
> +    struct d3d_blend_state *state = impl_from_ID3D11BlendState1(iface);
>   
>       TRACE("iface %p, desc %p.\n", iface, desc);
>   
>       *desc = state->desc;
>   }
>   
> -static const struct ID3D11BlendStateVtbl d3d11_blend_state_vtbl =
> +static const struct ID3D11BlendState1Vtbl d3d11_blend_state_vtbl =
>   {
>       /* IUnknown methods */
>       d3d11_blend_state_QueryInterface,
> @@ -150,6 +174,8 @@ static const struct ID3D11BlendStateVtbl d3d11_blend_state_vtbl =
>       d3d11_blend_state_SetPrivateDataInterface,
>       /* ID3D11BlendState methods */
>       d3d11_blend_state_GetDesc,
> +    /* ID3D11BlendState1 methods */
> +    d3d11_blend_state_GetDesc1,
>   };
>   
>   /* ID3D10BlendState methods */
> @@ -168,7 +194,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_blend_state_QueryInterface(ID3D10BlendSta
>   
>       TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
>   
> -    return d3d11_blend_state_QueryInterface(&state->ID3D11BlendState_iface, riid, object);
> +    return d3d11_blend_state_QueryInterface(&state->ID3D11BlendState1_iface, riid, object);
>   }
>   
>   static ULONG STDMETHODCALLTYPE d3d10_blend_state_AddRef(ID3D10BlendState1 *iface)
> @@ -177,7 +203,7 @@ static ULONG STDMETHODCALLTYPE d3d10_blend_state_AddRef(ID3D10BlendState1 *iface
>   
>       TRACE("iface %p.\n", iface);
>   
> -    return d3d11_blend_state_AddRef(&state->ID3D11BlendState_iface);
> +    return d3d11_blend_state_AddRef(&state->ID3D11BlendState1_iface);
>   }
>   
>   static ULONG STDMETHODCALLTYPE d3d10_blend_state_Release(ID3D10BlendState1 *iface)
> @@ -186,7 +212,7 @@ static ULONG STDMETHODCALLTYPE d3d10_blend_state_Release(ID3D10BlendState1 *ifac
>   
>       TRACE("iface %p.\n", iface);
>   
> -    return d3d11_blend_state_Release(&state->ID3D11BlendState_iface);
> +    return d3d11_blend_state_Release(&state->ID3D11BlendState1_iface);
>   }
>   
>   /* ID3D10DeviceChild methods */
> @@ -247,7 +273,7 @@ static D3D10_BLEND_OP d3d10_blend_op_from_d3d11(D3D11_BLEND_OP op)
>   static void STDMETHODCALLTYPE d3d10_blend_state_GetDesc(ID3D10BlendState1 *iface, D3D10_BLEND_DESC *desc)
>   {
>       struct d3d_blend_state *state = impl_from_ID3D10BlendState(iface);
> -    const D3D11_BLEND_DESC *d3d11_desc = &state->desc;
> +    const D3D11_BLEND_DESC1 *d3d11_desc = &state->desc;
>       unsigned int i;
>   
>       TRACE("iface %p, desc %p.\n", iface, desc);
> @@ -272,7 +298,7 @@ static void STDMETHODCALLTYPE d3d10_blend_state_GetDesc1(ID3D10BlendState1 *ifac
>   
>       TRACE("iface %p, desc %p.\n", iface, desc);
>   
> -    memcpy(desc, &state->desc, sizeof(*desc));
> +    d3d11_blend_state_GetDesc(&state->ID3D11BlendState1_iface, (D3D11_BLEND_DESC *)desc);
>   }
>   
>   static const struct ID3D10BlendState1Vtbl d3d10_blend_state_vtbl =
> @@ -317,21 +343,21 @@ static enum wined3d_blend_op wined3d_blend_op_from_d3d11(D3D11_BLEND_OP op)
>       return (enum wined3d_blend_op)op;
>   }
>   
> -HRESULT d3d_blend_state_create(struct d3d_device *device, const D3D11_BLEND_DESC *desc,
> +HRESULT d3d_blend_state_create(struct d3d_device *device, const D3D11_BLEND_DESC1 *desc,
>           struct d3d_blend_state **state)
>   {
>       struct wined3d_blend_state_desc wined3d_desc;
>       struct d3d_blend_state *object;
>       struct wine_rb_entry *entry;
> -    D3D11_BLEND_DESC tmp_desc;
> +    D3D11_BLEND_DESC1 tmp_desc;
>       unsigned int i, j;
>       HRESULT hr;
>   
>       if (!desc)
>           return E_INVALIDARG;
>   
> -    /* D3D11_RENDER_TARGET_BLEND_DESC has a hole, which is a problem because we use
> -     * D3D11_BLEND_DESC as a key in the rbtree. */
> +    /* D3D11_RENDER_TARGET_BLEND_DESC1 has a hole, which is a problem because we use
> +     * D3D11_BLEND_DESC1 as a key in the rbtree. */
>       memset(&tmp_desc, 0, sizeof(tmp_desc));
>       tmp_desc.AlphaToCoverageEnable = desc->AlphaToCoverageEnable;
>       tmp_desc.IndependentBlendEnable = desc->IndependentBlendEnable;
> @@ -366,7 +392,7 @@ HRESULT d3d_blend_state_create(struct d3d_device *device, const D3D11_BLEND_DESC
>           object = WINE_RB_ENTRY_VALUE(entry, struct d3d_blend_state, entry);
>   
>           TRACE("Returning existing blend state %p.\n", object);
> -        ID3D11BlendState_AddRef(&object->ID3D11BlendState_iface);
> +        ID3D11BlendState1_AddRef(&object->ID3D11BlendState1_iface);
>           *state = object;
>           wined3d_mutex_unlock();
>   
> @@ -379,7 +405,7 @@ HRESULT d3d_blend_state_create(struct d3d_device *device, const D3D11_BLEND_DESC
>           return E_OUTOFMEMORY;
>       }
>   
> -    object->ID3D11BlendState_iface.lpVtbl = &d3d11_blend_state_vtbl;
> +    object->ID3D11BlendState1_iface.lpVtbl = &d3d11_blend_state_vtbl;
>       object->ID3D10BlendState1_iface.lpVtbl = &d3d10_blend_state_vtbl;
>       object->refcount = 1;
>       wined3d_private_store_init(&object->private_store);
> @@ -434,9 +460,9 @@ struct d3d_blend_state *unsafe_impl_from_ID3D11BlendState(ID3D11BlendState *ifac
>   {
>       if (!iface)
>           return NULL;
> -    assert(iface->lpVtbl == &d3d11_blend_state_vtbl);
> +    assert(iface->lpVtbl == (ID3D11BlendStateVtbl *)&d3d11_blend_state_vtbl);
>   
> -    return impl_from_ID3D11BlendState(iface);
> +    return impl_from_ID3D11BlendState1((ID3D11BlendState1 *)iface);
>   }
>   
>   struct d3d_blend_state *unsafe_impl_from_ID3D10BlendState(ID3D10BlendState *iface)



More information about the wine-devel mailing list