diff options
-rw-r--r-- | src/mesa/pipe/draw/draw_context.c | 21 | ||||
-rw-r--r-- | src/mesa/pipe/draw/draw_context.h | 6 | ||||
-rw-r--r-- | src/mesa/pipe/draw/draw_feedback.c | 253 | ||||
-rw-r--r-- | src/mesa/pipe/draw/draw_private.h | 9 | ||||
-rw-r--r-- | src/mesa/pipe/draw/draw_validate.c | 5 | ||||
-rw-r--r-- | src/mesa/pipe/i915simple/i915_context.c | 22 | ||||
-rw-r--r-- | src/mesa/pipe/i915simple/i915_context.h | 4 | ||||
-rw-r--r-- | src/mesa/pipe/i915simple/i915_state.c | 30 | ||||
-rw-r--r-- | src/mesa/pipe/p_context.h | 9 | ||||
-rw-r--r-- | src/mesa/pipe/p_state.h | 22 | ||||
-rw-r--r-- | src/mesa/pipe/softpipe/Makefile | 1 | ||||
-rw-r--r-- | src/mesa/pipe/softpipe/sp_context.c | 2 | ||||
-rw-r--r-- | src/mesa/pipe/softpipe/sp_context.h | 4 | ||||
-rw-r--r-- | src/mesa/pipe/softpipe/sp_draw_arrays.c | 22 | ||||
-rw-r--r-- | src/mesa/pipe/softpipe/sp_state.h | 8 | ||||
-rw-r--r-- | src/mesa/pipe/softpipe/sp_state_feedback.c | 72 | ||||
-rw-r--r-- | src/mesa/sources | 1 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_rasterpos.c | 44 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_context.h | 1 |
19 files changed, 21 insertions, 515 deletions
diff --git a/src/mesa/pipe/draw/draw_context.c b/src/mesa/pipe/draw/draw_context.c index 33727e6547c..179f7ed0d67 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 8e2232244cc..6dc6e4ce82a 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 aea6a8184c0..00000000000 --- 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 ca5ca7b3c90..5f89ac121eb 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 8ce4a926e22..58cf340281e 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 ); } diff --git a/src/mesa/pipe/i915simple/i915_context.c b/src/mesa/pipe/i915simple/i915_context.c index f505ff6ae65..d2bbeea16ab 100644 --- a/src/mesa/pipe/i915simple/i915_context.c +++ b/src/mesa/pipe/i915simple/i915_context.c @@ -223,18 +223,6 @@ i915_draw_elements( struct pipe_context *pipe, draw_set_mapped_element_buffer(draw, 0, NULL); } - /* Map feedback buffers if enabled */ - if (i915->feedback.enabled) { - const uint n = i915->feedback.interleaved ? 1 : i915->feedback.num_attribs; - for (i = 0; i < n; i++) { - void *ptr = pipe->winsys->buffer_map(pipe->winsys, - i915->feedback_buffer[i].buffer, - PIPE_BUFFER_FLAG_WRITE); - draw_set_mapped_feedback_buffer(draw, i, ptr, - i915->feedback_buffer[i].size); - } - } - draw_set_mapped_constant_buffer(draw, i915->current.constants[PIPE_SHADER_VERTEX]); @@ -256,16 +244,6 @@ i915_draw_elements( struct pipe_context *pipe, draw_set_mapped_element_buffer(draw, 0, NULL); } - /* Unmap feedback buffers if enabled */ - if (i915->feedback.enabled) { - const uint n = i915->feedback.interleaved ? 1 : i915->feedback.num_attribs; - for (i = 0; i < n; i++) { - pipe->winsys->buffer_unmap(pipe->winsys, - i915->feedback_buffer[i].buffer); - draw_set_mapped_feedback_buffer(draw, i, NULL, 0); - } - } - return TRUE; } diff --git a/src/mesa/pipe/i915simple/i915_context.h b/src/mesa/pipe/i915simple/i915_context.h index dbf0c885cc8..b9b67c4fcfc 100644 --- a/src/mesa/pipe/i915simple/i915_context.h +++ b/src/mesa/pipe/i915simple/i915_context.h @@ -197,7 +197,6 @@ struct i915_context struct pipe_clear_color_state clear_color; struct pipe_clip_state clip; struct pipe_constant_buffer constants[PIPE_SHADER_TYPES]; - struct pipe_feedback_state feedback; struct pipe_framebuffer_state framebuffer; struct pipe_poly_stipple poly_stipple; struct pipe_scissor_state scissor; @@ -206,9 +205,6 @@ struct i915_context struct pipe_viewport_state viewport; struct pipe_vertex_buffer vertex_buffer[PIPE_ATTRIB_MAX]; - /** Feedback buffers */ - struct pipe_feedback_buffer feedback_buffer[PIPE_MAX_FEEDBACK_ATTRIBS]; - unsigned dirty; unsigned *batch_start; diff --git a/src/mesa/pipe/i915simple/i915_state.c b/src/mesa/pipe/i915simple/i915_state.c index 038fd623ea1..b9f257a0071 100644 --- a/src/mesa/pipe/i915simple/i915_state.c +++ b/src/mesa/pipe/i915simple/i915_state.c @@ -547,34 +547,6 @@ static void i915_set_framebuffer_state(struct pipe_context *pipe, } -static void -i915_set_feedback_state(struct pipe_context *pipe, - const struct pipe_feedback_state *feedback) -{ - struct i915_context *i915 = i915_context(pipe); - i915->feedback = *feedback; - draw_set_feedback_state(i915->draw, feedback); -} - - -static void -i915_set_feedback_buffer(struct pipe_context *pipe, - unsigned index, - const struct pipe_feedback_buffer *feedback) -{ - struct i915_context *i915 = i915_context(pipe); - - assert(index < PIPE_MAX_FEEDBACK_ATTRIBS); - - /* Need to be careful with referencing */ - pipe->winsys->buffer_reference(pipe->winsys, - &i915->feedback_buffer[index].buffer, - feedback->buffer); - i915->feedback_buffer[index].size = feedback->size; - i915->feedback_buffer[index].start_offset = feedback->start_offset; -} - - static void i915_set_clear_color_state(struct pipe_context *pipe, const struct pipe_clear_color_state *clear) @@ -751,8 +723,6 @@ i915_init_state_functions( struct i915_context *i915 ) i915->pipe.set_clear_color_state = i915_set_clear_color_state; i915->pipe.set_constant_buffer = i915_set_constant_buffer; i915->pipe.set_framebuffer_state = i915_set_framebuffer_state; - i915->pipe.set_feedback_state = i915_set_feedback_state; - i915->pipe.set_feedback_buffer = i915_set_feedback_buffer; i915->pipe.set_polygon_stipple = i915_set_polygon_stipple; i915->pipe.set_sampler_units = i915_set_sampler_units; diff --git a/src/mesa/pipe/p_context.h b/src/mesa/pipe/p_context.h index 00379fbacfe..7da4992841f 100644 --- a/src/mesa/pipe/p_context.h +++ b/src/mesa/pipe/p_context.h @@ -139,9 +139,6 @@ struct pipe_context { uint shader, uint index, const struct pipe_constant_buffer *buf ); - void (*set_feedback_state)( struct pipe_context *, - const struct pipe_feedback_state *); - void (*set_framebuffer_state)( struct pipe_context *, const struct pipe_framebuffer_state * ); @@ -172,12 +169,6 @@ struct pipe_context { unsigned index, const struct pipe_vertex_element * ); - /* - * Vertex feedback - */ - void (*set_feedback_buffer)(struct pipe_context *, - unsigned index, - const struct pipe_feedback_buffer *); /** Get a surface which is a "view" into a texture */ struct pipe_surface *(*get_tex_surface)(struct pipe_context *pipe, diff --git a/src/mesa/pipe/p_state.h b/src/mesa/pipe/p_state.h index 6db9bbc9534..50344bea781 100644 --- a/src/mesa/pipe/p_state.h +++ b/src/mesa/pipe/p_state.h @@ -103,19 +103,6 @@ struct pipe_rasterizer_state }; -/** - * Post-transform vertex feeback - */ -struct pipe_feedback_state { - uint enabled:1; /**< enable feedback? */ - uint discard:1; /**< discard primitives? */ - uint interleaved:1; /**< interleaved output? */ - uint num_attribs; - uint attrib[PIPE_MAX_FEEDBACK_ATTRIBS]; - uint size[PIPE_MAX_FEEDBACK_ATTRIBS]; -}; - - struct pipe_poly_stipple { unsigned stipple[32]; }; @@ -336,15 +323,6 @@ struct pipe_vertex_element }; -/** - * Vertex feedback buffer - */ -struct pipe_feedback_buffer { - struct pipe_buffer_handle *buffer; - unsigned size; - unsigned start_offset; -}; - /** * Hardware queries (occlusion, transform feedback, timing, etc) diff --git a/src/mesa/pipe/softpipe/Makefile b/src/mesa/pipe/softpipe/Makefile index 647cc05373b..5e6886a37e1 100644 --- a/src/mesa/pipe/softpipe/Makefile +++ b/src/mesa/pipe/softpipe/Makefile @@ -27,7 +27,6 @@ DRIVER_SOURCES = \ sp_state_blend.c \ sp_state_clip.c \ sp_state_derived.c \ - sp_state_feedback.c \ sp_state_fs.c \ sp_state_sampler.c \ sp_state_rasterizer.c \ diff --git a/src/mesa/pipe/softpipe/sp_context.c b/src/mesa/pipe/softpipe/sp_context.c index 8b8e04c2f9e..2eab3aaabb9 100644 --- a/src/mesa/pipe/softpipe/sp_context.c +++ b/src/mesa/pipe/softpipe/sp_context.c @@ -306,7 +306,6 @@ struct pipe_context *softpipe_create( struct pipe_winsys *pipe_winsys, softpipe->pipe.set_clip_state = softpipe_set_clip_state; softpipe->pipe.set_clear_color_state = softpipe_set_clear_color_state; softpipe->pipe.set_constant_buffer = softpipe_set_constant_buffer; - softpipe->pipe.set_feedback_state = softpipe_set_feedback_state; softpipe->pipe.set_framebuffer_state = softpipe_set_framebuffer_state; softpipe->pipe.set_polygon_stipple = softpipe_set_polygon_stipple; softpipe->pipe.set_sampler_units = softpipe_set_sampler_units; @@ -316,7 +315,6 @@ struct pipe_context *softpipe_create( struct pipe_winsys *pipe_winsys, softpipe->pipe.set_vertex_buffer = softpipe_set_vertex_buffer; softpipe->pipe.set_vertex_element = softpipe_set_vertex_element; - softpipe->pipe.set_feedback_buffer = softpipe_set_feedback_buffer; softpipe->pipe.draw_arrays = softpipe_draw_arrays; softpipe->pipe.draw_elements = softpipe_draw_elements; diff --git a/src/mesa/pipe/softpipe/sp_context.h b/src/mesa/pipe/softpipe/sp_context.h index b97cdc52c61..1c391dcd4d3 100644 --- a/src/mesa/pipe/softpipe/sp_context.h +++ b/src/mesa/pipe/softpipe/sp_context.h @@ -85,7 +85,6 @@ struct softpipe_context { struct pipe_clear_color_state clear_color; struct pipe_clip_state clip; struct pipe_constant_buffer constants[2]; - struct pipe_feedback_state feedback; struct pipe_framebuffer_state framebuffer; struct pipe_poly_stipple poly_stipple; struct pipe_scissor_state scissor; @@ -117,9 +116,6 @@ struct softpipe_context { boolean need_w; /**< produce quad/fragment W values? */ int psize_slot; - /** Feedback buffers */ - struct pipe_feedback_buffer feedback_buffer[PIPE_MAX_FEEDBACK_ATTRIBS]; - #if 0 /* Stipple derived state: */ diff --git a/src/mesa/pipe/softpipe/sp_draw_arrays.c b/src/mesa/pipe/softpipe/sp_draw_arrays.c index 93eb68405db..b7626f8a5f2 100644 --- a/src/mesa/pipe/softpipe/sp_draw_arrays.c +++ b/src/mesa/pipe/softpipe/sp_draw_arrays.c @@ -138,18 +138,6 @@ softpipe_draw_elements(struct pipe_context *pipe, draw_set_mapped_element_buffer(draw, 0, NULL); } - /* Map feedback buffers if enabled */ - if (sp->feedback.enabled) { - const uint n = sp->feedback.interleaved ? 1 : sp->feedback.num_attribs; - for (i = 0; i < n; i++) { - void *ptr = pipe->winsys->buffer_map(pipe->winsys, - sp->feedback_buffer[i].buffer, - PIPE_BUFFER_FLAG_WRITE); - draw_set_mapped_feedback_buffer(draw, i, ptr, - sp->feedback_buffer[i].size); - } - } - /* draw! */ draw_arrays(draw, mode, start, count); @@ -171,16 +159,6 @@ softpipe_draw_elements(struct pipe_context *pipe, draw_set_mapped_element_buffer(draw, 0, NULL); } - /* Unmap feedback buffers if enabled */ - if (sp->feedback.enabled) { - const uint n = sp->feedback.interleaved ? 1 : sp->feedback.num_attribs; - for (i = 0; i < n; i++) { - pipe->winsys->buffer_unmap(pipe->winsys, - sp->feedback_buffer[i].buffer); - draw_set_mapped_feedback_buffer(draw, i, NULL, 0); - } - } - /* Note: leave drawing surfaces mapped */ softpipe_unmap_constant_buffers(sp); diff --git a/src/mesa/pipe/softpipe/sp_state.h b/src/mesa/pipe/softpipe/sp_state.h index ea9d2e62be6..f434567da5d 100644 --- a/src/mesa/pipe/softpipe/sp_state.h +++ b/src/mesa/pipe/softpipe/sp_state.h @@ -102,9 +102,6 @@ void softpipe_set_constant_buffer(struct pipe_context *, uint shader, uint index, const struct pipe_constant_buffer *buf); -void softpipe_set_feedback_state( struct pipe_context *, - const struct pipe_feedback_state * ); - void *softpipe_create_fs_state(struct pipe_context *, const struct pipe_shader_state *); void softpipe_bind_fs_state(struct pipe_context *, void *); @@ -138,11 +135,6 @@ void softpipe_set_vertex_buffer(struct pipe_context *, unsigned index, const struct pipe_vertex_buffer *); -void softpipe_set_feedback_buffer(struct pipe_context *, - uint index, - const struct pipe_feedback_buffer *); - - void softpipe_update_derived( struct softpipe_context *softpipe ); diff --git a/src/mesa/pipe/softpipe/sp_state_feedback.c b/src/mesa/pipe/softpipe/sp_state_feedback.c deleted file mode 100644 index 02aaf34e75d..00000000000 --- a/src/mesa/pipe/softpipe/sp_state_feedback.c +++ /dev/null @@ -1,72 +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. - * - **************************************************************************/ - -/** - * Authors: - * Brian Paul - */ - - -#include "sp_context.h" -#include "sp_state.h" -#include "sp_surface.h" - -#include "pipe/p_winsys.h" -#include "pipe/draw/draw_context.h" - - -void -softpipe_set_feedback_state(struct pipe_context *pipe, - const struct pipe_feedback_state *feedback) -{ - struct softpipe_context *softpipe = softpipe_context(pipe); - - softpipe->feedback = *feedback; /* struct copy */ - /* - softpipe->dirty |= SP_NEW_FEEDBACK; - */ - - draw_set_feedback_state(softpipe->draw, feedback); -} - - -void -softpipe_set_feedback_buffer(struct pipe_context *pipe, - unsigned index, - const struct pipe_feedback_buffer *feedback) -{ - struct softpipe_context *softpipe = softpipe_context(pipe); - - assert(index < PIPE_MAX_FEEDBACK_ATTRIBS); - - /* Need to be careful with referencing */ - pipe->winsys->buffer_reference(pipe->winsys, - &softpipe->feedback_buffer[index].buffer, - feedback->buffer); - softpipe->feedback_buffer[index].size = feedback->size; - softpipe->feedback_buffer[index].start_offset = feedback->start_offset; -} diff --git a/src/mesa/sources b/src/mesa/sources index c34361eaae8..4a5a97b47df 100644 --- a/src/mesa/sources +++ b/src/mesa/sources @@ -162,7 +162,6 @@ DRAW_SOURCES = \ pipe/draw/draw_context.c\ pipe/draw/draw_cull.c \ pipe/draw/draw_debug.c \ - pipe/draw/draw_feedback.c \ pipe/draw/draw_flatshade.c \ pipe/draw/draw_offset.c \ pipe/draw/draw_prim.c \ diff --git a/src/mesa/state_tracker/st_cb_rasterpos.c b/src/mesa/state_tracker/st_cb_rasterpos.c index 5279cb1cd41..852cff64901 100644 --- a/src/mesa/state_tracker/st_cb_rasterpos.c +++ b/src/mesa/state_tracker/st_cb_rasterpos.c @@ -173,6 +173,7 @@ static struct rastpos_stage * new_draw_rastpos_stage(GLcontext *ctx, struct draw_context *draw) { struct rastpos_stage *rs = CALLOC_STRUCT(rastpos_stage); + GLuint i; rs->stage.draw = draw; rs->stage.next = NULL; @@ -184,6 +185,26 @@ new_draw_rastpos_stage(GLcontext *ctx, struct draw_context *draw) rs->stage.reset_stipple_counter = rastpos_reset_stipple_counter; rs->ctx = ctx; + for (i = 0; i < VERT_ATTRIB_MAX; i++) { + rs->array[i].Size = 4; + rs->array[i].Type = GL_FLOAT; + rs->array[i].Stride = 0; + rs->array[i].StrideB = 0; + rs->array[i].Ptr = (GLubyte *) ctx->Current.Attrib[i]; + rs->array[i].Enabled = GL_TRUE; + rs->array[i].Normalized = GL_TRUE; + rs->array[i].BufferObj = NULL; + rs->arrays[i] = &rs->array[i]; + } + + rs->prim.mode = GL_POINTS; + rs->prim.indexed = 0; + rs->prim.begin = 1; + rs->prim.end = 1; + rs->prim.weak = 0; + rs->prim.start = 0; + rs->prim.count = 1; + return rs; } @@ -201,31 +222,8 @@ st_RasterPos(GLcontext *ctx, const GLfloat v[4]) } else { /* create rastpos draw stage */ - GLuint i; - rs = new_draw_rastpos_stage(ctx, draw); st->rastpos_stage = &rs->stage; - - /* one-time init */ - for (i = 0; i < VERT_ATTRIB_MAX; i++) { - rs->array[i].Size = 4; - rs->array[i].Type = GL_FLOAT; - rs->array[i].Stride = 0; - rs->array[i].StrideB = 0; - rs->array[i].Ptr = (GLubyte *) ctx->Current.Attrib[i]; - rs->array[i].Enabled = GL_TRUE; - rs->array[i].Normalized = GL_TRUE; - rs->array[i].BufferObj = NULL; - rs->arrays[i] = &rs->array[i]; - } - - rs->prim.mode = GL_POINTS; - rs->prim.indexed = 0; - rs->prim.begin = 1; - rs->prim.end = 1; - rs->prim.weak = 0; - rs->prim.start = 0; - rs->prim.count = 1; } /* plug our rastpos stage into the draw module */ diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h index c31b76c63f3..33aacdb6d1a 100644 --- a/src/mesa/state_tracker/st_context.h +++ b/src/mesa/state_tracker/st_context.h @@ -106,7 +106,6 @@ struct st_context struct pipe_clear_color_state clear_color; struct pipe_clip_state clip; struct pipe_constant_buffer constants[2]; - struct pipe_feedback_state feedback; struct pipe_framebuffer_state framebuffer; struct pipe_texture *texture[PIPE_MAX_SAMPLERS]; struct pipe_poly_stipple poly_stipple; |