Signed-off-by: Henri Verbeet hverbeet@codeweavers.com --- dlls/d3d10core/tests/d3d10core.c | 2 +- dlls/d3d11/tests/d3d11.c | 5 ++--- dlls/wined3d/glsl_shader.c | 11 +++++++++-- 3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/dlls/d3d10core/tests/d3d10core.c b/dlls/d3d10core/tests/d3d10core.c index 6c381f62840..cc30b439d2b 100644 --- a/dlls/d3d10core/tests/d3d10core.c +++ b/dlls/d3d10core/tests/d3d10core.c @@ -16232,7 +16232,7 @@ static void test_format_compatibility(void) y = j / 4; colour = get_readback_color(&rb, x, y); expected = test_data[i].success ? bitmap_data[j] : initial_data[j]; - todo_wine_if(test_data[i].dst_ds || test_data[i].src_format == DXGI_FORMAT_R16_TYPELESS) + todo_wine_if(test_data[i].dst_ds) ok(colour == expected, "Test %u: Got unexpected colour 0x%08x at (%u, %u), expected 0x%08x.\n", i, colour, x, y, expected); } diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index 36c3995e7ad..7f8799637d7 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -28306,9 +28306,8 @@ static void test_format_compatibility(void) y = j / 4; colour = get_readback_color(&rb, x, y, 0); expected = test_data[i].success ? bitmap_data[j] : initial_data[j]; - todo_wine_if(!test_data[i].dst_ds && test_data[i].src_format == DXGI_FORMAT_R16_TYPELESS) - ok(colour == expected, "Test %u: Got unexpected colour 0x%08x at (%u, %u), expected 0x%08x.\n", - i, colour, x, y, expected); + ok(colour == expected, "Test %u: Got unexpected colour 0x%08x at (%u, %u), expected 0x%08x.\n", + i, colour, x, y, expected); } release_resource_readback(&rb);
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 45e7ecd4850..3876e71af58 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -13000,13 +13000,20 @@ static BOOL glsl_blitter_supported(enum wined3d_blit_op blit_op, const struct wi const struct wined3d_resource *dst_resource = &dst_texture->t.resource; const struct wined3d_format *src_format = src_resource->format; const struct wined3d_format *dst_format = dst_resource->format; + bool src_ds, dst_ds; BOOL decompress;
if (blit_op == WINED3D_BLIT_OP_RAW_BLIT && dst_format->id == src_format->id) { - if (dst_format->depth_size || dst_format->stencil_size) + src_ds = src_format->depth_size || src_format->stencil_size; + dst_ds = dst_format->depth_size || dst_format->stencil_size; + /* We could in principle support raw depth/stencil <-> colour blits as + * well in some cases, but note that typeless formats like e.g. + * R16_TYPELESS may use a normalised GL format for depth/stencil + * resources, and a floating-point format for colour resources, */ + if (src_ds && dst_ds) blit_op = WINED3D_BLIT_OP_DEPTH_BLIT; - else + else if (!src_ds && !dst_ds) blit_op = WINED3D_BLIT_OP_COLOR_BLIT; }