[Mesa-dev] [PATCH 3/4] st/mesa: add support for indirect drawing

Christoph Bumiller e0425955 at student.tuwien.ac.at
Fri Feb 1 13:50:22 PST 2013


---
 src/mesa/state_tracker/st_draw.c       |    7 ++++++-
 src/mesa/state_tracker/st_extensions.c |    4 +++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 0f3aae7..f9fbd32 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -256,6 +256,10 @@ st_draw_vbo(struct gl_context *ctx,
       }
    }
 
+   if (indirect) {
+      info.indirect = st_buffer_object(indirect)->buffer;
+   }
+
    /* do actual drawing */
    for (i = 0; i < nr_prims; i++) {
       info.mode = translate_prim( ctx, prims[i].mode );
@@ -268,6 +272,7 @@ st_draw_vbo(struct gl_context *ctx,
          info.min_index = info.start;
          info.max_index = info.start + info.count - 1;
       }
+      info.indirect_offset = prims[i].indirect_offset;
 
       if (ST_DEBUG & DEBUG_DRAW) {
          debug_printf("st/draw: mode %s  start %u  count %u  indexed %d\n",
@@ -277,7 +282,7 @@ st_draw_vbo(struct gl_context *ctx,
                       info.indexed);
       }
 
-      if (info.count_from_stream_output) {
+      if (info.count_from_stream_output || info.indirect) {
          cso_draw_vbo(st->cso_context, &info);
       }
       else if (info.primitive_restart) {
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 214588f..548bab2 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -398,7 +398,9 @@ void st_init_extensions(struct st_context *st)
       { o(MESA_texture_array),               PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS         },
 
       { o(OES_standard_derivatives),         PIPE_CAP_SM3                              },
-      { o(ARB_texture_cube_map_array),       PIPE_CAP_CUBE_MAP_ARRAY                   }
+      { o(ARB_texture_cube_map_array),       PIPE_CAP_CUBE_MAP_ARRAY                   },
+      { o(ARB_draw_indirect),                PIPE_CAP_DRAW_INDIRECT                    },
+      { o(ARB_multi_draw_indirect),          PIPE_CAP_DRAW_INDIRECT                    }
    };
 
    /* Required: render target and sampler support */
-- 
1.7.3.4



More information about the mesa-dev mailing list