summaryrefslogtreecommitdiffstats
path: root/src/mesa/pipe
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2007-09-28 12:28:16 -0400
committerZack Rusin <[email protected]>2007-09-28 12:28:16 -0400
commit901577e07fcab0cf90a272fee900cb0831ae84c3 (patch)
tree9e8674230a3e584c674d0683de5d40321bd51fc1 /src/mesa/pipe
parentf2a33a63f1f41681375baa2a9ad261cb60db2a85 (diff)
Revert "Redoing the way we handle vertex shaders for the draw module."
This reverts commit 6dcfddb8e2ec2bfb6187b912807fa65f28da2c5e.
Diffstat (limited to 'src/mesa/pipe')
-rw-r--r--src/mesa/pipe/draw/draw_context.c8
-rw-r--r--src/mesa/pipe/draw/draw_context.h9
-rw-r--r--src/mesa/pipe/draw/draw_private.h14
-rw-r--r--src/mesa/pipe/draw/draw_vertex_fetch.c2
-rw-r--r--src/mesa/pipe/draw/draw_vertex_shader.c50
-rw-r--r--src/mesa/pipe/i915simple/i915_state.c44
-rw-r--r--src/mesa/pipe/softpipe/sp_context.c8
-rw-r--r--src/mesa/pipe/softpipe/sp_context.h8
-rw-r--r--src/mesa/pipe/softpipe/sp_state.h14
-rw-r--r--src/mesa/pipe/softpipe/sp_state_derived.c2
-rw-r--r--src/mesa/pipe/softpipe/sp_state_fs.c49
11 files changed, 57 insertions, 151 deletions
diff --git a/src/mesa/pipe/draw/draw_context.c b/src/mesa/pipe/draw/draw_context.c
index 5efb173228f..66c66ff698e 100644
--- a/src/mesa/pipe/draw/draw_context.c
+++ b/src/mesa/pipe/draw/draw_context.c
@@ -155,6 +155,14 @@ void draw_set_viewport_state( struct draw_context *draw,
}
+void
+draw_set_vertex_shader(struct draw_context *draw,
+ const struct pipe_shader_state *shader)
+{
+ draw_flush( draw );
+ draw->vertex_shader = *shader;
+}
+
void
draw_set_vertex_buffer(struct draw_context *draw,
diff --git a/src/mesa/pipe/draw/draw_context.h b/src/mesa/pipe/draw/draw_context.h
index 398e96d94d2..0ccf5f60466 100644
--- a/src/mesa/pipe/draw/draw_context.h
+++ b/src/mesa/pipe/draw/draw_context.h
@@ -92,12 +92,9 @@ void draw_set_rasterize_stage( struct draw_context *draw,
struct draw_stage *stage );
-void * draw_create_vertex_shader(struct draw_context *draw,
- const struct pipe_shader_state *shader);
-void draw_bind_vertex_shader(struct draw_context *draw,
- void *vcso);
-void draw_delete_vertex_shader(struct draw_context *draw,
- void *vcso);
+void
+draw_set_vertex_shader(struct draw_context *draw,
+ const struct pipe_shader_state *shader);
void
diff --git a/src/mesa/pipe/draw/draw_private.h b/src/mesa/pipe/draw/draw_private.h
index 2f52299f74a..ebef5347ab9 100644
--- a/src/mesa/pipe/draw/draw_private.h
+++ b/src/mesa/pipe/draw/draw_private.h
@@ -46,7 +46,6 @@
#include "draw_vertex.h"
-#include "x86/rtasm/x86sse.h"
/**
* Basic vertex info.
@@ -105,7 +104,7 @@ struct draw_stage
void (*tri)( struct draw_stage *,
struct prim_header * );
-
+
void (*end)( struct draw_stage * );
void (*reset_stipple_counter)( struct draw_stage * );
@@ -117,15 +116,6 @@ struct draw_stage
#define VCACHE_OVERFLOW 4
#define VS_QUEUE_LENGTH (VCACHE_SIZE + VCACHE_OVERFLOW + 1) /* can never fill up */
-/**
- * Private version of the compiled vertex_shader
- */
-struct draw_vertex_shader {
- const struct pipe_shader_state *state;
-#if defined(__i386__) || defined(__386__)
- struct x86_function sse2_program;
-#endif
-};
/**
* Private context for the drawing module.
@@ -155,7 +145,7 @@ struct draw_context
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_shader_state vertex_shader;
struct pipe_vertex_buffer feedback_buffer[PIPE_ATTRIB_MAX];
struct pipe_vertex_element feedback_element[PIPE_ATTRIB_MAX];
diff --git a/src/mesa/pipe/draw/draw_vertex_fetch.c b/src/mesa/pipe/draw/draw_vertex_fetch.c
index bc37e18c341..2b839d641eb 100644
--- a/src/mesa/pipe/draw/draw_vertex_fetch.c
+++ b/src/mesa/pipe/draw/draw_vertex_fetch.c
@@ -85,7 +85,7 @@ void draw_vertex_fetch( struct draw_context *draw,
/*printf("fetch vertex %u: \n", j);*/
/* loop over vertex attributes (vertex shader inputs) */
- for (attr = 0; attr < draw->vertex_shader->state->num_inputs; attr++) {
+ for (attr = 0; attr < draw->vertex_shader.num_inputs; attr++) {
unsigned buf = draw->vertex_element[attr].vertex_buffer_index;
const void *src
diff --git a/src/mesa/pipe/draw/draw_vertex_shader.c b/src/mesa/pipe/draw/draw_vertex_shader.c
index f7ddbd19093..a2e1cdc472d 100644
--- a/src/mesa/pipe/draw/draw_vertex_shader.c
+++ b/src/mesa/pipe/draw/draw_vertex_shader.c
@@ -36,8 +36,6 @@
#include "draw_context.h"
#include "draw_vertex.h"
-#include "x86/rtasm/x86sse.h"
-
#include "pipe/tgsi/exec/tgsi_core.h"
static INLINE unsigned
@@ -72,7 +70,6 @@ typedef void (XSTDCALL *codegen_function) (
float (*constant)[4],
struct tgsi_exec_vector *temporary );
-
/**
* Transform vertices with the current vertex program/shader
* Up to four vertices can be shaded at a time.
@@ -95,7 +92,7 @@ run_vertex_program(struct draw_context *draw,
const float *trans = draw->viewport.translate;
assert(count <= 4);
- assert(draw->vertex_shader->state->output_semantic_name[0]
+ assert(draw->vertex_shader.output_semantic_name[0]
== TGSI_SEMANTIC_POSITION);
#ifdef DEBUG
@@ -104,7 +101,7 @@ run_vertex_program(struct draw_context *draw,
/* init machine state */
tgsi_exec_machine_init(&machine,
- draw->vertex_shader->state->tokens,
+ draw->vertex_shader.tokens,
PIPE_MAX_SAMPLERS,
NULL /*samplers*/ );
@@ -117,8 +114,8 @@ run_vertex_program(struct draw_context *draw,
draw_vertex_fetch( draw, &machine, elts, count );
/* run shader */
- if( draw->vertex_shader->state->executable != NULL ) {
- codegen_function func = (codegen_function) draw->vertex_shader->state->executable;
+ if( draw->vertex_shader.executable != NULL ) {
+ codegen_function func = (codegen_function) draw->vertex_shader.executable;
func(
machine.Inputs,
machine.Outputs,
@@ -209,42 +206,3 @@ void draw_vertex_shader_queue_flush( struct draw_context *draw )
draw->vs.queue_nr = 0;
}
-
-void *
-draw_create_vertex_shader(struct draw_context *draw,
- const struct pipe_shader_state *shader)
-{
- struct draw_vertex_shader *vs = calloc(1, sizeof(struct draw_vertex_shader));
-
- vs->state = shader;
-#if defined(__i386__) || defined(__386__)
- x86_init_func(&vs->sse2_program);
-
- tgsi_emit_sse2(shader->tokens, &vs->sse2_program);
-
- ((struct pipe_shader_state*)(vs->state))->executable =
- x86_get_func(&vs->sse2_program);
-#endif
-
- return vs;
-}
-
-void draw_bind_vertex_shader(struct draw_context *draw,
- void *vcso)
-{
- draw_flush(draw);
- draw->vertex_shader = (struct draw_vertex_shader*)(vcso);
-}
-
-void draw_delete_vertex_shader(struct draw_context *draw,
- void *vcso)
-{
- struct draw_vertex_shader *vs = (struct draw_vertex_shader*)(vcso);
-#if defined(__i386__) || defined(__386__)
- x86_release_func(&vs->sse2_program);
-#endif
- free(vcso);
-}
-
-
-
diff --git a/src/mesa/pipe/i915simple/i915_state.c b/src/mesa/pipe/i915simple/i915_state.c
index 19ca5e575fb..5c6d37a4661 100644
--- a/src/mesa/pipe/i915simple/i915_state.c
+++ b/src/mesa/pipe/i915simple/i915_state.c
@@ -443,13 +443,16 @@ static void i915_set_polygon_stipple( struct pipe_context *pipe,
{
}
-static void * i915_create_fs_state(struct pipe_context *pipe,
- const struct pipe_shader_state *templ)
+
+static void *
+i915_create_shader_state(struct pipe_context *pipe,
+ const struct pipe_shader_state *templ)
{
return 0;
}
-static void i915_bind_fs_state(struct pipe_context *pipe, void *fs)
+static void i915_bind_fs_state( struct pipe_context *pipe,
+ void *fs )
{
struct i915_context *i915 = i915_context(pipe);
@@ -458,35 +461,20 @@ static void i915_bind_fs_state(struct pipe_context *pipe, void *fs)
i915->dirty |= I915_NEW_FS;
}
-static void i915_delete_fs_state(struct pipe_context *pipe, void *shader)
-{
- /*do nothing*/
-}
-
-static void *
-i915_create_vs_state(struct pipe_context *pipe,
- const struct pipe_shader_state *templ)
-{
- struct i915_context *i915 = i915_context(pipe);
-
- /* just pass-through to draw module */
- return draw_create_vertex_shader(i915->draw, templ);
-}
-static void i915_bind_vs_state(struct pipe_context *pipe, void *vs)
+static void i915_bind_vs_state(struct pipe_context *pipe,
+ void *vs)
{
struct i915_context *i915 = i915_context(pipe);
/* just pass-through to draw module */
- draw_bind_vertex_shader(i915->draw, vs);
+ draw_set_vertex_shader(i915->draw, (const struct pipe_shader_state *)vs);
}
-static void i915_delete_vs_state(struct pipe_context *pipe, void *shader)
+static void i915_delete_shader_state(struct pipe_context *pipe,
+ void *shader)
{
- struct i915_context *i915 = i915_context(pipe);
-
- /* just pass-through to draw module */
- draw_delete_vertex_shader(i915->draw, shader);
+ /*do nothing*/
}
static void i915_set_constant_buffer(struct pipe_context *pipe,
@@ -719,12 +707,12 @@ i915_init_state_functions( struct i915_context *i915 )
i915->pipe.create_rasterizer_state = i915_create_rasterizer_state;
i915->pipe.bind_rasterizer_state = i915_bind_rasterizer_state;
i915->pipe.delete_rasterizer_state = i915_delete_rasterizer_state;
- i915->pipe.create_fs_state = i915_create_fs_state;
+ i915->pipe.create_fs_state = i915_create_shader_state;
i915->pipe.bind_fs_state = i915_bind_fs_state;
- i915->pipe.delete_fs_state = i915_delete_fs_state;
- i915->pipe.create_vs_state = i915_create_vs_state;
+ i915->pipe.delete_fs_state = i915_delete_shader_state;
+ i915->pipe.create_vs_state = i915_create_shader_state;
i915->pipe.bind_vs_state = i915_bind_vs_state;
- i915->pipe.delete_vs_state = i915_delete_vs_state;
+ i915->pipe.delete_vs_state = i915_delete_shader_state;
i915->pipe.set_blend_color = i915_set_blend_color;
i915->pipe.set_clip_state = i915_set_clip_state;
diff --git a/src/mesa/pipe/softpipe/sp_context.c b/src/mesa/pipe/softpipe/sp_context.c
index 695bf1a9e02..e415966dae1 100644
--- a/src/mesa/pipe/softpipe/sp_context.c
+++ b/src/mesa/pipe/softpipe/sp_context.c
@@ -275,12 +275,12 @@ struct pipe_context *softpipe_create( struct pipe_winsys *pipe_winsys,
softpipe->pipe.create_rasterizer_state = softpipe_create_rasterizer_state;
softpipe->pipe.bind_rasterizer_state = softpipe_bind_rasterizer_state;
softpipe->pipe.delete_rasterizer_state = softpipe_delete_rasterizer_state;
- softpipe->pipe.create_fs_state = softpipe_create_fs_state;
+ softpipe->pipe.create_fs_state = softpipe_create_shader_state;
softpipe->pipe.bind_fs_state = softpipe_bind_fs_state;
- softpipe->pipe.delete_fs_state = softpipe_delete_fs_state;
- softpipe->pipe.create_vs_state = softpipe_create_vs_state;
+ softpipe->pipe.delete_fs_state = softpipe_delete_shader_state;
+ softpipe->pipe.create_vs_state = softpipe_create_shader_state;
softpipe->pipe.bind_vs_state = softpipe_bind_vs_state;
- softpipe->pipe.delete_vs_state = softpipe_delete_vs_state;
+ softpipe->pipe.delete_vs_state = softpipe_delete_shader_state;
softpipe->pipe.set_blend_color = softpipe_set_blend_color;
softpipe->pipe.set_clip_state = softpipe_set_clip_state;
diff --git a/src/mesa/pipe/softpipe/sp_context.h b/src/mesa/pipe/softpipe/sp_context.h
index ccf29b5683d..c0a681f3d6b 100644
--- a/src/mesa/pipe/softpipe/sp_context.h
+++ b/src/mesa/pipe/softpipe/sp_context.h
@@ -62,12 +62,8 @@ struct draw_stage;
#define SP_NEW_VS 0x2000
#define SP_NEW_CONSTANTS 0x4000
-struct sp_vertex_shader_state {
- const struct pipe_shader_state *state;
- void *draw_data;
-};
-struct softpipe_context {
+struct softpipe_context {
struct pipe_context pipe; /**< base class */
struct softpipe_winsys *winsys; /**< window system interface */
@@ -80,7 +76,7 @@ struct softpipe_context {
const struct pipe_depth_stencil_state *depth_stencil;
const struct pipe_rasterizer_state *rasterizer;
const struct pipe_shader_state *fs;
- const struct sp_vertex_shader_state *vs;
+ const struct pipe_shader_state *vs;
struct pipe_blend_color blend_color;
struct pipe_clear_color_state clear_color;
diff --git a/src/mesa/pipe/softpipe/sp_state.h b/src/mesa/pipe/softpipe/sp_state.h
index f9061e86e53..f0e1461d258 100644
--- a/src/mesa/pipe/softpipe/sp_state.h
+++ b/src/mesa/pipe/softpipe/sp_state.h
@@ -87,14 +87,12 @@ void softpipe_set_constant_buffer(struct pipe_context *,
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 *);
-void softpipe_delete_fs_state(struct pipe_context *, void *);
-void *softpipe_create_vs_state(struct pipe_context *,
- const struct pipe_shader_state *);
-void softpipe_bind_vs_state(struct pipe_context *, void *);
-void softpipe_delete_vs_state(struct pipe_context *, void *);
+void *
+softpipe_create_shader_state( struct pipe_context *,
+ const struct pipe_shader_state * );
+void softpipe_bind_fs_state( struct pipe_context *, void * );
+void softpipe_bind_vs_state( struct pipe_context *, void * );
+void softpipe_delete_shader_state( struct pipe_context *, void * );
void softpipe_set_polygon_stipple( struct pipe_context *,
const struct pipe_poly_stipple * );
diff --git a/src/mesa/pipe/softpipe/sp_state_derived.c b/src/mesa/pipe/softpipe/sp_state_derived.c
index b6145df8e25..6c6e7980698 100644
--- a/src/mesa/pipe/softpipe/sp_state_derived.c
+++ b/src/mesa/pipe/softpipe/sp_state_derived.c
@@ -43,7 +43,7 @@
*/
static void calculate_vertex_layout( struct softpipe_context *softpipe )
{
- const struct pipe_shader_state *vs = softpipe->vs->state;
+ const struct pipe_shader_state *vs = softpipe->vs;
const struct pipe_shader_state *fs = softpipe->fs;
const interp_mode colorInterp
= softpipe->rasterizer->flatshade ? INTERP_CONSTANT : INTERP_LINEAR;
diff --git a/src/mesa/pipe/softpipe/sp_state_fs.c b/src/mesa/pipe/softpipe/sp_state_fs.c
index f1bec2c73ac..8306a95f449 100644
--- a/src/mesa/pipe/softpipe/sp_state_fs.c
+++ b/src/mesa/pipe/softpipe/sp_state_fs.c
@@ -33,13 +33,10 @@
#include "pipe/draw/draw_context.h"
-void * softpipe_create_fs_state(struct pipe_context *pipe,
- const struct pipe_shader_state *templ)
+void * softpipe_create_shader_state(struct pipe_context *pipe,
+ const struct pipe_shader_state *templ)
{
- /* Decide whether we'll be codegenerating this shader and if so do
- * that now.
- */
-
+ /* we just want the pipe_shader_state template in the bind calls */
return 0;
}
@@ -52,50 +49,24 @@ void softpipe_bind_fs_state(struct pipe_context *pipe, void *fs)
softpipe->dirty |= SP_NEW_FS;
}
-void softpipe_delete_fs_state(struct pipe_context *pipe,
- void *shader)
-{
-}
-
-
-void * softpipe_create_vs_state(struct pipe_context *pipe,
- const struct pipe_shader_state *templ)
-{
- struct softpipe_context *softpipe = softpipe_context(pipe);
- struct sp_vertex_shader_state *state =
- malloc(sizeof(struct sp_vertex_shader_state));
-
- state->state = templ;
- state->draw_data = draw_create_vertex_shader(softpipe->draw,
- state->state);
-
- return state;
-}
void softpipe_bind_vs_state(struct pipe_context *pipe, void *vs)
{
struct softpipe_context *softpipe = softpipe_context(pipe);
- softpipe->vs = (const struct sp_vertex_shader_state *)vs;
-
- draw_bind_vertex_shader(softpipe->draw, softpipe->vs->draw_data);
+ softpipe->vs = (struct pipe_shader_state *)vs;
softpipe->dirty |= SP_NEW_VS;
-}
-void softpipe_delete_vs_state(struct pipe_context *pipe,
- void *vs)
-{
- struct softpipe_context *softpipe = softpipe_context(pipe);
-
- struct sp_vertex_shader_state *state =
- (struct sp_vertex_shader_state *)vs;
-
- draw_delete_vertex_shader(softpipe->draw, state->draw_data);
- free(state);
+ draw_set_vertex_shader(softpipe->draw, (struct pipe_shader_state *)vs);
}
+void softpipe_delete_shader_state( struct pipe_context *pipe,
+ void *shader )
+{
+ /* do nothing */
+}
void softpipe_set_constant_buffer(struct pipe_context *pipe,
uint shader, uint index,