Just noticed your email was taken as a junk email, so I missed it. The code has been pushed, I will take your suggestion into account in the future.
Thanks Haihao > While you are at it, you could also (i) use the "modern" > drm_intel_bo_*() function and (ii) introduce a drm_intel_bo_replace() > function, thus simplifying many of if() or = NULL instances after > assignment of new bo to bo pointer. > > 2014-04-18 18:21 GMT+02:00 Xiang, Haihao <haihao.xi...@intel.com>: > > From: "Xiang, Haihao" <haihao.xi...@intel.com> > > > > It is to reduce the usage of IS_GENxxx() > > > > Signed-off-by: Xiang, Haihao <haihao.xi...@intel.com> > > --- > > src/gen8_render.c | 71 +++++++++++++++++---------------- > > src/i965_device_info.c | 14 +++++++ > > src/i965_drv_video.h | 2 + > > src/i965_render.c | 104 > > +++++++++++++++++++++++++++---------------------- > > src/i965_render.h | 4 +- > > 5 files changed, 109 insertions(+), 86 deletions(-) > > > > diff --git a/src/gen8_render.c b/src/gen8_render.c > > index 54f6225..ca731d2 100644 > > --- a/src/gen8_render.c > > +++ b/src/gen8_render.c > > @@ -1721,6 +1721,40 @@ gen8_render_put_subpicture( > > intel_batchbuffer_flush(batch); > > } > > > > +static void > > +gen8_render_terminate(VADriverContextP ctx) > > +{ > > + struct i965_driver_data *i965 = i965_driver_data(ctx); > > + struct i965_render_state *render_state = &i965->render_state; > > + > > + dri_bo_unreference(render_state->vb.vertex_buffer); > > + render_state->vb.vertex_buffer = NULL; > > + > > + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); > > + render_state->wm.surface_state_binding_table_bo = NULL; > > + > > + if (render_state->instruction_state.bo) { > > + dri_bo_unreference(render_state->instruction_state.bo); > > + render_state->instruction_state.bo = NULL; > > + } > > + > > + if (render_state->dynamic_state.bo) { > > + dri_bo_unreference(render_state->dynamic_state.bo); > > + render_state->dynamic_state.bo = NULL; > > + } > > + > > + if (render_state->indirect_state.bo) { > > + dri_bo_unreference(render_state->indirect_state.bo); > > + render_state->indirect_state.bo = NULL; > > + } > > + > > + if (render_state->draw_region) { > > + dri_bo_unreference(render_state->draw_region->bo); > > + free(render_state->draw_region); > > + render_state->draw_region = NULL; > > + } > > +} > > + > > bool > > gen8_render_init(VADriverContextP ctx) > > { > > @@ -1733,6 +1767,7 @@ gen8_render_init(VADriverContextP ctx) > > > > render_state->render_put_surface = gen8_render_put_surface; > > render_state->render_put_subpicture = gen8_render_put_subpicture; > > + render_state->render_terminate = gen8_render_terminate; > > > > if (IS_GEN8(i965->intel.device_info)) { > > memcpy(render_state->render_kernels, render_kernels_gen8, > > @@ -1786,39 +1821,3 @@ gen8_render_init(VADriverContextP ctx) > > > > return true; > > } > > - > > - > > -void > > -gen8_render_terminate(VADriverContextP ctx) > > -{ > > - struct i965_driver_data *i965 = i965_driver_data(ctx); > > - struct i965_render_state *render_state = &i965->render_state; > > - > > - dri_bo_unreference(render_state->vb.vertex_buffer); > > - render_state->vb.vertex_buffer = NULL; > > - > > - dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); > > - render_state->wm.surface_state_binding_table_bo = NULL; > > - > > - if (render_state->instruction_state.bo) { > > - dri_bo_unreference(render_state->instruction_state.bo); > > - render_state->instruction_state.bo = NULL; > > - } > > - > > - if (render_state->dynamic_state.bo) { > > - dri_bo_unreference(render_state->dynamic_state.bo); > > - render_state->dynamic_state.bo = NULL; > > - } > > - > > - if (render_state->indirect_state.bo) { > > - dri_bo_unreference(render_state->indirect_state.bo); > > - render_state->indirect_state.bo = NULL; > > - } > > - > > - if (render_state->draw_region) { > > - dri_bo_unreference(render_state->draw_region->bo); > > - free(render_state->draw_region); > > - render_state->draw_region = NULL; > > - } > > -} > > - > > diff --git a/src/i965_device_info.c b/src/i965_device_info.c > > index 6d7a87e..d9b860a 100644 > > --- a/src/i965_device_info.c > > +++ b/src/i965_device_info.c > > @@ -29,10 +29,14 @@ > > > > extern struct hw_context *i965_proc_context_init(VADriverContextP, struct > > object_config *); > > extern struct hw_context *g4x_dec_hw_context_init(VADriverContextP, struct > > object_config *); > > +extern bool genx_render_init(VADriverContextP); > > + > > static const struct hw_codec_info g4x_hw_codec_info = { > > .dec_hw_context_init = g4x_dec_hw_context_init, > > .enc_hw_context_init = NULL, > > .proc_hw_context_init = NULL, > > + .render_init = genx_render_init, > > + > > .max_width = 2048, > > .max_height = 2048, > > > > @@ -46,6 +50,8 @@ static const struct hw_codec_info ilk_hw_codec_info = { > > .dec_hw_context_init = ironlake_dec_hw_context_init, > > .enc_hw_context_init = NULL, > > .proc_hw_context_init = i965_proc_context_init, > > + .render_init = genx_render_init, > > + > > .max_width = 2048, > > .max_height = 2048, > > > > @@ -63,6 +69,8 @@ static const struct hw_codec_info snb_hw_codec_info = { > > .dec_hw_context_init = gen6_dec_hw_context_init, > > .enc_hw_context_init = gen6_enc_hw_context_init, > > .proc_hw_context_init = i965_proc_context_init, > > + .render_init = genx_render_init, > > + > > .max_width = 2048, > > .max_height = 2048, > > > > @@ -89,6 +97,8 @@ static const struct hw_codec_info ivb_hw_codec_info = { > > .dec_hw_context_init = gen7_dec_hw_context_init, > > .enc_hw_context_init = gen7_enc_hw_context_init, > > .proc_hw_context_init = i965_proc_context_init, > > + .render_init = genx_render_init, > > + > > .max_width = 4096, > > .max_height = 4096, > > > > @@ -119,6 +129,8 @@ static const struct hw_codec_info hsw_hw_codec_info = { > > .dec_hw_context_init = gen75_dec_hw_context_init, > > .enc_hw_context_init = gen75_enc_hw_context_init, > > .proc_hw_context_init = gen75_proc_context_init, > > + .render_init = genx_render_init, > > + > > .max_width = 4096, > > .max_height = 4096, > > > > @@ -154,6 +166,8 @@ static const struct hw_codec_info bdw_hw_codec_info = { > > .dec_hw_context_init = gen8_dec_hw_context_init, > > .enc_hw_context_init = gen8_enc_hw_context_init, > > .proc_hw_context_init = gen75_proc_context_init, > > + .render_init = gen8_render_init, > > + > > .max_width = 4096, > > .max_height = 4096, > > > > diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h > > index b976d33..ddc0388 100644 > > --- a/src/i965_drv_video.h > > +++ b/src/i965_drv_video.h > > @@ -286,6 +286,8 @@ struct hw_codec_info > > struct hw_context *(*dec_hw_context_init)(VADriverContextP, struct > > object_config *); > > struct hw_context *(*enc_hw_context_init)(VADriverContextP, struct > > object_config *); > > struct hw_context *(*proc_hw_context_init)(VADriverContextP, struct > > object_config *); > > + bool (*render_init)(VADriverContextP); > > + > > int max_width; > > int max_height; > > > > diff --git a/src/i965_render.c b/src/i965_render.c > > index 6b0cb19..aed78c0 100644 > > --- a/src/i965_render.c > > +++ b/src/i965_render.c > > @@ -3132,9 +3132,52 @@ intel_render_put_subpicture( > > render_state->render_put_subpicture(ctx, obj_surface, src_rect, > > dst_rect); > > } > > > > +static void > > +genx_render_terminate(VADriverContextP ctx) > > +{ > > + int i; > > + struct i965_driver_data *i965 = i965_driver_data(ctx); > > + struct i965_render_state *render_state = &i965->render_state; > > + > > + dri_bo_unreference(render_state->curbe.bo); > > + render_state->curbe.bo = NULL; > > + > > + for (i = 0; i < NUM_RENDER_KERNEL; i++) { > > + struct i965_kernel *kernel = &render_state->render_kernels[i]; > > + > > + dri_bo_unreference(kernel->bo); > > + kernel->bo = NULL; > > + } > > + > > + dri_bo_unreference(render_state->vb.vertex_buffer); > > + render_state->vb.vertex_buffer = NULL; > > + dri_bo_unreference(render_state->vs.state); > > + render_state->vs.state = NULL; > > + dri_bo_unreference(render_state->sf.state); > > + render_state->sf.state = NULL; > > + dri_bo_unreference(render_state->wm.sampler); > > + render_state->wm.sampler = NULL; > > + dri_bo_unreference(render_state->wm.state); > > + render_state->wm.state = NULL; > > + dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); > > + dri_bo_unreference(render_state->cc.viewport); > > + render_state->cc.viewport = NULL; > > + dri_bo_unreference(render_state->cc.state); > > + render_state->cc.state = NULL; > > + dri_bo_unreference(render_state->cc.blend); > > + render_state->cc.blend = NULL; > > + dri_bo_unreference(render_state->cc.depth_stencil); > > + render_state->cc.depth_stencil = NULL; > > + > > + if (render_state->draw_region) { > > + dri_bo_unreference(render_state->draw_region->bo); > > + free(render_state->draw_region); > > + render_state->draw_region = NULL; > > + } > > +} > > > > bool > > -i965_render_init(VADriverContextP ctx) > > +genx_render_init(VADriverContextP ctx) > > { > > struct i965_driver_data *i965 = i965_driver_data(ctx); > > struct i965_render_state *render_state = &i965->render_state; > > @@ -3146,9 +3189,7 @@ i965_render_init(VADriverContextP ctx) > > assert(NUM_RENDER_KERNEL == (sizeof(render_kernels_gen6) / > > sizeof(render_kernels_gen6[0]))); > > > > - if (IS_GEN8(i965->intel.device_info)) { > > - return gen8_render_init(ctx); > > - } else if (IS_GEN7(i965->intel.device_info)) { > > + if (IS_GEN7(i965->intel.device_info)) { > > memcpy(render_state->render_kernels, > > (IS_HASWELL(i965->intel.device_info) ? > > render_kernels_gen7_haswell : render_kernels_gen7), > > sizeof(render_state->render_kernels)); > > @@ -3168,6 +3209,8 @@ i965_render_init(VADriverContextP ctx) > > render_state->render_put_subpicture = i965_render_put_subpicture; > > } > > > > + render_state->render_terminate = genx_render_terminate; > > + > > for (i = 0; i < NUM_RENDER_KERNEL; i++) { > > struct i965_kernel *kernel = &render_state->render_kernels[i]; > > > > @@ -3190,52 +3233,19 @@ i965_render_init(VADriverContextP ctx) > > return true; > > } > > > > -void > > -i965_render_terminate(VADriverContextP ctx) > > +bool > > +i965_render_init(VADriverContextP ctx) > > { > > - int i; > > struct i965_driver_data *i965 = i965_driver_data(ctx); > > - struct i965_render_state *render_state = &i965->render_state; > > - > > - if (IS_GEN8(i965->intel.device_info)) { > > - gen8_render_terminate(ctx); > > - return; > > - } > > - > > - dri_bo_unreference(render_state->curbe.bo); > > - render_state->curbe.bo = NULL; > > > > - for (i = 0; i < NUM_RENDER_KERNEL; i++) { > > - struct i965_kernel *kernel = &render_state->render_kernels[i]; > > - > > - dri_bo_unreference(kernel->bo); > > - kernel->bo = NULL; > > - } > > + return i965->codec_info->render_init(ctx); > > +} > > > > - dri_bo_unreference(render_state->vb.vertex_buffer); > > - render_state->vb.vertex_buffer = NULL; > > - dri_bo_unreference(render_state->vs.state); > > - render_state->vs.state = NULL; > > - dri_bo_unreference(render_state->sf.state); > > - render_state->sf.state = NULL; > > - dri_bo_unreference(render_state->wm.sampler); > > - render_state->wm.sampler = NULL; > > - dri_bo_unreference(render_state->wm.state); > > - render_state->wm.state = NULL; > > - dri_bo_unreference(render_state->wm.surface_state_binding_table_bo); > > - dri_bo_unreference(render_state->cc.viewport); > > - render_state->cc.viewport = NULL; > > - dri_bo_unreference(render_state->cc.state); > > - render_state->cc.state = NULL; > > - dri_bo_unreference(render_state->cc.blend); > > - render_state->cc.blend = NULL; > > - dri_bo_unreference(render_state->cc.depth_stencil); > > - render_state->cc.depth_stencil = NULL; > > +void > > +i965_render_terminate(VADriverContextP ctx) > > +{ > > + struct i965_driver_data *i965 = i965_driver_data(ctx); > > + struct i965_render_state *render_state = &i965->render_state; > > > > - if (render_state->draw_region) { > > - dri_bo_unreference(render_state->draw_region->bo); > > - free(render_state->draw_region); > > - render_state->draw_region = NULL; > > - } > > + render_state->render_terminate(ctx); > > } > > - > > diff --git a/src/i965_render.h b/src/i965_render.h > > index afbce49..fde398b 100644 > > --- a/src/i965_render.h > > +++ b/src/i965_render.h > > @@ -123,7 +123,7 @@ struct i965_render_state > > void (*render_put_subpicture)(VADriverContextP ctx, struct > > object_surface *, > > const VARectangle *src_rec, > > const VARectangle *dst_rect); > > - > > + void (*render_terminate)(VADriverContextP ctx); > > }; > > > > bool i965_render_init(VADriverContextP ctx); > > @@ -157,6 +157,4 @@ gen8_render_set_surface_scs(struct gen8_surface_state > > *ss); > > > > extern bool gen8_render_init(VADriverContextP ctx); > > > > -extern void gen8_render_terminate(VADriverContextP ctx); > > - > > #endif /* _I965_RENDER_H_ */ > > -- > > 1.8.3.2 > > > > _______________________________________________ > > Libva mailing list > > Libva@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/libva _______________________________________________ Libva mailing list Libva@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libva