Revert "draw: clear the draw buffers in draw"
authorZack Rusin <zackr@vmware.com>
Tue, 18 Jun 2013 01:06:11 +0000 (21:06 -0400)
committerZack Rusin <zackr@vmware.com>
Tue, 18 Jun 2013 01:43:10 +0000 (21:43 -0400)
This reverts commit 41966fdb3b71c0b70aeb095e0eb3c5626c144a3a.
While it's a lot cleaner it causes regressions because
the draw interface is always called from the draw functions
of the drivers (because the buffers need to be mapped) which
means that the stream output buffers endup being cleared on
every draw rather than on setting.

Signed-off-by: Zack Rusin <zackr@vmware.com>
src/gallium/auxiliary/draw/draw_context.c
src/gallium/auxiliary/draw/draw_context.h
src/gallium/drivers/llvmpipe/lp_context.h
src/gallium/drivers/llvmpipe/lp_draw_arrays.c
src/gallium/drivers/llvmpipe/lp_state_so.c
src/gallium/drivers/softpipe/sp_context.h
src/gallium/drivers/softpipe/sp_draw_arrays.c
src/gallium/drivers/softpipe/sp_state_so.c

index 201c62d945cac8632509f900a2537aa53ffdab12..4a08765c94f5e3a8b2726ec52ae2563eb04b45e2 100644 (file)
@@ -807,36 +807,15 @@ draw_get_rasterizer_no_cull( struct draw_context *draw,
    return draw->rasterizer_no_cull[scissor][flatshade];
 }
 
-/**
- * Sets the mapped so targets.
- *
- * The append bitmask specifies which of the buffers are in
- * the append mode. The append mode means that the buffer
- * should be appended to, rather than written to from the start.
- * i.e. the outputs should be written starting from the last 
- * location to which the previous
- * pass of stream output wrote to in this buffer.
- * If the buffer is not in an append mode (which is more common)
- * the writing begins from the start of the buffer.
- *
- */
 void
 draw_set_mapped_so_targets(struct draw_context *draw,
                            int num_targets,
-                           struct draw_so_target *targets[PIPE_MAX_SO_BUFFERS],
-                           unsigned append_bitmask)
+                           struct draw_so_target *targets[PIPE_MAX_SO_BUFFERS])
 {
    int i;
 
-   for (i = 0; i < num_targets; i++) {
+   for (i = 0; i < num_targets; i++)
       draw->so.targets[i] = targets[i];
-      /* if we're not appending then lets reset the internal
-         data of our so target */
-      if (!(append_bitmask & (1 << i)) && draw->so.targets[i]) {
-         draw->so.targets[i]->internal_offset = 0;
-         draw->so.targets[i]->emitted_vertices = 0;
-      }
-   }
    for (i = num_targets; i < PIPE_MAX_SO_BUFFERS; i++)
       draw->so.targets[i] = NULL;
 
index ae6306811f96a67f1fc98aec0afef84946c4afd9..4a1b27ee41494cebd8254a7f1c6cbdef2dc70e10 100644 (file)
@@ -231,8 +231,7 @@ draw_set_mapped_constant_buffer(struct draw_context *draw,
 void
 draw_set_mapped_so_targets(struct draw_context *draw,
                            int num_targets,
-                           struct draw_so_target *targets[PIPE_MAX_SO_BUFFERS],
-                           unsigned append_bitmask);
+                           struct draw_so_target *targets[PIPE_MAX_SO_BUFFERS]);
 
 
 /***********************************************************************
index 27e8b0134d07645687b8e4165a6e296873c4599e..ab520019f826d7c20b3d15f94cd3d83e54db6b47 100644 (file)
@@ -91,7 +91,6 @@ struct llvmpipe_context {
 
    struct draw_so_target *so_targets[PIPE_MAX_SO_BUFFERS];
    int num_so_targets;
-   unsigned so_append_bitmask;
    struct pipe_query_data_so_statistics so_stats;
    unsigned num_primitives_generated;
 
index 11b665af8ef307c6fd9a740987f1b066208a5488..4e239043ec4d85139497e64d836f51e5d7650f60 100644 (file)
@@ -104,7 +104,7 @@ llvmpipe_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
       }
    }
    draw_set_mapped_so_targets(draw, lp->num_so_targets,
-                              lp->so_targets, lp->so_append_bitmask);
+                              lp->so_targets);
 
    llvmpipe_prepare_vertex_sampling(lp,
                                     lp->num_sampler_views[PIPE_SHADER_VERTEX],
@@ -134,7 +134,7 @@ llvmpipe_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
    if (mapped_indices) {
       draw_set_indexes(draw, NULL, 0, 0);
    }
-   draw_set_mapped_so_targets(draw, 0, NULL, 0);
+   draw_set_mapped_so_targets(draw, 0, NULL);
 
    if (lp->gs && !lp->gs->shader.tokens) {
       /* we have attached stream output to the vs for rendering,
index c20ff26639daa9e0594208604201db487d370fdc..fa58f79c9c15326578c12b29b95c675bb7297d8d 100644 (file)
@@ -70,13 +70,17 @@ llvmpipe_set_so_targets(struct pipe_context *pipe,
    int i;
    for (i = 0; i < num_targets; i++) {
       pipe_so_target_reference((struct pipe_stream_output_target **)&llvmpipe->so_targets[i], targets[i]);
+      /* if we're not appending then lets reset the internal
+         data of our so target */
+      if (!(append_bitmask & (1 << i)) && llvmpipe->so_targets[i]) {
+         llvmpipe->so_targets[i]->internal_offset = 0;
+         llvmpipe->so_targets[i]->emitted_vertices = 0;
+      }
    }
 
    for (; i < llvmpipe->num_so_targets; i++) {
       pipe_so_target_reference((struct pipe_stream_output_target **)&llvmpipe->so_targets[i], NULL);
    }
