=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Factor out draw_indirect() function.

Alexandre Julliard julliard at winehq.org
Fri Nov 3 18:05:40 CDT 2017


Module: wine
Branch: master
Commit: 7f1f586f5df2d67745029b49656ecbc97016974b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7f1f586f5df2d67745029b49656ecbc97016974b

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Fri Nov  3 14:35:17 2017 +0100

wined3d: Factor out draw_indirect() function.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/drawprim.c | 55 ++++++++++++++++++++++++++-----------------------
 1 file changed, 29 insertions(+), 26 deletions(-)

diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index f1d57dc..6900578 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -395,6 +395,34 @@ static void draw_primitive_immediate_mode(struct wined3d_context *context, const
     checkGLcall("glEnd and previous calls");
 }
 
+static void draw_indirect(struct wined3d_context *context, const struct wined3d_state *state,
+        const struct wined3d_indirect_draw_parameters *parameters, unsigned int idx_size)
+{
+    const struct wined3d_gl_info *gl_info = context->gl_info;
+    struct wined3d_buffer *buffer = parameters->buffer;
+
+    wined3d_buffer_load(buffer, context, state);
+    GL_EXTCALL(glBindBuffer(GL_DRAW_INDIRECT_BUFFER, buffer->buffer_object));
+
+    if (idx_size)
+    {
+        GLenum idx_type = idx_size == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT;
+        if (state->index_offset)
+            FIXME("Ignoring index offset %u.\n", state->index_offset);
+        GL_EXTCALL(glDrawElementsIndirect(state->gl_primitive_type, idx_type,
+                (void *)(GLintptr)parameters->offset));
+    }
+    else
+    {
+        GL_EXTCALL(glDrawArraysIndirect(state->gl_primitive_type,
+                (void *)(GLintptr)parameters->offset));
+    }
+
+    GL_EXTCALL(glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0));
+
+    checkGLcall("draw indirect");
+}
+
 static void remove_vbos(struct wined3d_context *context,
         const struct wined3d_state *state, struct wined3d_stream_info *s)
 {
@@ -645,34 +673,9 @@ void draw_primitive(struct wined3d_device *device, const struct wined3d_state *s
     if (parameters->indirect)
     {
         if (!context->use_immediate_mode_draw && !emulation)
-        {
-            struct wined3d_buffer *buffer = parameters->u.indirect.buffer;
-
-            wined3d_buffer_load(buffer, context, state);
-            GL_EXTCALL(glBindBuffer(GL_DRAW_INDIRECT_BUFFER, buffer->buffer_object));
-
-            if (idx_size)
-            {
-                GLenum idx_type = idx_size == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT;
-                if (state->index_offset)
-                    FIXME("Ignoring index offset %u.\n", state->index_offset);
-                GL_EXTCALL(glDrawElementsIndirect(state->gl_primitive_type, idx_type,
-                        (void *)(GLintptr)parameters->u.indirect.offset));
-            }
-            else
-            {
-                GL_EXTCALL(glDrawArraysIndirect(state->gl_primitive_type,
-                        (void *)(GLintptr)parameters->u.indirect.offset));
-            }
-
-            GL_EXTCALL(glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0));
-
-            checkGLcall("draw indirect");
-        }
+            draw_indirect(context, state, &parameters->u.indirect, idx_size);
         else
-        {
             FIXME("Indirect draws with immediate mode/emulation are not supported.\n");
-        }
     }
     else
     {




More information about the wine-cvs mailing list