summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/softpipe
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2010-05-28 13:14:07 -0400
committerZack Rusin <[email protected]>2010-06-08 06:28:10 -0400
commita45b7f47ee0e38b288cc8fc4f6a1c013e8c227bc (patch)
tree39d93f4236a0068db6f515b2f0681c6da4dc016d /src/gallium/drivers/softpipe
parenta2817f6ae566b672f195cff22e14e2058d3617ea (diff)
gallium: basic and initial implementation of the stream output interface
aka transform feedback
Diffstat (limited to 'src/gallium/drivers/softpipe')
-rw-r--r--src/gallium/drivers/softpipe/SConscript1
-rw-r--r--src/gallium/drivers/softpipe/sp_context.c6
-rw-r--r--src/gallium/drivers/softpipe/sp_context.h2
-rw-r--r--src/gallium/drivers/softpipe/sp_state.h21
4 files changed, 29 insertions, 1 deletions
diff --git a/src/gallium/drivers/softpipe/SConscript b/src/gallium/drivers/softpipe/SConscript
index b80c6dea93a..be5917a6886 100644
--- a/src/gallium/drivers/softpipe/SConscript
+++ b/src/gallium/drivers/softpipe/SConscript
@@ -27,6 +27,7 @@ softpipe = env.ConvenienceLibrary(
'sp_state_fs.c',
'sp_state_rasterizer.c',
'sp_state_sampler.c',
+ 'sp_state_so.c',
'sp_state_surface.c',
'sp_state_vertex.c',
'sp_surface.c',
diff --git a/src/gallium/drivers/softpipe/sp_context.c b/src/gallium/drivers/softpipe/sp_context.c
index 2f10b46e989..b1970140d50 100644
--- a/src/gallium/drivers/softpipe/sp_context.c
+++ b/src/gallium/drivers/softpipe/sp_context.c
@@ -251,6 +251,10 @@ softpipe_create_context( struct pipe_screen *screen,
softpipe->pipe.bind_vertex_elements_state = softpipe_bind_vertex_elements_state;
softpipe->pipe.delete_vertex_elements_state = softpipe_delete_vertex_elements_state;
+ softpipe->pipe.create_stream_output_state = softpipe_create_stream_output_state;
+ softpipe->pipe.bind_stream_output_state = softpipe_bind_stream_output_state;
+ softpipe->pipe.delete_stream_output_state = softpipe_delete_stream_output_state;
+
softpipe->pipe.set_blend_color = softpipe_set_blend_color;
softpipe->pipe.set_stencil_ref = softpipe_set_stencil_ref;
softpipe->pipe.set_clip_state = softpipe_set_clip_state;
@@ -264,7 +268,7 @@ softpipe_create_context( struct pipe_screen *screen,
softpipe->pipe.create_sampler_view = softpipe_create_sampler_view;
softpipe->pipe.sampler_view_destroy = softpipe_sampler_view_destroy;
softpipe->pipe.set_viewport_state = softpipe_set_viewport_state;
-
+ softpipe->pipe.set_stream_output_buffers = softpipe_set_stream_output_buffers;
softpipe->pipe.set_vertex_buffers = softpipe_set_vertex_buffers;
softpipe->pipe.draw_arrays = softpipe_draw_arrays;
diff --git a/src/gallium/drivers/softpipe/sp_context.h b/src/gallium/drivers/softpipe/sp_context.h
index b3d3fe620fd..f8ffc5787d3 100644
--- a/src/gallium/drivers/softpipe/sp_context.h
+++ b/src/gallium/drivers/softpipe/sp_context.h
@@ -50,6 +50,7 @@ struct softpipe_tex_tile_cache;
struct sp_fragment_shader;
struct sp_vertex_shader;
struct sp_velems_state;
+struct sp_so_state;
struct softpipe_context {
@@ -65,6 +66,7 @@ struct softpipe_context {
struct sp_vertex_shader *vs;
struct sp_geometry_shader *gs;
struct sp_velems_state *velems;
+ struct sp_so_state *so;
/** Other rendering state */
struct pipe_blend_color blend_color;
diff --git a/src/gallium/drivers/softpipe/sp_state.h b/src/gallium/drivers/softpipe/sp_state.h
index 5b0faabeaef..dd958ebb53e 100644
--- a/src/gallium/drivers/softpipe/sp_state.h
+++ b/src/gallium/drivers/softpipe/sp_state.h
@@ -51,6 +51,8 @@
#define SP_NEW_VS 0x2000
#define SP_NEW_QUERY 0x4000
#define SP_NEW_GS 0x8000
+#define SP_NEW_SO 0x10000
+#define SP_NEW_SO_BUFFERS 0x20000
struct tgsi_sampler;
@@ -105,6 +107,10 @@ struct sp_velems_state {
struct pipe_vertex_element velem[PIPE_MAX_ATTRIBS];
};
+struct sp_so_state {
+ struct pipe_stream_output_state base;
+};
+
void *
softpipe_create_blend_state(struct pipe_context *,
@@ -263,5 +269,20 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe);
struct vertex_info *
softpipe_get_vbuf_vertex_info(struct softpipe_context *softpipe);
+void *
+softpipe_create_stream_output_state(
+ struct pipe_context *pipe,
+ const struct pipe_stream_output_state *templ);
+void
+softpipe_bind_stream_output_state(struct pipe_context *pipe,
+ void *so);
+void
+softpipe_delete_stream_output_state(struct pipe_context *pipe, void *so);
+
+void
+softpipe_set_stream_output_buffers(struct pipe_context *pipe,
+ struct pipe_resource **buffers,
+ int *offsets,
+ int num_buffers);
#endif