d3d10core/tests: Add a test for dual source blending.

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:
Zebediah Figura 2020-03-17 19:30:39 -05:00 committed by Alexandre Julliard
parent df569853bf
commit 0d6d104513
1 changed files with 68 additions and 0 deletions

View File

@ -18286,6 +18286,73 @@ static void test_independent_blend(void)
release_test_context(&test_context);
}
static void test_dual_source_blend(void)
{
struct d3d10core_test_context test_context;
ID3D10BlendState *blend_state;
D3D10_BLEND_DESC blend_desc;
ID3D10PixelShader *ps;
ID3D10Device *device;
DWORD color;
HRESULT hr;
static const DWORD ps_code[] =
{
#if 0
void main(float4 position : SV_Position,
out float4 t0 : SV_Target0, out float4 t1 : SV_Target1)
{
t0 = float4(0.5, 0.5, 0.0, 1.0);
t1 = float4(0.0, 0.5, 0.5, 0.0);
}
#endif
0x43425844, 0x87120d01, 0xa0014738, 0x3a32d86c, 0x9d757441, 0x00000001, 0x00000118, 0x00000003,
0x0000002c, 0x00000060, 0x000000ac, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000000f, 0x505f5653, 0x7469736f, 0x006e6f69,
0x4e47534f, 0x00000044, 0x00000002, 0x00000008, 0x00000038, 0x00000000, 0x00000000, 0x00000003,
0x00000000, 0x0000000f, 0x00000038, 0x00000001, 0x00000000, 0x00000003, 0x00000001, 0x0000000f,
0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x00000064, 0x00000040, 0x00000019, 0x03000065,
0x001020f2, 0x00000000, 0x03000065, 0x001020f2, 0x00000001, 0x08000036, 0x001020f2, 0x00000000,
0x00004002, 0x3f000000, 0x3f000000, 0x00000000, 0x3f000000, 0x08000036, 0x001020f2, 0x00000001,
0x00004002, 0x00000000, 0x3f000000, 0x3f000000, 0x00000000, 0x0100003e
};
static const float clear_color[] = {0.7f, 0.0f, 1.0f, 1.0f};
if (!init_test_context(&test_context))
return;
device = test_context.device;
hr = ID3D10Device_CreatePixelShader(device, ps_code, sizeof(ps_code), &ps);
ok(SUCCEEDED(hr), "Failed to create pixel shader, hr %#x.\n", hr);
ID3D10Device_PSSetShader(device, ps);
memset(&blend_desc, 0, sizeof(blend_desc));
blend_desc.BlendEnable[0] = TRUE;
blend_desc.SrcBlend = D3D10_BLEND_SRC1_COLOR;
blend_desc.DestBlend = D3D10_BLEND_SRC1_COLOR;
blend_desc.BlendOp = D3D10_BLEND_OP_ADD;
blend_desc.SrcBlendAlpha = D3D10_BLEND_ONE;
blend_desc.DestBlendAlpha = D3D10_BLEND_ZERO;
blend_desc.BlendOpAlpha = D3D10_BLEND_OP_ADD;
blend_desc.RenderTargetWriteMask[0] = D3D10_COLOR_WRITE_ENABLE_ALL;
hr = ID3D10Device_CreateBlendState(device, &blend_desc, &blend_state);
ok(hr == S_OK, "Failed to create blend state, hr %#x.\n", hr);
ID3D10Device_OMSetBlendState(device, blend_state, NULL, D3D10_DEFAULT_SAMPLE_MASK);
ID3D10Device_ClearRenderTargetView(device, test_context.backbuffer_rtv, clear_color);
draw_quad(&test_context);
color = get_texture_color(test_context.backbuffer, 320, 240);
ok(compare_color(color, 0x80804000, 1), "Got unexpected color 0x%08x.\n", color);
ID3D10BlendState_Release(blend_state);
ID3D10PixelShader_Release(ps);
release_test_context(&test_context);
}
START_TEST(d3d10core)
{
unsigned int argc, i;
@ -18406,6 +18473,7 @@ START_TEST(d3d10core)
queue_test(test_desktop_window);
queue_test(test_color_mask);
queue_test(test_independent_blend);
queue_test(test_dual_source_blend);
run_queued_tests();