From bcce57c2e9a1d9b203dba8fe13480889e6d19c89 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Wed, 31 Mar 2010 12:01:16 +0800 Subject: [PATCH] st/mesa: Make FEATURE_feedback and FEATURE_rastpos more modular. Make st_cb_feedback.h FEATURE_feedback aware and st_cb_rastpos.h FEATURE_rastpos aware. Move creation of selection/feedback draw context to st_init_draw. --- src/mesa/state_tracker/st_cb_feedback.c | 4 ++++ src/mesa/state_tracker/st_cb_feedback.h | 12 ++++++++++++ src/mesa/state_tracker/st_cb_rasterpos.c | 3 +++ src/mesa/state_tracker/st_cb_rasterpos.h | 16 +++++++++++++++- src/mesa/state_tracker/st_context.c | 20 -------------------- src/mesa/state_tracker/st_draw.c | 16 ++++++++++++++++ 6 files changed, 50 insertions(+), 21 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_feedback.c b/src/mesa/state_tracker/st_cb_feedback.c index c85d3da84a2..e57730b5ecd 100644 --- a/src/mesa/state_tracker/st_cb_feedback.c +++ b/src/mesa/state_tracker/st_cb_feedback.c @@ -54,6 +54,8 @@ #include "draw/draw_pipe.h" +#if FEATURE_feedback + /** * This is actually used for both feedback and selection. */ @@ -302,3 +304,5 @@ void st_init_feedback_functions(struct dd_function_table *functions) { functions->RenderMode = st_RenderMode; } + +#endif /* FEATURE_feedback */ diff --git a/src/mesa/state_tracker/st_cb_feedback.h b/src/mesa/state_tracker/st_cb_feedback.h index 2559ba3817b..706d84960f7 100644 --- a/src/mesa/state_tracker/st_cb_feedback.h +++ b/src/mesa/state_tracker/st_cb_feedback.h @@ -30,8 +30,20 @@ #define ST_CB_FEEDBACK_H +#include "main/mtypes.h" + +#if FEATURE_feedback + extern void st_init_feedback_functions(struct dd_function_table *functions); +#else + +static INLINE void +st_init_feedback_functions(struct dd_function_table *functions) +{ +} + +#endif /* FEATURE_feedback */ #endif /* ST_CB_FEEDBACK_H */ diff --git a/src/mesa/state_tracker/st_cb_rasterpos.c b/src/mesa/state_tracker/st_cb_rasterpos.c index 843f3200278..7b2eb8012de 100644 --- a/src/mesa/state_tracker/st_cb_rasterpos.c +++ b/src/mesa/state_tracker/st_cb_rasterpos.c @@ -50,6 +50,7 @@ #include "vbo/vbo.h" +#if FEATURE_rastpos /** * Our special drawing pipeline stage (replaces rasterization). @@ -267,3 +268,5 @@ void st_init_rasterpos_functions(struct dd_function_table *functions) { functions->RasterPos = st_RasterPos; } + +#endif /* FEATURE_rastpos */ diff --git a/src/mesa/state_tracker/st_cb_rasterpos.h b/src/mesa/state_tracker/st_cb_rasterpos.h index 2b992e1405e..d2ed7297f15 100644 --- a/src/mesa/state_tracker/st_cb_rasterpos.h +++ b/src/mesa/state_tracker/st_cb_rasterpos.h @@ -28,6 +28,20 @@ #ifndef ST_CB_RASTERPOS_H #define ST_CB_RASTERPOS_H + +#include "main/mtypes.h" + +#if FEATURE_rastpos + extern void st_init_rasterpos_functions(struct dd_function_table *functions); -#endif +#else + +static INLINE void +st_init_rasterpos_functions(struct dd_function_table *functions) +{ +} + +#endif /* FEATURE_rastpos */ + +#endif /* ST_CB_RASTERPOS_H */ diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index bab54811b4e..5c9462a399b 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -45,9 +45,7 @@ #endif #include "st_cb_eglimage.h" #include "st_cb_fbo.h" -#if FEATURE_feedback #include "st_cb_feedback.h" -#endif #include "st_cb_program.h" #include "st_cb_queryobj.h" #include "st_cb_readpixels.h" @@ -64,7 +62,6 @@ #include "util/u_inlines.h" #include "util/u_rect.h" #include "util/u_surface.h" -#include "draw/draw_context.h" #include "cso_cache/cso_context.h" @@ -128,18 +125,6 @@ st_create_context_priv( GLcontext *ctx, struct pipe_context *pipe ) /* state tracker needs the VBO module */ _vbo_CreateContext(ctx); -#if FEATURE_feedback || FEATURE_rastpos - st->draw = draw_create(pipe); /* for selection/feedback */ - - /* Disable draw options that might convert points/lines to tris, etc. - * as that would foul-up feedback/selection mode. - */ - draw_wide_line_threshold(st->draw, 1000.0f); - draw_wide_point_threshold(st->draw, 1000.0f); - draw_enable_line_stipple(st->draw, FALSE); - draw_enable_point_sprites(st->draw, FALSE); -#endif - st->dirty.mesa = ~0; st->dirty.st = ~0; @@ -224,9 +209,6 @@ static void st_destroy_context_priv( struct st_context *st ) { uint i; -#if FEATURE_feedback || FEATURE_rastpos - draw_destroy(st->draw); -#endif st_destroy_atoms( st ); st_destroy_draw( st ); st_destroy_generate_mipmap(st); @@ -315,9 +297,7 @@ void st_init_driver_functions(struct dd_function_table *functions) st_init_eglimage_functions(functions); st_init_fbo_functions(functions); -#if FEATURE_feedback st_init_feedback_functions(functions); -#endif st_init_program_functions(functions); #if FEATURE_queryobj st_init_query_functions(functions); diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 4137596bd40..eb2e5b2bbf7 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -57,6 +57,7 @@ #include "pipe/p_defines.h" #include "util/u_inlines.h" #include "util/u_format.h" +#include "draw/draw_context.h" #include "cso_cache/cso_context.h" @@ -741,11 +742,26 @@ void st_init_draw( struct st_context *st ) GLcontext *ctx = st->ctx; vbo_set_draw_func(ctx, st_draw_vbo); + +#if FEATURE_feedback || FEATURE_rastpos + st->draw = draw_create(st->pipe); /* for selection/feedback */ + + /* Disable draw options that might convert points/lines to tris, etc. + * as that would foul-up feedback/selection mode. + */ + draw_wide_line_threshold(st->draw, 1000.0f); + draw_wide_point_threshold(st->draw, 1000.0f); + draw_enable_line_stipple(st->draw, FALSE); + draw_enable_point_sprites(st->draw, FALSE); +#endif } void st_destroy_draw( struct st_context *st ) { +#if FEATURE_feedback || FEATURE_rastpos + draw_destroy(st->draw); +#endif } -- 2.30.2