gallium: remove the ugly pipe->draw stage lookup code in aaline/point/pstipple stages
authorBrian <brian.paul@tungstengraphics.com>
Fri, 29 Feb 2008 17:07:44 +0000 (10:07 -0700)
committerBrian <brian.paul@tungstengraphics.com>
Fri, 29 Feb 2008 17:08:16 +0000 (10:08 -0700)
Added a void *draw ptr to pipe_context.  Probably look for a better solution someday.

src/gallium/auxiliary/draw/draw_aaline.c
src/gallium/auxiliary/draw/draw_aapoint.c
src/gallium/auxiliary/draw/draw_pstipple.c
src/gallium/include/pipe/p_context.h

index 51140388f0983771205163cd11fe7ead6639e15d..7660e56fe662fc22b8d44cfffb8da09d803dc540 100644 (file)
@@ -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);
 }
index d48a416899fa4c04b902ceb85909247d0006588c..70f696475fcf5db99fcacfaf9a1f156fe4835ae6 100644 (file)
@@ -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);
 }
index f6200aa82012fb2914b39b910096f9e41142cf03..2cfeb813b30794a069fb4beaad3e0daecd18de99 100644 (file)
@@ -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);
 }
index d0f25d7d4670896333c6bb42aac1161b7ef086ee..1501b52f3e511575081b62f31017bc266948a3ed 100644 (file)
@@ -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 * );