OSDN Git Service

i965_drv_video: move pp_context to i965_driver_data and make it a pointer.
authorXiang, Haihao <haihao.xiang@intel.com>
Tue, 15 Feb 2011 08:07:04 +0000 (16:07 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Thu, 10 Mar 2011 05:46:47 +0000 (13:46 +0800)
Later media_state/render_state/pp_context will be moved to object_context.

Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
i965_drv_video/i965_drv_video.c
i965_drv_video/i965_drv_video.h
i965_drv_video/i965_post_processing.c
i965_drv_video/i965_post_processing.h
i965_drv_video/i965_render.c

index 6a44403..2fc2378 100644 (file)
@@ -1369,6 +1369,9 @@ i965_Init(VADriverContextP ctx)
     if (i965_media_init(ctx) == False)
         return VA_STATUS_ERROR_UNKNOWN;
 
+    if (i965_post_processing_init(ctx) == False)
+        return VA_STATUS_ERROR_UNKNOWN;
+
     if (i965_render_init(ctx) == False)
         return VA_STATUS_ERROR_UNKNOWN;
 
@@ -2016,6 +2019,9 @@ i965_Terminate(VADriverContextP ctx)
     if (i965_render_terminate(ctx) == False)
        return VA_STATUS_ERROR_UNKNOWN;
 
+    if (i965_post_processing_terminate(ctx) == False)
+        return VA_STATUS_ERROR_UNKNOWN;
+
     if (i965_media_terminate(ctx) == False)
        return VA_STATUS_ERROR_UNKNOWN;
 
index a62e472..16694d0 100644 (file)
@@ -167,6 +167,7 @@ struct i965_driver_data
     struct object_heap subpic_heap;
     struct i965_media_state media_state;
     struct i965_render_state render_state;
+    void *pp_context;
 };
 
 #define NEW_CONFIG_ID() object_heap_allocate(&i965->config_heap);
index 633100c..f2d0b9c 100644 (file)
@@ -471,7 +471,7 @@ static void
 ironlake_pp_states_setup(VADriverContextP ctx)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
 
     ironlake_pp_surface_state(pp_context);
     ironlake_pp_binding_table(pp_context);
@@ -583,7 +583,7 @@ static void
 ironlake_pp_pipeline_setup(VADriverContextP ctx)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
 
     intel_batchbuffer_start_atomic(ctx, 0x1000);
     intel_batchbuffer_emit_mi_flush(ctx);
@@ -621,7 +621,7 @@ ironlake_pp_null_initialize(VADriverContextP ctx, VASurfaceID surface, int input
                             unsigned short destw, unsigned short desth)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
     struct object_surface *obj_surface;
 
     /* surface */
@@ -672,7 +672,7 @@ ironlake_pp_nv12_load_save_initialize(VADriverContextP ctx, VASurfaceID surface,
                                       unsigned short destw, unsigned short desth)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
     struct pp_load_save_context *pp_load_save_context = (struct pp_load_save_context *)&pp_context->private_context;
     struct object_surface *obj_surface;
     struct i965_surface_state *ss;
@@ -855,7 +855,7 @@ ironlake_pp_nv12_scaling_initialize(VADriverContextP ctx, VASurfaceID surface, i
                                     unsigned short destw, unsigned short desth)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
     struct pp_scaling_context *pp_scaling_context = (struct pp_scaling_context *)&pp_context->private_context;
     struct object_surface *obj_surface;
     struct i965_sampler_state *sampler_state;
@@ -1153,7 +1153,7 @@ ironlake_pp_nv12_avs_initialize(VADriverContextP ctx, VASurfaceID surface, int i
                                 unsigned short destw, unsigned short desth)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
     struct pp_avs_context *pp_avs_context = (struct pp_avs_context *)&pp_context->private_context;
     struct object_surface *obj_surface;
     struct i965_surface_state *ss;
@@ -1525,7 +1525,7 @@ void ironlake_pp_nv12_dndi_initialize(VADriverContextP ctx, VASurfaceID surface,
                                       unsigned short destw, unsigned short desth)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
     struct pp_dndi_context *pp_dndi_context = (struct pp_dndi_context *)&pp_context->private_context;
     struct object_surface *obj_surface;
     struct i965_surface_state *ss;
@@ -1803,7 +1803,7 @@ ironlake_pp_initialize(VADriverContextP ctx,
                        int pp_index)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
     struct pp_module *pp_module;
     dri_bo *bo;
     int i;
@@ -1946,13 +1946,73 @@ i965_post_processing(VADriverContextP ctx,
     }
 }       
 
