diff options
Diffstat (limited to 'src/mesa/drivers/glide')
-rw-r--r-- | src/mesa/drivers/glide/fxdd.c | 36 | ||||
-rw-r--r-- | src/mesa/drivers/glide/fxdrv.h | 1 |
2 files changed, 34 insertions, 3 deletions
diff --git a/src/mesa/drivers/glide/fxdd.c b/src/mesa/drivers/glide/fxdd.c index 08285f67e8c..fe918a7eac3 100644 --- a/src/mesa/drivers/glide/fxdd.c +++ b/src/mesa/drivers/glide/fxdd.c @@ -1028,10 +1028,40 @@ static void fxDDUpdateDDPointers(GLcontext *ctx, GLuint new_state) static void fxDDRenderPrimitive( GLcontext *ctx, GLenum mode ) { - (void) ctx; (void) mode; + fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; + + if (!fxMesa->is_in_hardware) { + _swsetup_RenderPrimitive( ctx, mode ); + } + else { + fxMesa->render_prim = mode; + } +} + + +static void fxDDRenderStart( GLcontext *ctx ) +{ + fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; + + if (!fxMesa->is_in_hardware) { + _swsetup_RenderStart( ctx ); + } + else if (fxMesa->new_state) { + fxSetupFXUnits( ctx ); + } +} + +static void fxDDRenderFinish( GLcontext *ctx ) +{ + fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx; + + if (!fxMesa->is_in_hardware) { + _swsetup_RenderFinish( ctx ); + } } + void fxSetupDDPointers(GLcontext *ctx) { if (MESA_VERBOSE&VERBOSE_DRIVER) { @@ -1062,8 +1092,8 @@ void fxSetupDDPointers(GLcontext *ctx) ctx->Driver.Finish=fxDDFinish; ctx->Driver.Flush=NULL; - ctx->Driver.RenderStart=fxSetupFXUnits; - ctx->Driver.RenderFinish=_swrast_flush; + ctx->Driver.RenderStart=fxDDRenderStart; + ctx->Driver.RenderFinish=fxDDRenderFinish; ctx->Driver.ResetLineStipple=_swrast_ResetLineStipple; ctx->Driver.RenderPrimitive=fxDDRenderPrimitive; diff --git a/src/mesa/drivers/glide/fxdrv.h b/src/mesa/drivers/glide/fxdrv.h index cefd6d0e1a9..6861160c1a6 100644 --- a/src/mesa/drivers/glide/fxdrv.h +++ b/src/mesa/drivers/glide/fxdrv.h @@ -424,6 +424,7 @@ struct tfxMesaContext { GLuint render_index; GLuint passes, multipass; GLuint is_in_hardware; + GLenum render_prim; /* Current rasterization functions */ |