wined3d: Move the blend operation to wined3d_blend_state.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
04e9d574f5
commit
936310585c
|
@ -740,7 +740,6 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
|
|||
{
|
||||
const D3D11_RENDER_TARGET_BLEND_DESC *d = &desc->RenderTarget[0];
|
||||
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_BLENDOP, d->BlendOp);
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SEPARATEALPHABLENDENABLE, TRUE);
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SRCBLENDALPHA, d->SrcBlendAlpha);
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DESTBLENDALPHA, d->DestBlendAlpha);
|
||||
|
|
|
@ -392,6 +392,7 @@ HRESULT d3d_blend_state_create(struct d3d_device *device, const D3D11_BLEND_DESC
|
|||
wined3d_desc.enable = desc->RenderTarget[0].BlendEnable;
|
||||
wined3d_desc.src = desc->RenderTarget[0].SrcBlend;
|
||||
wined3d_desc.dst = desc->RenderTarget[0].DestBlend;
|
||||
wined3d_desc.op = desc->RenderTarget[0].BlendOp;
|
||||
|
||||
/* We cannot fail after creating a wined3d_blend_state object. It
|
||||
* would lead to double free. */
|
||||
|
|
|
@ -3584,6 +3584,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
|
|||
case WINED3D_RS_ALPHABLENDENABLE:
|
||||
case WINED3D_RS_SRCBLEND:
|
||||
case WINED3D_RS_DESTBLEND:
|
||||
case WINED3D_RS_BLENDOP:
|
||||
set_blend_state = TRUE;
|
||||
break;
|
||||
|
||||
|
@ -3657,6 +3658,7 @@ void CDECL wined3d_device_apply_stateblock(struct wined3d_device *device,
|
|||
desc.enable = state->rs[WINED3D_RS_ALPHABLENDENABLE];
|
||||
desc.src = state->rs[WINED3D_RS_SRCBLEND];
|
||||
desc.dst = state->rs[WINED3D_RS_DESTBLEND];
|
||||
desc.op = state->rs[WINED3D_RS_BLENDOP];
|
||||
|
||||
if (wined3d_bitmap_is_set(changed->renderState, WINED3D_RS_BLENDFACTOR))
|
||||
wined3d_color_from_d3dcolor(&colour, state->rs[WINED3D_RS_BLENDFACTOR]);
|
||||
|
|
|
@ -390,11 +390,6 @@ static void state_ambient(struct wined3d_context *context, const struct wined3d_
|
|||
checkGLcall("glLightModel for MODEL_AMBIENT");
|
||||
}
|
||||
|
||||
static void state_blendop_w(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
|
||||
{
|
||||
WARN("Unsupported in local OpenGL implementation: glBlendEquation\n");
|
||||
}
|
||||
|
||||
static GLenum gl_blend_op(const struct wined3d_gl_info *gl_info, enum wined3d_blend_op op)
|
||||
{
|
||||
switch (op)
|
||||
|
@ -418,12 +413,18 @@ static GLenum gl_blend_op(const struct wined3d_gl_info *gl_info, enum wined3d_bl
|
|||
}
|
||||
}
|
||||
|
||||
static void state_blendop(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
|
||||
static void blendop(const struct wined3d_state *state, const struct wined3d_gl_info *gl_info)
|
||||
{
|
||||
const struct wined3d_gl_info *gl_info = wined3d_context_gl(context)->gl_info;
|
||||
const struct wined3d_blend_state *b = state->blend_state;
|
||||
GLenum blend_equation_alpha = GL_FUNC_ADD_EXT;
|
||||
GLenum blend_equation = GL_FUNC_ADD_EXT;
|
||||
|
||||
if (!gl_info->supported[WINED3D_GL_BLEND_EQUATION])
|
||||
{
|
||||
WARN("Unsupported in local OpenGL implementation: glBlendEquation.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* BLENDOPALPHA requires GL_EXT_blend_equation_separate, so make sure it is around */
|
||||
if (state->render_states[WINED3D_RS_BLENDOPALPHA]
|
||||
&& !gl_info->supported[EXT_BLEND_EQUATION_SEPARATE])
|
||||
|
@ -432,7 +433,7 @@ static void state_blendop(struct wined3d_context *context, const struct wined3d_
|
|||
return;
|
||||
}
|
||||
|
||||
blend_equation = gl_blend_op(gl_info, state->render_states[WINED3D_RS_BLENDOP]);
|
||||
blend_equation = gl_blend_op(gl_info, b->desc.op);
|
||||
blend_equation_alpha = gl_blend_op(gl_info, state->render_states[WINED3D_RS_BLENDOPALPHA]);
|
||||
TRACE("blend_equation %#x, blend_equation_alpha %#x.\n", blend_equation, blend_equation_alpha);
|
||||
|
||||
|
@ -559,9 +560,7 @@ static void state_blend(struct wined3d_context *context, const struct wined3d_st
|
|||
|
||||
gl_blend_from_d3d(&src_blend, &dst_blend, b->desc.src, b->desc.dst, rt_format);
|
||||
|
||||
/* Re-apply BLENDOP(ALPHA) because of a possible SEPARATEALPHABLENDENABLE change */
|
||||
if (!isStateDirty(context, STATE_RENDER(WINED3D_RS_BLENDOP)))
|
||||
state_blendop(context, state, STATE_RENDER(WINED3D_RS_BLENDOPALPHA));
|
||||
blendop(state, gl_info);
|
||||
|
||||
if (state->render_states[WINED3D_RS_SEPARATEALPHABLENDENABLE])
|
||||
{
|
||||
|
@ -4649,8 +4648,6 @@ const struct wined3d_state_entry_template misc_state_template[] =
|
|||
{ STATE_RENDER(WINED3D_RS_DEBUGMONITORTOKEN), { STATE_RENDER(WINED3D_RS_DEBUGMONITORTOKEN), state_debug_monitor }, WINED3D_GL_EXT_NONE },
|
||||
{ STATE_RENDER(WINED3D_RS_COLORWRITEENABLE), { STATE_RENDER(WINED3D_RS_COLORWRITEENABLE), state_colorwrite0 }, EXT_DRAW_BUFFERS2 },
|
||||
{ STATE_RENDER(WINED3D_RS_COLORWRITEENABLE), { STATE_RENDER(WINED3D_RS_COLORWRITEENABLE), state_colorwrite }, WINED3D_GL_EXT_NONE },
|
||||
{ STATE_RENDER(WINED3D_RS_BLENDOP), { STATE_RENDER(WINED3D_RS_BLENDOP), state_blendop }, WINED3D_GL_BLEND_EQUATION },
|
||||
{ STATE_RENDER(WINED3D_RS_BLENDOP), { STATE_RENDER(WINED3D_RS_BLENDOP), state_blendop_w }, WINED3D_GL_EXT_NONE },
|
||||
{ STATE_RENDER(WINED3D_RS_COLORWRITEENABLE1), { STATE_RENDER(WINED3D_RS_COLORWRITEENABLE1), state_colorwrite1 }, EXT_DRAW_BUFFERS2 },
|
||||
{ STATE_RENDER(WINED3D_RS_COLORWRITEENABLE1), { STATE_RENDER(WINED3D_RS_COLORWRITEENABLE), NULL }, WINED3D_GL_EXT_NONE },
|
||||
{ STATE_RENDER(WINED3D_RS_COLORWRITEENABLE2), { STATE_RENDER(WINED3D_RS_COLORWRITEENABLE2), state_colorwrite2 }, EXT_DRAW_BUFFERS2 },
|
||||
|
@ -5422,6 +5419,7 @@ static void validate_state_table(struct wined3d_state_entry *state_table)
|
|||
{ 61, 127},
|
||||
{149, 150},
|
||||
{169, 169},
|
||||
{171, 171},
|
||||
{174, 177},
|
||||
{193, 193},
|
||||
{195, 197},
|
||||
|
|
|
@ -2032,6 +2032,7 @@ struct wined3d_blend_state_desc
|
|||
BOOL enable;
|
||||
enum wined3d_blend src;
|
||||
enum wined3d_blend dst;
|
||||
enum wined3d_blend_op op;
|
||||
};
|
||||
|
||||
struct wined3d_rasterizer_state_desc
|
||||
|
|
Loading…
Reference in New Issue