summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorZack Rusin <[email protected]>2007-09-28 04:33:55 -0400
committerZack Rusin <[email protected]>2007-09-28 09:12:20 -0400
commit6dcfddb8e2ec2bfb6187b912807fa65f28da2c5e (patch)
tree66c447fff8d693fa1a39522271bd29735d7828d6 /src/mesa
parent7966e479dca22bf2d2b844d50ac5bef70614e15a (diff)
Redoing the way we handle vertex shaders for the draw module.
Diffstat (limited to 'src/mesa')
-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
-rw-r--r--src/mesa/state_tracker/st_cb_program.c7
-rw-r--r--src/mesa/state_tracker/st_draw.c2
-rw-r--r--src/mesa/state_tracker/st_program.c8
-rw-r--r--src/mesa/state_tracker/st_program.h4
-rw-r--r--src/mesa/x86/rtasm/x86sse.c68
-rw-r--r--src/mesa/x86/rtasm/x86sse.h49
17 files changed, 211 insertions, 135 deletions
diff --git a/src/mesa/pipe/draw/draw_context.c b/src/mesa/pipe/draw/draw_context.c
index 66c66ff698e..5efb173228f 100644
--- a/src/mesa/pipe/draw/draw_context.c
+++ b/src/mesa/pipe/draw/draw_context.c
@@ -155,14 +155,6 @@ 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 0ccf5f60466..398e96d94d2 100644
--- a/src/mesa/pipe/draw/draw_context.h
+++ b/src/mesa/pipe/draw/draw_context.h
@@ -92,9 +92,12 @@ void draw_set_rasterize_stage( struct draw_context *draw,
struct draw_stage *stage );
-void
-draw_set_vertex_shader(struct draw_context *draw,
- const struct pipe_shader_state *shader);
+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
diff --git a/src/mesa/pipe/draw/draw_private.h b/src/mesa/pipe/draw/draw_private.h
index ebef5347ab9..2f52299f74a 100644
--- a/src/mesa/pipe/draw/draw_private.h
+++ b/src/mesa/pipe/draw/draw_private.h
@@ -46,6 +46,7 @@
#include "draw_vertex.h"
+#include "x86/rtasm/x86sse.h"
/**
* Basic vertex info.
@@ -104,7 +105,7 @@ struct draw_stage
void (*tri)( struct draw_stage *,
struct prim_header * );
-
+
void (*end)( struct draw_stage * );
void (*reset_stipple_counter)( struct draw_stage * );
@@ -116,6 +117,15 @@ 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.
@@ -145,7 +155,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];
- struct pipe_shader_state vertex_shader;
+ 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];
diff --git a/src/mesa/pipe/draw/draw_vertex_fetch.c b/src/mesa/pipe/draw/draw_vertex_fetch.c
index 2b839d641eb..bc37e18c341 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.num_inputs; attr++) {
+ for (attr = 0; attr < draw->vertex_shader->state->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 a2e1cdc472d..f7ddbd19093 100644
--- a/src/mesa/pipe/draw/draw_vertex_shader.c
+++ b/src/mesa/pipe/draw/draw_vertex_shader.c
@@ -36,6 +36,8 @@
#include "draw_context.h"
#include "draw_vertex.h"
+#include "x86/rtasm/x86sse.h"
+
#include "pipe/tgsi/exec/tgsi_core.h"
static INLINE unsigned
@@ -70,6 +72,7 @@ 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.
@@ -92,7 +95,7 @@ run_vertex_program(struct draw_context *draw,
const float *trans = draw->viewport.translate;
assert(count <= 4);
- assert(draw->vertex_shader.output_semantic_name[0]
+ assert(draw->vertex_shader->state->output_semantic_name[0]
== TGSI_SEMANTIC_POSITION);
#ifdef DEBUG
@@ -101,7 +104,7 @@ run_vertex_program(struct draw_context *draw,
/* init machine state */
tgsi_exec_machine_init(&machine,
- draw->vertex_shader.tokens,
+ draw->vertex_shader->state->tokens,
PIPE_MAX_SAMPLERS,
NULL /*samplers*/ );
@@ -114,8 +117,8 @@ run_vertex_program(struct draw_context *draw,
draw_vertex_fetch( draw, &machine, elts, count );
/* run shader */
- if( draw->vertex_shader.executable != NULL ) {
- codegen_function func = (codegen_function) draw->vertex_shader.executable;
+ if( draw->vertex_shader->state->executable != NULL ) {
+ codegen_function func = (codegen_function) draw->vertex_shader->state->executable;
func(
machine.Inputs,
machine.Outputs,
@@ -206,3 +209,42 @@ 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 5c6d37a4661..19ca5e575fb 100644
--- a/src/mesa/pipe/i915simple/i915_state.c
+++ b/src/mesa/pipe/i915simple/i915_state.c
@@ -443,16 +443,13 @@ static void i915_set_polygon_stipple( struct pipe_context *pipe,
{
}
-
-static void *
-i915_create_shader_state(struct pipe_context *pipe,
- const struct pipe_shader_state *templ)
+static void * i915_create_fs_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);
@@ -461,20 +458,35 @@ static void i915_bind_fs_state( struct pipe_context *pipe,
i915->dirty |= I915_NEW_FS;
}
+static void i915_delete_fs_state(struct pipe_context *pipe, void *shader)
+{
+ /*do nothing*/
+}
-static void i915_bind_vs_state(struct pipe_context *pipe,
- void *vs)
+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 */
- draw_set_vertex_shader(i915->draw, (const struct pipe_shader_state *)vs);
+ return draw_create_vertex_shader(i915->draw, templ);
}
-static void i915_delete_shader_state(struct pipe_context *pipe,
- void *shader)
+static void i915_bind_vs_state(struct pipe_context *pipe, void *vs)
{
- /*do nothing*/
+ struct i915_context *i915 = i915_context(pipe);
+
+ /* just pass-through to draw module */
+ draw_bind_vertex_shader(i915->draw, vs);
+}
+
+static void i915_delete_vs_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);
}
static void i915_set_constant_buffer(struct pipe_context *pipe,
@@ -707,12 +719,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_shader_state;
+ i915->pipe.create_fs_state = i915_create_fs_state;
i915->pipe.bind_fs_state = i915_bind_fs_state;
- i915->pipe.delete_fs_state = i915_delete_shader_state;
- i915->pipe.create_vs_state = i915_create_shader_state;
+ i915->pipe.delete_fs_state = i915_delete_fs_state;
+ i915->pipe.create_vs_state = i915_create_vs_state;
i915->pipe.bind_vs_state = i915_bind_vs_state;
- i915->pipe.delete_vs_state = i915_delete_shader_state;
+ i915->pipe.delete_vs_state = i915_delete_vs_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 e415966dae1..695bf1a9e02 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_shader_state;
+ softpipe->pipe.create_fs_state = softpipe_create_fs_state;
softpipe->pipe.bind_fs_state = softpipe_bind_fs_state;
- softpipe->pipe.delete_fs_state = softpipe_delete_shader_state;
- softpipe->pipe.create_vs_state = softpipe_create_shader_state;
+ softpipe->pipe.delete_fs_state = softpipe_delete_fs_state;
+ softpipe->pipe.create_vs_state = softpipe_create_vs_state;
softpipe->pipe.bind_vs_state = softpipe_bind_vs_state;
- softpipe->pipe.delete_vs_state = softpipe_delete_shader_state;
+ softpipe->pipe.delete_vs_state = softpipe_delete_vs_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 c0a681f3d6b..ccf29b5683d 100644
--- a/src/mesa/pipe/softpipe/sp_context.h
+++ b/src/mesa/pipe/softpipe/sp_context.h
@@ -62,8 +62,12 @@ 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 */
@@ -76,7 +80,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 pipe_shader_state *vs;
+ const struct sp_vertex_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 f0e1461d258..f9061e86e53 100644
--- a/src/mesa/pipe/softpipe/sp_state.h
+++ b/src/mesa/pipe/softpipe/sp_state.h
@@ -87,12 +87,14 @@ void softpipe_set_constant_buffer(struct pipe_context *,
void softpipe_set_feedback_state( struct pipe_context *,
const struct pipe_feedback_state * );
-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_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_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 6c6e7980698..b6145df8e25 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;
+ const struct pipe_shader_state *vs = softpipe->vs->state;
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 8306a95f449..f1bec2c73ac 100644
--- a/src/mesa/pipe/softpipe/sp_state_fs.c
+++ b/src/mesa/pipe/softpipe/sp_state_fs.c
@@ -33,10 +33,13 @@
#include "pipe/draw/draw_context.h"
-void * softpipe_create_shader_state(struct pipe_context *pipe,
- const struct pipe_shader_state *templ)
+void * softpipe_create_fs_state(struct pipe_context *pipe,
+ const struct pipe_shader_state *templ)
{
- /* we just want the pipe_shader_state template in the bind calls */
+ /* Decide whether we'll be codegenerating this shader and if so do
+ * that now.
+ */
+
return 0;
}
@@ -49,25 +52,51 @@ 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 = (struct pipe_shader_state *)vs;
+ softpipe->vs = (const struct sp_vertex_shader_state *)vs;
- softpipe->dirty |= SP_NEW_VS;
+ draw_bind_vertex_shader(softpipe->draw, softpipe->vs->draw_data);
- draw_set_vertex_shader(softpipe->draw, (struct pipe_shader_state *)vs);
+ softpipe->dirty |= SP_NEW_VS;
}
-
-void softpipe_delete_shader_state( struct pipe_context *pipe,
- void *shader )
+void softpipe_delete_vs_state(struct pipe_context *pipe,
+ void *vs)
{
- /* do nothing */
+ 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);
}
+
+
void softpipe_set_constant_buffer(struct pipe_context *pipe,
uint shader, uint index,
const struct pipe_constant_buffer *buf)
diff --git a/src/mesa/state_tracker/st_cb_program.c b/src/mesa/state_tracker/st_cb_program.c
index 25dbc2c2442..3a7ce9405e8 100644
--- a/src/mesa/state_tracker/st_cb_program.c
+++ b/src/mesa/state_tracker/st_cb_program.c
@@ -86,10 +86,6 @@ static struct gl_program *st_new_program( GLcontext *ctx,
prog->serialNo = 1;
-#if defined(__i386__) || defined(__386__)
- x86_init_func( &prog->sse2_program );
-#endif
-
return _mesa_init_vertex_program( ctx,
&prog->Base,
target,
@@ -129,9 +125,6 @@ static void st_delete_program( GLcontext *ctx,
case GL_VERTEX_PROGRAM_ARB:
{
struct st_vertex_program *stvp = (struct st_vertex_program *) prog;
-#if defined(__i386__) || defined(__386__)
- x86_release_func( &stvp->sse2_program );
-#endif
st_remove_vertex_program(st, stvp);
}
break;
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index ce5bf0c8a94..7c836ba2c13 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -405,7 +405,7 @@ st_feedback_draw_vbo(GLcontext *ctx,
draw_set_viewport_state(draw, &st->state.viewport);
draw_set_clip_state(draw, &st->state.clip);
draw_set_rasterizer_state(draw, &st->state.rasterizer->state);
- draw_set_vertex_shader(draw, &st->state.vs->state);
+ draw_bind_vertex_shader(draw, st->state.vs->data);
/* XXX need to set vertex info too */
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 44cc33b09fb..116b59a067a 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -253,14 +253,6 @@ st_translate_vertex_program(struct st_context *st,
if (TGSI_DEBUG)
tgsi_dump( tokensOut, 0 );
-#if defined(__i386__) || defined(__386__)
- if (stvp->sse2_program.csr == stvp->sse2_program.store)
- tgsi_emit_sse2( tokensOut, &stvp->sse2_program );
-
- if (!cso->state.executable)
- ((struct cso_vertex_shader*)cso)->state.executable = (void *) x86_get_func( &stvp->sse2_program );
-#endif
-
return cso;
}
diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h
index 6e106c16b02..2b792013131 100644
--- a/src/mesa/state_tracker/st_program.h
+++ b/src/mesa/state_tracker/st_program.h
@@ -79,10 +79,6 @@ struct st_vertex_program
/** The program in TGSI format */
struct tgsi_token tokens[ST_FP_MAX_TOKENS];
-#if defined(__i386__) || defined(__386__)
- struct x86_function sse2_program;
-#endif
-
/** Pointer to the corresponding cached shader */
const struct cso_vertex_shader *vs;
diff --git a/src/mesa/x86/rtasm/x86sse.c b/src/mesa/x86/rtasm/x86sse.c
index a6cfa40f91f..f9a9352e468 100644
--- a/src/mesa/x86/rtasm/x86sse.c
+++ b/src/mesa/x86/rtasm/x86sse.c
@@ -6,22 +6,22 @@
#define DISASSEM 0
#define X86_TWOB 0x0f
-static GLubyte *cptr( void (*label)() )
+static unsigned char *cptr( void (*label)() )
{
- return (char *)(unsigned long)label;
+ return (unsigned char *)(unsigned long)label;
}
/* Emit bytes to the instruction stream:
*/
-static void emit_1b( struct x86_function *p, GLbyte b0 )
+static void emit_1b( struct x86_function *p, char b0 )
{
- *(GLbyte *)(p->csr++) = b0;
+ *(char *)(p->csr++) = b0;
}
-static void emit_1i( struct x86_function *p, GLint i0 )
+static void emit_1i( struct x86_function *p, int i0 )
{
- *(GLint *)(p->csr) = i0;
+ *(int *)(p->csr) = i0;
p->csr += 4;
}
@@ -35,20 +35,20 @@ static void disassem( struct x86_function *p, const char *fn )
#endif
}
-static void emit_1ub_fn( struct x86_function *p, GLubyte b0, const char *fn )
+static void emit_1ub_fn( struct x86_function *p, unsigned char b0, const char *fn )
{
disassem(p, fn);
*(p->csr++) = b0;
}
-static void emit_2ub_fn( struct x86_function *p, GLubyte b0, GLubyte b1, const char *fn )
+static void emit_2ub_fn( struct x86_function *p, unsigned char b0, unsigned char b1, const char *fn )
{
disassem(p, fn);
*(p->csr++) = b0;
*(p->csr++) = b1;
}
-static void emit_3ub_fn( struct x86_function *p, GLubyte b0, GLubyte b1, GLubyte b2, const char *fn )
+static void emit_3ub_fn( struct x86_function *p, unsigned char b0, unsigned char b1, unsigned char b2, const char *fn )
{
disassem(p, fn);
*(p->csr++) = b0;
@@ -69,7 +69,7 @@ static void emit_modrm( struct x86_function *p,
struct x86_reg reg,
struct x86_reg regmem )
{
- GLubyte val = 0;
+ unsigned char val = 0;
assert(reg.mod == mod_REG);
@@ -104,7 +104,7 @@ static void emit_modrm( struct x86_function *p,
static void emit_modrm_noreg( struct x86_function *p,
- GLuint op,
+ unsigned op,
struct x86_reg regmem )
{
struct x86_reg dummy = x86_make_reg(file_REG32, op);
@@ -117,8 +117,8 @@ static void emit_modrm_noreg( struct x86_function *p,
* the arguments presented.
*/
static void emit_op_modrm( struct x86_function *p,
- GLubyte op_dst_is_reg,
- GLubyte op_dst_is_mem,
+ unsigned char op_dst_is_reg,
+ unsigned char op_dst_is_mem,
struct x86_reg dst,
struct x86_reg src )
{
@@ -162,7 +162,7 @@ struct x86_reg x86_make_reg( enum x86_reg_file file,
}
struct x86_reg x86_make_disp( struct x86_reg reg,
- GLint disp )
+ int disp )
{
assert(reg.file == file_REG32);
@@ -191,7 +191,7 @@ struct x86_reg x86_get_base_reg( struct x86_reg reg )
return x86_make_reg( reg.file, reg.idx );
}
-GLubyte *x86_get_label( struct x86_function *p )
+unsigned char *x86_get_label( struct x86_function *p )
{
return p->csr;
}
@@ -205,13 +205,13 @@ GLubyte *x86_get_label( struct x86_function *p )
void x86_jcc( struct x86_function *p,
enum x86_cc cc,
- GLubyte *label )
+ unsigned char *label )
{
- GLint offset = label - (x86_get_label(p) + 2);
+ int offset = label - (x86_get_label(p) + 2);
if (offset <= 127 && offset >= -128) {
emit_1ub(p, 0x70 + cc);
- emit_1b(p, (GLbyte) offset);
+ emit_1b(p, (char) offset);
}
else {
offset = label - (x86_get_label(p) + 6);
@@ -222,7 +222,7 @@ void x86_jcc( struct x86_function *p,
/* Always use a 32bit offset for forward jumps:
*/
-GLubyte *x86_jcc_forward( struct x86_function *p,
+unsigned char *x86_jcc_forward( struct x86_function *p,
enum x86_cc cc )
{
emit_2ub(p, 0x0f, 0x80 + cc);
@@ -230,14 +230,14 @@ GLubyte *x86_jcc_forward( struct x86_function *p,
return x86_get_label(p);
}
-GLubyte *x86_jmp_forward( struct x86_function *p)
+unsigned char *x86_jmp_forward( struct x86_function *p)
{
emit_1ub(p, 0xe9);
emit_1i(p, 0);
return x86_get_label(p);
}
-GLubyte *x86_call_forward( struct x86_function *p)
+unsigned char *x86_call_forward( struct x86_function *p)
{
emit_1ub(p, 0xe8);
emit_1i(p, 0);
@@ -247,12 +247,12 @@ GLubyte *x86_call_forward( struct x86_function *p)
/* Fixup offset from forward jump:
*/
void x86_fixup_fwd_jump( struct x86_function *p,
- GLubyte *fixup )
+ unsigned char *fixup )
{
*(int *)(fixup - 4) = x86_get_label(p) - fixup;
}
-void x86_jmp( struct x86_function *p, GLubyte *label)
+void x86_jmp( struct x86_function *p, unsigned char *label)
{
emit_1ub(p, 0xe9);
emit_1i(p, label - x86_get_label(p) - 4);
@@ -268,7 +268,7 @@ void x86_call( struct x86_function *p, void (*label)())
* Temporary. As I need immediate operands, and dont want to mess with the codegen,
* I load the immediate into general purpose register and use it.
*/
-void x86_mov_reg_imm( struct x86_function *p, struct x86_reg dst, GLint imm )
+void x86_mov_reg_imm( struct x86_function *p, struct x86_reg dst, int imm )
{
assert(dst.mod == mod_REG);
emit_1ub(p, 0xb8 + dst.idx);
@@ -595,7 +595,7 @@ void sse_cvtps2pi( struct x86_function *p,
void sse_shufps( struct x86_function *p,
struct x86_reg dest,
struct x86_reg arg0,
- GLubyte shuf)
+ unsigned char shuf)
{
emit_2ub(p, X86_TWOB, 0xC6);
emit_modrm(p, dest, arg0);
@@ -605,7 +605,7 @@ void sse_shufps( struct x86_function *p,
void sse_cmpps( struct x86_function *p,
struct x86_reg dest,
struct x86_reg arg0,
- GLubyte cc)
+ unsigned char cc)
{
emit_2ub(p, X86_TWOB, 0xC2);
emit_modrm(p, dest, arg0);
@@ -630,7 +630,7 @@ void sse_pmovmskb( struct x86_function *p,
void sse2_pshufd( struct x86_function *p,
struct x86_reg dest,
struct x86_reg arg0,
- GLubyte shuf)
+ unsigned char shuf)
{
emit_3ub(p, 0x66, X86_TWOB, 0x70);
emit_modrm(p, dest, arg0);
@@ -772,11 +772,11 @@ void x87_fclex( struct x86_function *p )
static void x87_arith_op( struct x86_function *p, struct x86_reg dst, struct x86_reg arg,
- GLubyte dst0ub0,
- GLubyte dst0ub1,
- GLubyte arg0ub0,
- GLubyte arg0ub1,
- GLubyte argmem_noreg)
+ unsigned char dst0ub0,
+ unsigned char dst0ub1,
+ unsigned char arg0ub0,
+ unsigned char arg0ub1,
+ unsigned char argmem_noreg)
{
assert(dst.file == file_x87);
@@ -1116,7 +1116,7 @@ void mmx_movq( struct x86_function *p,
* account any push/pop activity:
*/
struct x86_reg x86_fn_arg( struct x86_function *p,
- GLuint arg )
+ unsigned arg )
{
return x86_make_disp(x86_make_reg(file_REG32, reg_SP),
p->stack_offset + arg * 4); /* ??? */
@@ -1128,7 +1128,7 @@ void x86_init_func( struct x86_function *p )
x86_init_func_size(p, 1024);
}
-void x86_init_func_size( struct x86_function *p, GLuint code_size )
+void x86_init_func_size( struct x86_function *p, unsigned code_size )
{
p->store = _mesa_exec_malloc(code_size);
p->csr = p->store;
diff --git a/src/mesa/x86/rtasm/x86sse.h b/src/mesa/x86/rtasm/x86sse.h
index c1ca06088bc..63b9a36392a 100644
--- a/src/mesa/x86/rtasm/x86sse.h
+++ b/src/mesa/x86/rtasm/x86sse.h
@@ -4,24 +4,22 @@
#if defined(__i386__) || defined(__386__)
-#include "glheader.h"
-
/* It is up to the caller to ensure that instructions issued are
* suitable for the host cpu. There are no checks made in this module
* for mmx/sse/sse2 support on the cpu.
*/
struct x86_reg {
- GLuint file:3;
- GLuint idx:3;
- GLuint mod:2; /* mod_REG if this is just a register */
- GLint disp:24; /* only +/- 23bits of offset - should be enough... */
+ unsigned file:3;
+ unsigned idx:3;
+ unsigned mod:2; /* mod_REG if this is just a register */
+ int disp:24; /* only +/- 23bits of offset - should be enough... */
};
struct x86_function {
- GLubyte *store;
- GLubyte *csr;
- GLuint stack_offset;
- GLint need_emms;
+ unsigned char *store;
+ unsigned char *csr;
+ unsigned stack_offset;
+ int need_emms;
const char *fn;
};
@@ -81,7 +79,7 @@ enum sse_cc {
void x86_init_func( struct x86_function *p );
-void x86_init_func_size( struct x86_function *p, GLuint code_size );
+void x86_init_func_size( struct x86_function *p, unsigned code_size );
void x86_release_func( struct x86_function *p );
void (*x86_get_func( struct x86_function *p ))( void );
@@ -93,7 +91,7 @@ struct x86_reg x86_make_reg( enum x86_reg_file file,
enum x86_reg_name idx );
struct x86_reg x86_make_disp( struct x86_reg reg,
- GLint disp );
+ int disp );
struct x86_reg x86_deref( struct x86_reg reg );
@@ -102,23 +100,23 @@ struct x86_reg x86_get_base_reg( struct x86_reg reg );
/* Labels, jumps and fixup:
*/
-GLubyte *x86_get_label( struct x86_function *p );
+unsigned char *x86_get_label( struct x86_function *p );
void x86_jcc( struct x86_function *p,
enum x86_cc cc,
- GLubyte *label );
+ unsigned char *label );
-GLubyte *x86_jcc_forward( struct x86_function *p,
+unsigned char *x86_jcc_forward( struct x86_function *p,
enum x86_cc cc );
-GLubyte *x86_jmp_forward( struct x86_function *p);
+unsigned char *x86_jmp_forward( struct x86_function *p);
-GLubyte *x86_call_forward( struct x86_function *p);
+unsigned char *x86_call_forward( struct x86_function *p);
void x86_fixup_fwd_jump( struct x86_function *p,
- GLubyte *fixup );
+ unsigned char *fixup );
-void x86_jmp( struct x86_function *p, GLubyte *label );
+void x86_jmp( struct x86_function *p, unsigned char *label );
void x86_call( struct x86_function *p, void (*label)() );
@@ -126,7 +124,7 @@ void x86_call( struct x86_function *p, void (*label)() );
* Temporary. As I need immediate operands, and dont want to mess with the codegen,
* I load the immediate into general purpose register and use it.
*/
-void x86_mov_reg_imm( struct x86_function *p, struct x86_reg dst, GLint imm );
+void x86_mov_reg_imm( struct x86_function *p, struct x86_reg dst, int imm );
/* Macro for sse_shufps() and sse2_pshufd():
@@ -147,7 +145,8 @@ void sse2_movd( struct x86_function *p, struct x86_reg dst, struct x86_reg src )
void sse2_packssdw( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse2_packsswb( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse2_packuswb( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
-void sse2_pshufd( struct x86_function *p, struct x86_reg dest, struct x86_reg arg0, GLubyte shuf );
+void sse2_pshufd( struct x86_function *p, struct x86_reg dest, struct x86_reg arg0,
+ unsigned char shuf );
void sse2_rcpps( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse2_rcpss( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
@@ -157,7 +156,8 @@ void sse_cvtps2pi( struct x86_function *p, struct x86_reg dst, struct x86_reg sr
void sse_divss( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse_andnps( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse_andps( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
-void sse_cmpps( struct x86_function *p, struct x86_reg dst, struct x86_reg src, GLubyte cc );
+void sse_cmpps( struct x86_function *p, struct x86_reg dst, struct x86_reg src,
+ unsigned char cc );
void sse_maxps( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse_maxss( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse_minps( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
@@ -175,7 +175,8 @@ void sse_xorps( struct x86_function *p, struct x86_reg dst, struct x86_reg src )
void sse_subps( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse_rsqrtps( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
void sse_rsqrtss( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
-void sse_shufps( struct x86_function *p, struct x86_reg dest, struct x86_reg arg0, GLubyte shuf );
+void sse_shufps( struct x86_function *p, struct x86_reg dest, struct x86_reg arg0,
+ unsigned char shuf );
void sse_pmovmskb( struct x86_function *p, struct x86_reg dest, struct x86_reg src );
void x86_add( struct x86_function *p, struct x86_reg dst, struct x86_reg src );
@@ -247,7 +248,7 @@ void x87_fucom( struct x86_function *p, struct x86_reg arg );
* account any push/pop activity. Note - doesn't track explict
* manipulation of ESP by other instructions.
*/
-struct x86_reg x86_fn_arg( struct x86_function *p, GLuint arg );
+struct x86_reg x86_fn_arg( struct x86_function *p, unsigned arg );
#endif
#endif