summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian <brian.paul@tungstengraphics.com>2008-02-29 10:07:44 -0700
committerBrian <brian.paul@tungstengraphics.com>2008-02-29 10:08:16 -0700
commit78220aea864c36038f8425ad9d8467d2a2bdea58 (patch)
tree8bfeccb26d8c1ca588fd6f6343ea82037af703a2
parentebe3b34ad225e320a09bb4069ce4d24808386327 (diff)
gallium: remove the ugly pipe->draw stage lookup code in aaline/point/pstipple stages
Added a void *draw ptr to pipe_context. Probably look for a better solution someday.
-rw-r--r--src/gallium/auxiliary/draw/draw_aaline.c32
-rw-r--r--src/gallium/auxiliary/draw/draw_aapoint.c32
-rw-r--r--src/gallium/auxiliary/draw/draw_pstipple.c32
-rw-r--r--src/gallium/include/pipe/p_context.h1
4 files changed, 13 insertions, 84 deletions
diff --git a/src/gallium/auxiliary/draw/draw_aaline.c b/src/gallium/auxiliary/draw/draw_aaline.c
index 51140388f09..7660e56fe66 100644
--- a/src/gallium/auxiliary/draw/draw_aaline.c
+++ b/src/gallium/auxiliary/draw/draw_aaline.c
@@ -691,35 +691,11 @@ draw_aaline_stage(struct draw_context *draw)
}
-/*
- * XXX temporary? solution to mapping a pipe_context to a aaline_stage.
- */
-
-#define MAX_CONTEXTS 10
-
-static struct pipe_context *Pipe[MAX_CONTEXTS];
-static struct aaline_stage *Stage[MAX_CONTEXTS];
-static uint NumContexts;
-
-static void
-add_aa_pipe_context(struct pipe_context *pipe, struct aaline_stage *aa)
-{
- assert(NumContexts < MAX_CONTEXTS);
- Pipe[NumContexts] = pipe;
- Stage[NumContexts] = aa;
- NumContexts++;
-}
-
static struct aaline_stage *
aaline_stage_from_pipe(struct pipe_context *pipe)
{
- uint i;
- for (i = 0; i < NumContexts; i++) {
- if (Pipe[i] == pipe)
- return Stage[i];
- }
- assert(0);
- return NULL;
+ struct draw_context *draw = (struct draw_context *) pipe->draw;
+ return aaline_stage(draw->pipeline.aaline);
}
@@ -802,6 +778,8 @@ draw_install_aaline_stage(struct draw_context *draw, struct pipe_context *pipe)
{
struct aaline_stage *aaline;
+ pipe->draw = (void *) draw;
+
/*
* Create / install AA line drawing / prim stage
*/
@@ -830,6 +808,4 @@ draw_install_aaline_stage(struct draw_context *draw, struct pipe_context *pipe)
pipe->bind_sampler_state = aaline_bind_sampler_state;
pipe->set_sampler_texture = aaline_set_sampler_texture;
-
- add_aa_pipe_context(pipe, aaline);
}
diff --git a/src/gallium/auxiliary/draw/draw_aapoint.c b/src/gallium/auxiliary/draw/draw_aapoint.c
index d48a416899f..70f696475fc 100644
--- a/src/gallium/auxiliary/draw/draw_aapoint.c
+++ b/src/gallium/auxiliary/draw/draw_aapoint.c
@@ -762,35 +762,11 @@ draw_aapoint_stage(struct draw_context *draw)
}
-/*
- * XXX temporary? solution to mapping a pipe_context to a aapoint_stage.
- */
-
-#define MAX_CONTEXTS 10
-
-static struct pipe_context *Pipe[MAX_CONTEXTS];
-static struct aapoint_stage *Stage[MAX_CONTEXTS];
-static uint NumContexts;
-
-static void
-add_aa_pipe_context(struct pipe_context *pipe, struct aapoint_stage *aa)
-{
- assert(NumContexts < MAX_CONTEXTS);
- Pipe[NumContexts] = pipe;
- Stage[NumContexts] = aa;
- NumContexts++;
-}
-
static struct aapoint_stage *
aapoint_stage_from_pipe(struct pipe_context *pipe)
{
- uint i;
- for (i = 0; i < NumContexts; i++) {
- if (Pipe[i] == pipe)
- return Stage[i];
- }
- assert(0);
- return NULL;
+ struct draw_context *draw = (struct draw_context *) pipe->draw;
+ return aapoint_stage(draw->pipeline.aapoint);
}
@@ -850,6 +826,8 @@ draw_install_aapoint_stage(struct draw_context *draw,
{
struct aapoint_stage *aapoint;
+ pipe->draw = (void *) draw;
+
/*
* Create / install AA point drawing / prim stage
*/
@@ -868,6 +846,4 @@ draw_install_aapoint_stage(struct draw_context *draw,
pipe->create_fs_state = aapoint_create_fs_state;
pipe->bind_fs_state = aapoint_bind_fs_state;
pipe->delete_fs_state = aapoint_delete_fs_state;
-
- add_aa_pipe_context(pipe, aapoint);
}
diff --git a/src/gallium/auxiliary/draw/draw_pstipple.c b/src/gallium/auxiliary/draw/draw_pstipple.c
index f6200aa8201..2cfeb813b30 100644
--- a/src/gallium/auxiliary/draw/draw_pstipple.c
+++ b/src/gallium/auxiliary/draw/draw_pstipple.c
@@ -559,35 +559,11 @@ draw_pstip_stage(struct draw_context *draw)
}
-/*
- * XXX temporary? solution to mapping a pipe_context to a pstip_stage.
- */
-
-#define MAX_CONTEXTS 10
-
-static struct pipe_context *Pipe[MAX_CONTEXTS];
-static struct pstip_stage *Stage[MAX_CONTEXTS];
-static uint NumContexts;
-
-static void
-add_pstip_pipe_context(struct pipe_context *pipe, struct pstip_stage *pstip)
-{
- assert(NumContexts < MAX_CONTEXTS);
- Pipe[NumContexts] = pipe;
- Stage[NumContexts] = pstip;
- NumContexts++;
-}
-
static struct pstip_stage *
pstip_stage_from_pipe(struct pipe_context *pipe)
{
- uint i;
- for (i = 0; i < NumContexts; i++) {
- if (Pipe[i] == pipe)
- return Stage[i];
- }
- assert(0);
- return NULL;
+ struct draw_context *draw = (struct draw_context *) pipe->draw;
+ return pstip_stage(draw->pipeline.pstipple);
}
@@ -686,6 +662,8 @@ draw_install_pstipple_stage(struct draw_context *draw,
{
struct pstip_stage *pstip;
+ pipe->draw = (void *) draw;
+
/*
* Create / install AA line drawing / prim stage
*/
@@ -716,6 +694,4 @@ draw_install_pstipple_stage(struct draw_context *draw,
pipe->bind_sampler_state = pstip_bind_sampler_state;
pipe->set_sampler_texture = pstip_set_sampler_texture;
pipe->set_polygon_stipple = pstip_set_polygon_stipple;
-
- add_pstip_pipe_context(pipe, pstip);
}
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index d0f25d7d467..1501b52f3e5 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -56,6 +56,7 @@ struct pipe_context {
struct pipe_screen *screen;
void *priv; /** context private data (for DRI for example) */
+ void *draw; /** private, for draw module (temporary? */
void (*destroy)( struct pipe_context * );