d3d11: Try to avoid spurious blend state FIXMEs().
Signed-off-by: Józef Kucia <jkucia@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
f73340a906
commit
7019347409
|
@ -696,9 +696,6 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
|
||||||
if (!blend_factor)
|
if (!blend_factor)
|
||||||
blend_factor = default_blend_factor;
|
blend_factor = default_blend_factor;
|
||||||
|
|
||||||
if (blend_factor[0] != 1.0f || blend_factor[1] != 1.0f || blend_factor[2] != 1.0f || blend_factor[3] != 1.0f)
|
|
||||||
FIXME("Ignoring blend factor %s.\n", debug_float4(blend_factor));
|
|
||||||
|
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
memcpy(device->blend_factor, blend_factor, 4 * sizeof(*blend_factor));
|
memcpy(device->blend_factor, blend_factor, 4 * sizeof(*blend_factor));
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_MULTISAMPLEMASK, sample_mask);
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_MULTISAMPLEMASK, sample_mask);
|
||||||
|
@ -718,30 +715,27 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_OMSetBlendState(ID3D11Devi
|
||||||
}
|
}
|
||||||
|
|
||||||
desc = &device->blend_state->desc;
|
desc = &device->blend_state->desc;
|
||||||
/* glSampleCoverage() */
|
|
||||||
if (desc->AlphaToCoverageEnable)
|
|
||||||
FIXME("Ignoring AlphaToCoverageEnable %#x.\n", desc->AlphaToCoverageEnable);
|
|
||||||
/* glEnableIndexedEXT(GL_BLEND, ...) */
|
|
||||||
FIXME("Per-rendertarget blend not implemented.\n");
|
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_ALPHABLENDENABLE,
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_ALPHABLENDENABLE,
|
||||||
desc->RenderTarget[0].BlendEnable);
|
desc->RenderTarget[0].BlendEnable);
|
||||||
if (desc->RenderTarget[0].BlendEnable)
|
if (desc->RenderTarget[0].BlendEnable)
|
||||||
{
|
{
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SRCBLEND,
|
const D3D11_RENDER_TARGET_BLEND_DESC *d = &desc->RenderTarget[0];
|
||||||
desc->RenderTarget[0].SrcBlend);
|
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DESTBLEND,
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SRCBLEND, d->SrcBlend);
|
||||||
desc->RenderTarget[0].DestBlend);
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DESTBLEND, d->DestBlend);
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_BLENDOP,
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_BLENDOP, d->BlendOp);
|
||||||
desc->RenderTarget[0].BlendOp);
|
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SEPARATEALPHABLENDENABLE, TRUE);
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SEPARATEALPHABLENDENABLE, TRUE);
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SRCBLENDALPHA,
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SRCBLENDALPHA, d->SrcBlendAlpha);
|
||||||
desc->RenderTarget[0].SrcBlendAlpha);
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DESTBLENDALPHA, d->DestBlendAlpha);
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DESTBLENDALPHA,
|
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_BLENDOPALPHA, d->BlendOpAlpha);
|
||||||
desc->RenderTarget[0].DestBlendAlpha);
|
|
||||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_BLENDOPALPHA,
|
if (memcmp(blend_factor, default_blend_factor, sizeof(default_blend_factor))
|
||||||
desc->RenderTarget[0].BlendOpAlpha);
|
&& (d->SrcBlend == D3D11_BLEND_BLEND_FACTOR || d->SrcBlend == D3D11_BLEND_INV_BLEND_FACTOR
|
||||||
|
|| d->DestBlend == D3D11_BLEND_BLEND_FACTOR || d->DestBlend == D3D11_BLEND_INV_BLEND_FACTOR
|
||||||
|
|| d->SrcBlendAlpha == D3D11_BLEND_BLEND_FACTOR || d->SrcBlendAlpha == D3D11_BLEND_INV_BLEND_FACTOR
|
||||||
|
|| d->DestBlendAlpha == D3D11_BLEND_BLEND_FACTOR || d->DestBlendAlpha == D3D11_BLEND_INV_BLEND_FACTOR))
|
||||||
|
FIXME("Ignoring blend factor %s.\n", debug_float4(blend_factor));
|
||||||
}
|
}
|
||||||
FIXME("Color mask > 3 not implemented.\n");
|
|
||||||
wined3d_device_set_render_state(device->wined3d_device,
|
wined3d_device_set_render_state(device->wined3d_device,
|
||||||
WINED3D_RS_COLORWRITEENABLE, desc->RenderTarget[0].RenderTargetWriteMask);
|
WINED3D_RS_COLORWRITEENABLE, desc->RenderTarget[0].RenderTargetWriteMask);
|
||||||
wined3d_device_set_render_state(device->wined3d_device,
|
wined3d_device_set_render_state(device->wined3d_device,
|
||||||
|
@ -2643,8 +2637,19 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateBlendState(ID3D11Device *ifa
|
||||||
tmp_desc.RenderTarget[i].DestBlendAlpha = desc->RenderTarget[j].DestBlendAlpha;
|
tmp_desc.RenderTarget[i].DestBlendAlpha = desc->RenderTarget[j].DestBlendAlpha;
|
||||||
tmp_desc.RenderTarget[i].BlendOpAlpha = desc->RenderTarget[j].BlendOpAlpha;
|
tmp_desc.RenderTarget[i].BlendOpAlpha = desc->RenderTarget[j].BlendOpAlpha;
|
||||||
tmp_desc.RenderTarget[i].RenderTargetWriteMask = desc->RenderTarget[j].RenderTargetWriteMask;
|
tmp_desc.RenderTarget[i].RenderTargetWriteMask = desc->RenderTarget[j].RenderTargetWriteMask;
|
||||||
|
|
||||||
|
if (i > 3 && tmp_desc.RenderTarget[i].RenderTargetWriteMask != D3D11_COLOR_WRITE_ENABLE_ALL)
|
||||||
|
FIXME("Color mask %#x not supported for render target %u.\n",
|
||||||
|
tmp_desc.RenderTarget[i].RenderTargetWriteMask, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* glSampleCoverage() */
|
||||||
|
if (tmp_desc.AlphaToCoverageEnable)
|
||||||
|
FIXME("Ignoring AlphaToCoverageEnable %#x.\n", tmp_desc.AlphaToCoverageEnable);
|
||||||
|
/* glEnableIndexedEXT(GL_BLEND, ...) */
|
||||||
|
if (tmp_desc.IndependentBlendEnable)
|
||||||
|
FIXME("Per-rendertarget blend not implemented.\n");
|
||||||
|
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
if ((entry = wine_rb_get(&device->blend_states, &tmp_desc)))
|
if ((entry = wine_rb_get(&device->blend_states, &tmp_desc)))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue