summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/draw/draw_pt_emit.c
diff options
context:
space:
mode:
authorZack Rusin <zack@kde.org>2010-05-31 02:20:34 -0400
committerZack Rusin <zackr@vmware.com>2010-06-08 06:28:10 -0400
commitc9db97c8229689060fab0edee7df717f804b99ce (patch)
tree377767cfb01881eb1fc29fb2ca23d80219bd7409 /src/gallium/auxiliary/draw/draw_pt_emit.c
parenta45b7f47ee0e38b288cc8fc4f6a1c013e8c227bc (diff)
gallium: a lot more complete implementation of stream output
interface wise we have everything needed by d3d10 and gl transform feedback. the draw module misses implementation of some corner cases (e.g. when stream output wants different number of components per output than normal rendering paths)
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_pt_emit.c')
-rw-r--r--src/gallium/auxiliary/draw/draw_pt_emit.c74
1 files changed, 0 insertions, 74 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_emit.c b/src/gallium/auxiliary/draw/draw_pt_emit.c
index 3b4237245e..5750276844 100644
--- a/src/gallium/auxiliary/draw/draw_pt_emit.c
+++ b/src/gallium/auxiliary/draw/draw_pt_emit.c
@@ -39,7 +39,6 @@ struct pt_emit {
struct draw_context *draw;
struct translate *translate;
- struct translate *so_translate;
struct translate_cache *cache;
unsigned prim;
@@ -47,51 +46,6 @@ struct pt_emit {
const struct vertex_info *vinfo;
};
-static void
-prepare_so_emit( struct pt_emit *emit,
- const struct vertex_info *vinfo )
-{
- struct draw_context *draw = emit->draw;
- unsigned i;
- struct translate_key hw_key;
- unsigned dst_offset = 0;
- unsigned output_stride = 0;
- boolean has_so = (draw->so.state.num_outputs > 0);
-
- if (has_so) {
-
- for (i = 0; i < draw->so.state.num_outputs; ++i) {
- unsigned src_offset = (vinfo->attrib[i].src_index * 4 * sizeof(float) );
- unsigned output_format = draw->so.state.format[i];
- unsigned output_bytes = util_format_get_blocksize(output_format);
-
- hw_key.element[i].type = TRANSLATE_ELEMENT_NORMAL;
- hw_key.element[i].input_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
- hw_key.element[i].input_buffer = 0;
- hw_key.element[i].input_offset = src_offset;
- hw_key.element[i].instance_divisor = 0;
- hw_key.element[i].output_format = output_format;
- hw_key.element[i].output_offset = dst_offset;
-
- dst_offset += output_bytes;
- output_stride += output_bytes;
- }
- hw_key.nr_elements = draw->so.state.num_outputs;
- hw_key.output_stride = output_stride;
-
- if (!emit->so_translate ||
- translate_key_compare(&emit->so_translate->key, &hw_key) != 0)
- {
- translate_key_sanitize(&hw_key);
- emit->so_translate = translate_cache_find(emit->cache, &hw_key);
- }
- } else {
- /* no stream output */
- emit->so_translate = NULL;
- }
-}
-
-
void draw_pt_emit_prepare( struct pt_emit *emit,
unsigned prim,
unsigned *max_vertices )
@@ -168,8 +122,6 @@ void draw_pt_emit_prepare( struct pt_emit *emit,
*max_vertices = (draw->render->max_vertex_buffer_bytes /
(vinfo->size * 4));
- prepare_so_emit( emit, vinfo );
-
/* even number */
*max_vertices = *max_vertices & ~1;
}
@@ -184,7 +136,6 @@ void draw_pt_emit( struct pt_emit *emit,
{
struct draw_context *draw = emit->draw;
struct translate *translate = emit->translate;
- struct translate *so_translate = emit->so_translate;
struct vbuf_render *render = draw->render;
void *hw_verts;
@@ -236,18 +187,6 @@ void draw_pt_emit( struct pt_emit *emit,
draw->instance_id,
hw_verts );
- if (so_translate) {
- void *so_buffer = draw->so.buffers[0];
-
- /* XXX we only support single output buffer right now */
- debug_assert(draw->so.num_buffers >= 0);
-
- so_translate->set_buffer(translate, 0, vertex_data,
- stride, ~0);
- so_translate->run(translate, 0, vertex_count,
- draw->instance_id, so_buffer);
- }
-
render->unmap_vertices( render,
0,
vertex_count - 1 );
@@ -267,7 +206,6 @@ void draw_pt_emit_linear(struct pt_emit *emit,
{
struct draw_context *draw = emit->draw;
struct translate *translate = emit->translate;
- struct translate *so_translate = emit->so_translate;
struct vbuf_render *render = draw->render;
void *hw_verts;
@@ -309,18 +247,6 @@ void draw_pt_emit_linear(struct pt_emit *emit,
draw->instance_id,
hw_verts);
- if (so_translate) {
- void *so_buffer = draw->so.buffers[0];
-
- /* XXX we only support single output buffer right now */
- debug_assert(draw->so.num_buffers >= 0);
-
- so_translate->set_buffer(translate, 0,
- vertex_data, stride, count - 1);
- so_translate->run(translate, 0, count,
- draw->instance_id, so_buffer);
- }
-
if (0) {
unsigned i;
for (i = 0; i < count; i++) {