-void
-i965_post_processing_once_init(VADriverContextP ctx)
+Bool
+i965_post_processing_terminate(VADriverContextP ctx)
+{
+    struct i965_driver_data *i965 = i965_driver_data(ctx);
+    struct i965_post_processing_context *pp_context = i965->pp_context;
+    int i;
+
+    if (pp_context) {
+        dri_bo_unreference(pp_context->curbe.bo);
+        pp_context->curbe.bo = NULL;
+
+        for (i = 0; i < MAX_PP_SURFACES; i++) {
+            dri_bo_unreference(pp_context->surfaces[i].ss_bo);
+            pp_context->surfaces[i].ss_bo = NULL;
+
+            dri_bo_unreference(pp_context->surfaces[i].s_bo);
+            pp_context->surfaces[i].s_bo = NULL;
+        }
+
+        dri_bo_unreference(pp_context->sampler_state_table.bo);
+        pp_context->sampler_state_table.bo = NULL;
+
+        dri_bo_unreference(pp_context->sampler_state_table.bo_8x8);
+        pp_context->sampler_state_table.bo_8x8 = NULL;
+
+        dri_bo_unreference(pp_context->sampler_state_table.bo_8x8_uv);
+        pp_context->sampler_state_table.bo_8x8_uv = NULL;
+
+        dri_bo_unreference(pp_context->binding_table.bo);
+        pp_context->binding_table.bo = NULL;
+
+        dri_bo_unreference(pp_context->idrt.bo);
+        pp_context->idrt.bo = NULL;
+
+        dri_bo_unreference(pp_context->vfe_state.bo);
+        pp_context->vfe_state.bo = NULL;
+
+        dri_bo_unreference(pp_context->stmm.bo);
+        pp_context->stmm.bo = NULL;
+
+        free(pp_context);
+    }
+
+    i965->pp_context = NULL;
+
+    for (i = 0; i < NUM_PP_MODULES && pp_modules; i++) {
+        struct pp_module *pp_module = &pp_modules[i];
+
+        dri_bo_unreference(pp_module->bo);
+        pp_module->bo = NULL;
+    }
+
+    return True;
+}
+
+Bool
+i965_post_processing_init(VADriverContextP ctx)
 {
     struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
+    struct i965_post_processing_context *pp_context = i965->pp_context;
     int i;
 
+    if (pp_context == NULL) {
+        pp_context = calloc(1, sizeof(*pp_context));
+        i965->pp_context = pp_context;
+    }
+
     pp_context->urb.size = URB_SIZE((&i965->intel));
     pp_context->urb.num_vfe_entries = 32;
     pp_context->urb.size_vfe_entry = 1;
@@ -1970,6 +2030,7 @@ i965_post_processing_once_init(VADriverContextP ctx)
 
     for (i = 0; i < NUM_PP_MODULES && pp_modules; i++) {
         struct pp_module *pp_module = &pp_modules[i];
+        dri_bo_unreference(pp_module->bo);
         pp_module->bo = dri_bo_alloc(i965->intel.bufmgr,
                                      pp_module->name,
                                      pp_module->size,
@@ -1977,53 +2038,6 @@ i965_post_processing_once_init(VADriverContextP ctx)
         assert(pp_module->bo);
         dri_bo_subdata(pp_module->bo, 0, pp_module->size, pp_module->bin);
     }
-}
-
-Bool
-i965_post_processing_terminate(VADriverContextP ctx)
-{
-    struct i965_driver_data *i965 = i965_driver_data(ctx);
-    struct i965_post_processing_context *pp_context = &i965->render_state.pp_context;
-    int i;
-
-    dri_bo_unreference(pp_context->curbe.bo);
-    pp_context->curbe.bo = NULL;
-
-    for (i = 0; i < MAX_PP_SURFACES; i++) {
-        dri_bo_unreference(pp_context->surfaces[i].ss_bo);
-        pp_context->surfaces[i].ss_bo = NULL;
-
-        dri_bo_unreference(pp_context->surfaces[i].s_bo);
-        pp_context->surfaces[i].s_bo = NULL;
-    }
-
-    dri_bo_unreference(pp_context->sampler_state_table.bo);
-    pp_context->sampler_state_table.bo = NULL;
-
-    dri_bo_unreference(pp_context->sampler_state_table.bo_8x8);
-    pp_context->sampler_state_table.bo_8x8 = NULL;
-
-    dri_bo_unreference(pp_context->sampler_state_table.bo_8x8_uv);
-    pp_context->sampler_state_table.bo_8x8_uv = NULL;
-
-    dri_bo_unreference(pp_context->binding_table.bo);
-    pp_context->binding_table.bo = NULL;
-
-    dri_bo_unreference(pp_context->idrt.bo);
-    pp_context->idrt.bo = NULL;
-
-    dri_bo_unreference(pp_context->vfe_state.bo);
-    pp_context->vfe_state.bo = NULL;
-
-    dri_bo_unreference(pp_context->stmm.bo);
-    pp_context->stmm.bo = NULL;
-
-    for (i = 0; i < NUM_PP_MODULES && pp_modules; i++) {
-        struct pp_module *pp_module = &pp_modules[i];
-
-        dri_bo_unreference(pp_module->bo);
-        pp_module->bo = NULL;
-    }
 
     return True;
 }
index 360ded4..a0745f2 100644 (file)
@@ -142,9 +142,9 @@ i965_post_processing(VADriverContextP ctx,
                      unsigned short destw,
                      unsigned short desth,
                      unsigned int pp_index);
-void
-i965_post_processing_once_init(VADriverContextP ctx);
 Bool
 i965_post_processing_terminate(VADriverContextP ctx);
+Bool
+i965_post_processing_init(VADriverContextP ctx);
 
 #endif /* __I965_POST_PROCESSING_H__ */
index 9a713f6..64d3c2a 100644 (file)
@@ -2099,8 +2099,6 @@ i965_render_init(VADriverContextP ctx)
     assert(render_state->curbe.bo);
     render_state->curbe.upload = 0;
 
-    i965_post_processing_once_init(ctx);
-
     return True;
 }
 
@@ -2111,8 +2109,6 @@ i965_render_terminate(VADriverContextP ctx)
     struct i965_driver_data *i965 = i965_driver_data(ctx);
     struct i965_render_state *render_state = &i965->render_state;
 
-    i965_post_processing_terminate(ctx);
-
     dri_bo_unreference(render_state->curbe.bo);
     render_state->curbe.bo = NULL;