This should not change behavior, however on some Vulkan implementations, negative scissor offset combined with negative viewport offset causes nothing to be drawn.
Signed-off-by: Jan Sikorski jsikorski@codeweavers.com --- dlls/wined3d/context_vk.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/dlls/wined3d/context_vk.c b/dlls/wined3d/context_vk.c index fbc1e294fcd..c50a12fac28 100644 --- a/dlls/wined3d/context_vk.c +++ b/dlls/wined3d/context_vk.c @@ -2204,6 +2204,10 @@ static bool wined3d_context_vk_update_graphics_pipeline_key(struct wined3d_conte key->scissor.extent.width = key->viewport.width; key->scissor.extent.height = key->viewport.height; } + if (key->scissor.offset.x < 0) + key->scissor.offset.x = 0; + if (key->scissor.offset.y < 0) + key->scissor.offset.y = 0; key->viewport.y += key->viewport.height; key->viewport.height = -key->viewport.height;
Signed-off-by: Jan Sikorski jsikorski@codeweavers.com --- dlls/d3d11/tests/d3d11.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index 191df67a41d..95d7c847720 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -11550,6 +11550,23 @@ static void test_scissor(void) color = get_texture_color(test_context.backbuffer, 320, 420); ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
+ set_viewport(immediate_context, -1.0f, 0.0f, 641, 480, 0.0f, 1.0f); + SetRect(&scissor_rect, -1, 0, 640, 480); + ID3D11DeviceContext_RSSetScissorRects(immediate_context, 1, &scissor_rect); + ID3D11DeviceContext_ClearRenderTargetView(immediate_context, test_context.backbuffer_rtv, red); + check_texture_color(test_context.backbuffer, 0xff0000ff, 1); + draw_color_quad(&test_context, &green); + color = get_texture_color(test_context.backbuffer, 320, 60); + ok(compare_color(color, 0xff00ff00, 1), "Got unexpected color 0x%08x.\n", color); + color = get_texture_color(test_context.backbuffer, 80, 240); + ok(compare_color(color, 0xff00ff00, 1), "Got unexpected color 0x%08x.\n", color); + color = get_texture_color(test_context.backbuffer, 320, 240); + ok(compare_color(color, 0xff00ff00, 1), "Got unexpected color 0x%08x.\n", color); + color = get_texture_color(test_context.backbuffer, 560, 240); + ok(compare_color(color, 0xff00ff00, 1), "Got unexpected color 0x%08x.\n", color); + color = get_texture_color(test_context.backbuffer, 320, 420); + ok(compare_color(color, 0xff00ff00, 1), "Got unexpected color 0x%08x.\n", color); + ID3D11RasterizerState_Release(rs); release_test_context(&test_context); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=89888
Your paranoid android.
=== w1064v1809 (32 bit report) ===
d3d11: d3d11.c:5811: Test failed: Got unexpected IAVertices count: 0. d3d11.c:5812: Test failed: Got unexpected IAPrimitives count: 0. d3d11.c:5813: Test failed: Got unexpected VSInvocations count: 0. d3d11.c:5816: Test failed: Got unexpected CInvocations count: 0. d3d11.c:5817: Test failed: Got unexpected CPrimitives count: 0.
=== w1064 (32 bit report) ===
d3d11: d3d11.c:5811: Test failed: Got unexpected IAVertices count: 0. d3d11.c:5812: Test failed: Got unexpected IAPrimitives count: 0. d3d11.c:5813: Test failed: Got unexpected VSInvocations count: 0. d3d11.c:5816: Test failed: Got unexpected CInvocations count: 0. d3d11.c:5817: Test failed: Got unexpected CPrimitives count: 0. d3d11.c:5658: Test failed: Got unexpected query result 0x0000000000000000.
=== w10pro64 (32 bit report) ===
d3d11: d3d11.c:5658: Test failed: Got unexpected query result 0x0000000000000000.
=== w2008s64 (64 bit report) ===
d3d11: d3d11.c:6141: Test failed: Got unexpected NumPrimitivesWritten: 3229614080. d3d11.c:6144: Test failed: Got unexpected PrimitivesStorageNeeded: 3229614080.