Module: wine Branch: master Commit: 1ec669565010acf86ad21d38435894595a8456bd URL: https://source.winehq.org/git/wine.git/?a=commit;h=1ec669565010acf86ad21d384...
Author: Zebediah Figura z.figura12@gmail.com Date: Tue Mar 16 00:42:22 2021 -0500
wined3d: Introduce wined3d_device_context_set_scissor_rects().
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
---
dlls/wined3d/device.c | 45 ++++++++++++++++++++++++++++++--------------- dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 2 ++ 3 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 0ba5215c076..3feabbe79f1 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1835,7 +1835,6 @@ static void wined3d_device_set_sampler_state(struct wined3d_device *device, void CDECL wined3d_device_set_scissor_rects(struct wined3d_device *device, unsigned int rect_count, const RECT *rects) { - struct wined3d_state *state = device->cs->c.state; unsigned int i;
TRACE("device %p, rect_count %u, rects %p.\n", device, rect_count, rects); @@ -1845,20 +1844,7 @@ void CDECL wined3d_device_set_scissor_rects(struct wined3d_device *device, unsig TRACE("%u: %s\n", i, wine_dbgstr_rect(&rects[i])); }
- if (state->scissor_rect_count == rect_count - && !memcmp(state->scissor_rects, rects, rect_count * sizeof(*rects))) - { - TRACE("App is setting the old scissor rectangles over, nothing to do.\n"); - return; - } - - if (rect_count) - memcpy(state->scissor_rects, rects, rect_count * sizeof(*rects)); - else - memset(state->scissor_rects, 0, sizeof(state->scissor_rects)); - state->scissor_rect_count = rect_count; - - wined3d_device_context_emit_set_scissor_rects(&device->cs->c, rect_count, rects); + wined3d_device_context_set_scissor_rects(&device->cs->c, rect_count, rects); }
void CDECL wined3d_device_get_scissor_rects(const struct wined3d_device *device, unsigned int *rect_count, RECT *rects) @@ -2173,6 +2159,35 @@ void CDECL wined3d_device_context_set_viewports(struct wined3d_device_context *c wined3d_device_context_emit_set_viewports(context, viewport_count, viewports); }
+void CDECL wined3d_device_context_set_scissor_rects(struct wined3d_device_context *context, unsigned int rect_count, + const RECT *rects) +{ + struct wined3d_state *state = context->state; + unsigned int i; + + TRACE("context %p, rect_count %u, rects %p.\n", context, rect_count, rects); + + for (i = 0; i < rect_count; ++i) + { + TRACE("%u: %s\n", i, wine_dbgstr_rect(&rects[i])); + } + + if (state->scissor_rect_count == rect_count + && !memcmp(state->scissor_rects, rects, rect_count * sizeof(*rects))) + { + TRACE("App is setting the old scissor rectangles over, nothing to do.\n"); + return; + } + + if (rect_count) + memcpy(state->scissor_rects, rects, rect_count * sizeof(*rects)); + else + memset(state->scissor_rects, 0, sizeof(state->scissor_rects)); + state->scissor_rect_count = rect_count; + + wined3d_device_context_emit_set_scissor_rects(context, rect_count, rects); +} + void CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader) { TRACE("device %p, shader %p.\n", device, shader); diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 8fc190b73ba..60d85a46290 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -170,6 +170,7 @@ @ cdecl wined3d_device_context_set_constant_buffer(ptr long long ptr) @ cdecl wined3d_device_context_set_depth_stencil_state(ptr ptr long) @ cdecl wined3d_device_context_set_rasterizer_state(ptr ptr) +@ cdecl wined3d_device_context_set_scissor_rects(ptr long ptr) @ cdecl wined3d_device_context_set_shader(ptr long ptr) @ cdecl wined3d_device_context_set_viewports(ptr long ptr)
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index f3de0098ef3..7b585b92cef 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2556,6 +2556,8 @@ void __cdecl wined3d_device_context_set_depth_stencil_state(struct wined3d_devic struct wined3d_depth_stencil_state *depth_stencil_state, unsigned int stencil_ref); void __cdecl wined3d_device_context_set_rasterizer_state(struct wined3d_device_context *context, struct wined3d_rasterizer_state *rasterizer_state); +void __cdecl wined3d_device_context_set_scissor_rects(struct wined3d_device_context *context, unsigned int rect_count, + const RECT *rects); void __cdecl wined3d_device_context_set_shader(struct wined3d_device_context *context, enum wined3d_shader_type type, struct wined3d_shader *shader); void __cdecl wined3d_device_context_set_viewports(struct wined3d_device_context *context, unsigned int viewport_count,