summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/draw
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2007-12-11 13:00:12 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2007-12-11 13:14:56 +0000
commit48731280d08bef51c406703e82986643e17b4757 (patch)
tree41aff56ce1b14d4b700b0af47cad581bde922619 /src/mesa/pipe/draw
parent89afc929f4e18165f1043c36844150e78f300cd5 (diff)
gallium: Remove feedback interfaces from pipe driver.
Something similar will return when geometry shaders are added, but for now this interface is not required.
Diffstat (limited to 'src/mesa/pipe/draw')
-rw-r--r--src/mesa/pipe/draw/draw_context.c21
-rw-r--r--src/mesa/pipe/draw/draw_context.h6
-rw-r--r--src/mesa/pipe/draw/draw_feedback.c253
-rw-r--r--src/mesa/pipe/draw/draw_private.h9
-rw-r--r--src/mesa/pipe/draw/draw_validate.c5
5 files changed, 0 insertions, 294 deletions
diff --git a/src/mesa/pipe/draw/draw_context.c b/src/mesa/pipe/draw/draw_context.c
index 33727e6547..179f7ed0d6 100644
--- a/src/mesa/pipe/draw/draw_context.c
+++ b/src/mesa/pipe/draw/draw_context.c
@@ -55,7 +55,6 @@ struct draw_context *draw_create( void )
draw->pipeline.clip = draw_clip_stage( draw );
draw->pipeline.flatshade = draw_flatshade_stage( draw );
draw->pipeline.cull = draw_cull_stage( draw );
- draw->pipeline.feedback = draw_feedback_stage( draw );
draw->pipeline.validate = draw_validate_stage( draw );
draw->pipeline.first = draw->pipeline.validate;
@@ -100,7 +99,6 @@ void draw_destroy( struct draw_context *draw )
draw->pipeline.clip->destroy( draw->pipeline.clip );
draw->pipeline.flatshade->destroy( draw->pipeline.flatshade );
draw->pipeline.cull->destroy( draw->pipeline.cull );
- draw->pipeline.feedback->destroy( draw->pipeline.feedback );
draw->pipeline.validate->destroy( draw->pipeline.validate );
if (draw->pipeline.rasterize)
draw->pipeline.rasterize->destroy( draw->pipeline.rasterize );
@@ -117,13 +115,6 @@ void draw_flush( struct draw_context *draw )
}
-void draw_set_feedback_state( struct draw_context *draw,
- const struct pipe_feedback_state *feedback )
-{
- draw_flush( draw );
- draw->feedback = *feedback;
-}
-
/**
* Register new primitive rasterization/rendering state.
@@ -223,18 +214,6 @@ draw_set_mapped_constant_buffer(struct draw_context *draw,
}
-void
-draw_set_mapped_feedback_buffer(struct draw_context *draw, uint index,
- void *buffer, uint size)
-{
- draw_flush( draw );
-
- assert(index < PIPE_MAX_FEEDBACK_ATTRIBS);
- draw->user.feedback_buffer[index] = buffer;
- draw->user.feedback_buffer_size[index] = size; /* in bytes */
-}
-
-
diff --git a/src/mesa/pipe/draw/draw_context.h b/src/mesa/pipe/draw/draw_context.h
index 8e2232244c..6dc6e4ce82 100644
--- a/src/mesa/pipe/draw/draw_context.h
+++ b/src/mesa/pipe/draw/draw_context.h
@@ -82,9 +82,6 @@ void draw_set_viewport_state( struct draw_context *draw,
void draw_set_clip_state( struct draw_context *pipe,
const struct pipe_clip_state *clip );
-void draw_set_feedback_state( struct draw_context *draw,
- const struct pipe_feedback_state * );
-
void draw_set_rasterizer_state( struct draw_context *draw,
const struct pipe_rasterizer_state *raster );
@@ -120,9 +117,6 @@ void draw_set_mapped_vertex_buffer(struct draw_context *draw,
void draw_set_mapped_constant_buffer(struct draw_context *draw,
const void *buffer);
-void
-draw_set_mapped_feedback_buffer(struct draw_context *draw, uint index,
- void *buffer, uint size);
/***********************************************************************
diff --git a/src/mesa/pipe/draw/draw_feedback.c b/src/mesa/pipe/draw/draw_feedback.c
deleted file mode 100644
index aea6a8184c..0000000000
--- a/src/mesa/pipe/draw/draw_feedback.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-/**
- * Primitive/vertex feedback (and/or discard) stage.
- * Used to implement transformation feedback/streaming and other things
- * which require a post-transformed vertex position (such as rasterpos,
- * selection and feedback modes).
- *
- * Authors:
- * Brian Paul
- */
-
-
-#include "pipe/p_util.h"
-#include "draw_private.h"
-
-
-struct feedback_stage {
- struct draw_stage stage; /**< base class */
- uint num_prim_generated; /**< number of primitives received */
- uint num_prim_emitted; /**< number of primitives fed back */
- uint num_vert_emitted; /**< number of vertices fed back */
- uint max_vert_emit; /**< max number of verts we can emit */
- float *dest[PIPE_MAX_FEEDBACK_ATTRIBS]; /**< dests for vertex attribs */
-};
-
-
-
-/**
- * Check if there's space to store 'numVerts' in the feedback buffer(s).
- */
-static boolean
-check_space(const struct draw_stage *stage, uint numVerts)
-{
- const struct feedback_stage *fs = (struct feedback_stage *) stage;
- return fs->num_vert_emitted + numVerts <= fs->max_vert_emit;
-}
-
-
-/**
- * Record the given vertex's attributes into the feedback buffer(s).
- */
-static void
-feedback_vertex(struct draw_stage *stage, const struct vertex_header *vertex)
-{
- struct feedback_stage *fs = (struct feedback_stage *) stage;
- const struct pipe_feedback_state *feedback = &stage->draw->feedback;
- const uint select = feedback->interleaved ? 0 : 1;
- uint i;
-
- /*
- * Note: 'select' is either 0 or 1. By multiplying 'i' by 'select'
- * we can either address output buffer 0 (for interleaving) or
- * output buffer i (for non-interleaved).
- */
- for (i = 0; i < feedback->num_attribs; i++) {
- const uint slot = feedback->attrib[i];
- const float *src = slot ? vertex->data[slot] : vertex->clip;
- const uint size = feedback->size[i];
- float *dest = fs->dest[i * select];
-
- switch (size) {
- case 4:
- dest[3] = src[3];
- /* fall-through */
- case 3:
- dest[2] = src[2];
- /* fall-through */
- case 2:
- dest[1] = src[1];
- /* fall-through */
- case 1:
- dest[0] = src[0];
- /* fall-through */
- default:
- ;
- }
- fs->dest[i * select] += size;
- }
-
- fs->num_vert_emitted++;
-}
-
-
-static void feedback_begin( struct draw_stage *stage )
-{
- struct feedback_stage *fs = (struct feedback_stage *) stage;
- const struct pipe_feedback_state *feedback = &stage->draw->feedback;
-
- fs->num_prim_generated = 0;
- fs->num_prim_emitted = 0;
- fs->num_vert_emitted = 0;
-
- assert(feedback->enabled);
-
- /* Compute max_vert_emit, the max number of vertices we can emit.
- * And, setup dest[] pointers.
- */
- if (stage->draw->feedback.interleaved) {
- uint i, vertex_size = 0;
- /* compute size of each interleaved vertex, in floats */
- for (i = 0; i < feedback->num_attribs; i++) {
- vertex_size += feedback->size[i];
- }
- /* compute max number of vertices we can feedback */
- fs->max_vert_emit = stage->draw->user.feedback_buffer_size[0]
- / sizeof(float) / vertex_size;
-
- fs->dest[0] = (float *) stage->draw->user.feedback_buffer[0];
- }
- else {
- uint i;
- uint max = ~0;
- for (i = 0; i < feedback->num_attribs; i++) {
- uint n = stage->draw->user.feedback_buffer_size[i]
- / sizeof(float) / feedback->size[i];
- if (n < max)
- max = n;
- fs->dest[i] = (float *) stage->draw->user.feedback_buffer[i];
- }
- fs->max_vert_emit = max;
- }
-
- if (!feedback->discard)
- stage->next->begin( stage->next );
-}
-
-
-static void feedback_tri( struct draw_stage *stage,
- struct prim_header *header )
-{
- struct feedback_stage *fs = (struct feedback_stage *) stage;
-
- fs->num_prim_generated++;
-
- if (stage->draw->feedback.enabled && check_space(stage, 3)) {
- feedback_vertex(stage, header->v[0]);
- feedback_vertex(stage, header->v[1]);
- feedback_vertex(stage, header->v[2]);
- fs->num_prim_emitted++;
- }
-
- if (!stage->draw->feedback.discard)
- stage->next->tri( stage->next, header );
-}
-
-
-static void feedback_line( struct draw_stage *stage,
- struct prim_header *header )
-{
- struct feedback_stage *fs = (struct feedback_stage *) stage;
-
- fs->num_prim_generated++;
-
- if (stage->draw->feedback.enabled && check_space(stage, 2)) {
- feedback_vertex(stage, header->v[0]);
- feedback_vertex(stage, header->v[1]);
- fs->num_prim_emitted++;
- }
-
- if (!stage->draw->feedback.discard)
- stage->next->line( stage->next, header );
-}
-
-
-static void feedback_point( struct draw_stage *stage,
- struct prim_header *header )
-{
- struct feedback_stage *fs = (struct feedback_stage *) stage;
-
- fs->num_prim_generated++;
-
- if (stage->draw->feedback.enabled && check_space(stage, 1)) {
- feedback_vertex(stage, header->v[0]);
- fs->num_prim_emitted++;
- }
-
- if (!stage->draw->feedback.discard)
- stage->next->point( stage->next, header );
-}
-
-
-static void feedback_end( struct draw_stage *stage )
-{
-
- /* XXX Unmap the vertex feedback buffers so we can write to them */
-
-
- if (!stage->draw->feedback.discard)
- stage->next->end( stage->next );
-}
-
-
-
-static void feedback_reset_stipple_counter( struct draw_stage *stage )
-{
- if (!stage->draw->feedback.discard)
- stage->next->reset_stipple_counter( stage->next );
-}
-
-
-static void feedback_destroy( struct draw_stage *stage )
-{
- FREE( stage );
-}
-
-
-/**
- * Create feedback drawing stage.
- */
-struct draw_stage *draw_feedback_stage( struct draw_context *draw )
-{
- struct feedback_stage *feedback = CALLOC_STRUCT(feedback_stage);
-
- feedback->stage.draw = draw;
- feedback->stage.next = NULL;
- feedback->stage.begin = feedback_begin;
- feedback->stage.point = feedback_point;
- feedback->stage.line = feedback_line;
- feedback->stage.tri = feedback_tri;
- feedback->stage.end = feedback_end;
- feedback->stage.reset_stipple_counter = feedback_reset_stipple_counter;
- feedback->stage.destroy = feedback_destroy;
-
- return &feedback->stage;
-}
-
-
diff --git a/src/mesa/pipe/draw/draw_private.h b/src/mesa/pipe/draw/draw_private.h
index ca5ca7b3c9..5f89ac121e 100644
--- a/src/mesa/pipe/draw/draw_private.h
+++ b/src/mesa/pipe/draw/draw_private.h
@@ -159,7 +159,6 @@ struct draw_context
struct draw_stage *validate;
/* stages (in logical order) */
- struct draw_stage *feedback;
struct draw_stage *flatshade;
struct draw_stage *clip;
struct draw_stage *cull;
@@ -172,13 +171,10 @@ struct draw_context
/* pipe state that we need: */
const struct pipe_rasterizer_state *rasterizer;
- struct pipe_feedback_state feedback;
struct pipe_viewport_state viewport;
struct pipe_vertex_buffer vertex_buffer[PIPE_ATTRIB_MAX];
struct pipe_vertex_element vertex_element[PIPE_ATTRIB_MAX];
const struct draw_vertex_shader *vertex_shader;
- struct pipe_vertex_buffer feedback_buffer[PIPE_ATTRIB_MAX];
- struct pipe_vertex_element feedback_element[PIPE_ATTRIB_MAX];
/* user-space vertex data, buffers */
struct {
@@ -192,10 +188,6 @@ struct draw_context
/** constant buffer (for vertex shader) */
const void *constants;
-
- /** The vertex feedback buffer */
- void *feedback_buffer[PIPE_MAX_FEEDBACK_ATTRIBS];
- uint feedback_buffer_size[PIPE_MAX_FEEDBACK_ATTRIBS]; /* in bytes */
} user;
/* Clip derived state:
@@ -257,7 +249,6 @@ struct draw_context
-extern struct draw_stage *draw_feedback_stage( struct draw_context *context );
extern struct draw_stage *draw_unfilled_stage( struct draw_context *context );
extern struct draw_stage *draw_twoside_stage( struct draw_context *context );
extern struct draw_stage *draw_offset_stage( struct draw_context *context );
diff --git a/src/mesa/pipe/draw/draw_validate.c b/src/mesa/pipe/draw/draw_validate.c
index 8ce4a926e2..58cf340281 100644
--- a/src/mesa/pipe/draw/draw_validate.c
+++ b/src/mesa/pipe/draw/draw_validate.c
@@ -100,11 +100,6 @@ static void validate_begin( struct draw_stage *stage )
next = draw->pipeline.flatshade;
}
- if (draw->feedback.enabled || draw->feedback.discard) {
- draw->pipeline.feedback->next = next;
- next = draw->pipeline.feedback;
- }
-
draw->pipeline.first = next;
draw->pipeline.first->begin( draw->pipeline.first );
}