-
-   llvmpipe->so_append_bitmask = append_bitmask;
    llvmpipe->num_so_targets = num_targets;
 }
 
index d7a00b95b25491a97a9dc32124cf32dbae9b89d0..e8de81a4c7065019d3608ce008a166d1bddd8900 100644 (file)
@@ -88,7 +88,6 @@ struct softpipe_context {
 
    struct draw_so_target *so_targets[PIPE_MAX_SO_BUFFERS];
    unsigned num_so_targets;
-   unsigned so_append_bitmask;
    
    struct pipe_query_data_so_statistics so_stats;
    unsigned num_primitives_generated;
index cde4d51c7343151bdf46c5f85b8c33c553dad3c4..45b1390de4d2987be0161eb3e7a71ba2a5b58b05 100644 (file)
@@ -112,7 +112,7 @@ softpipe_draw_vbo(struct pipe_context *pipe,
    }
 
    draw_set_mapped_so_targets(draw, sp->num_so_targets,
-                              sp->so_targets, sp->so_append_bitmask);
+                              sp->so_targets);
 
    if (sp->gs && !sp->gs->shader.tokens) {
       /* we have an empty geometry shader with stream output, so
@@ -135,7 +135,7 @@ softpipe_draw_vbo(struct pipe_context *pipe,
       draw_set_indexes(draw, NULL, 0, 0);
    }
 
-   draw_set_mapped_so_targets(draw, 0, NULL, 0);
+   draw_set_mapped_so_targets(draw, 0, NULL);
 
    /*
     * TODO: Flush only when a user vertex/index buffer is present
index 96bb6b17ae8b61c4d60d5002249ecbececa85605..3682c6c6742175fa2606d871047a693d289ba5a2 100644 (file)
@@ -77,7 +77,6 @@ softpipe_set_so_targets(struct pipe_context *pipe,
    }
 
    softpipe->num_so_targets = num_targets;
-   softpipe->so_append_bitmask = append_bitmask;
 }
 
 void