diff options
author | Xiang, Haihao <haihao.xiang@intel.com> | 2012-11-01 09:39:29 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2012-11-01 09:39:29 +0800 |
commit | 1e14a7ae9469544a99c4be9155c061003255c71f (patch) | |
tree | dbc7b9ab4116d1ecc8411cafd26ea692c72f2c04 /src/gen6_vme.c | |
parent | 984491249fcf79c3ed6b61379447a221313437d7 (diff) | |
download | libva-intel-driver-1e14a7ae9469544a99c4be9155c061003255c71f.tar.gz |
Encoding: modify function to fill command into a specified batch buffer
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
Diffstat (limited to 'src/gen6_vme.c')
-rw-r--r-- | src/gen6_vme.c | 58 |
1 files changed, 40 insertions, 18 deletions
diff --git a/src/gen6_vme.c b/src/gen6_vme.c index 2ffbd43f..1b495ff4 100644 --- a/src/gen6_vme.c +++ b/src/gen6_vme.c @@ -672,19 +672,26 @@ static VAStatus gen6_vme_vme_state_setup(VADriverContextP ctx, return VA_STATUS_SUCCESS; } -static void gen6_vme_pipeline_select(VADriverContextP ctx, struct gen6_encoder_context *gen6_encoder_context) +static void gen6_vme_pipeline_select(VADriverContextP ctx, + struct gen6_encoder_context *gen6_encoder_context, + struct intel_batchbuffer *batch) { - struct intel_batchbuffer *batch = gen6_encoder_context->base.batch; + if (batch == NULL) + batch = gen6_encoder_context->base.batch; BEGIN_BATCH(batch, 1); OUT_BATCH(batch, CMD_PIPELINE_SELECT | PIPELINE_SELECT_MEDIA); ADVANCE_BATCH(batch); } -static void gen6_vme_state_base_address(VADriverContextP ctx, struct gen6_encoder_context *gen6_encoder_context) +static void gen6_vme_state_base_address(VADriverContextP ctx, + struct gen6_encoder_context *gen6_encoder_context, + struct intel_batchbuffer *batch) { struct gen6_vme_context *vme_context = &gen6_encoder_context->vme_context; - struct intel_batchbuffer *batch = gen6_encoder_context->base.batch; + + if (batch == NULL) + batch = gen6_encoder_context->base.batch; BEGIN_BATCH(batch, 10); @@ -709,11 +716,15 @@ static void gen6_vme_state_base_address(VADriverContextP ctx, struct gen6_encode ADVANCE_BATCH(batch); } -static void gen6_vme_vfe_state(VADriverContextP ctx, struct gen6_encoder_context *gen6_encoder_context) +static void gen6_vme_vfe_state(VADriverContextP ctx, + struct gen6_encoder_context *gen6_encoder_context, + struct intel_batchbuffer *batch) { - struct intel_batchbuffer *batch = gen6_encoder_context->base.batch; struct gen6_vme_context *vme_context = &gen6_encoder_context->vme_context; + if (batch == NULL) + batch = gen6_encoder_context->base.batch; + BEGIN_BATCH(batch, 8); OUT_BATCH(batch, CMD_MEDIA_VFE_STATE | 6); /*Gen6 CMD_MEDIA_STATE_POINTERS = CMD_MEDIA_STATE */ @@ -732,11 +743,15 @@ static void gen6_vme_vfe_state(VADriverContextP ctx, struct gen6_encoder_context } -static void gen6_vme_curbe_load(VADriverContextP ctx, struct gen6_encoder_context *gen6_encoder_context) +static void gen6_vme_curbe_load(VADriverContextP ctx, + struct gen6_encoder_context *gen6_encoder_context, + struct intel_batchbuffer *batch) { - struct intel_batchbuffer *batch = gen6_encoder_context->base.batch; struct gen6_vme_context *vme_context = &gen6_encoder_context->vme_context; + if (batch == NULL) + batch = gen6_encoder_context->base.batch; + BEGIN_BATCH(batch, 4); OUT_BATCH(batch, CMD_MEDIA_CURBE_LOAD | 2); @@ -748,11 +763,15 @@ static void gen6_vme_curbe_load(VADriverContextP ctx, struct gen6_encoder_contex ADVANCE_BATCH(batch); } -static void gen6_vme_idrt(VADriverContextP ctx, struct gen6_encoder_context *gen6_encoder_context) +static void gen6_vme_idrt(VADriverContextP ctx, + struct gen6_encoder_context *gen6_encoder_context, + struct intel_batchbuffer *batch) { - struct intel_batchbuffer *batch = gen6_encoder_context->base.batch; struct gen6_vme_context *vme_context = &gen6_encoder_context->vme_context; + if (batch == NULL) + batch = gen6_encoder_context->base.batch; + BEGIN_BATCH(batch, 4); OUT_BATCH(batch, CMD_MEDIA_INTERFACE_LOAD | 2); @@ -767,14 +786,17 @@ static int gen6_vme_media_object(VADriverContextP ctx, struct encode_state *encode_state, int mb_x, int mb_y, int kernel, - struct gen6_encoder_context *gen6_encoder_context) + struct gen6_encoder_context *gen6_encoder_context, + struct intel_batchbuffer *batch) { struct i965_driver_data *i965 = i965_driver_data(ctx); - struct intel_batchbuffer *batch = gen6_encoder_context->base.batch; struct object_surface *obj_surface = SURFACE(encode_state->current_render_target); int mb_width = ALIGN(obj_surface->orig_width, 16) / 16; int len_in_dowrds = 6 + 1; + if (batch == NULL) + batch = gen6_encoder_context->base.batch; + BEGIN_BATCH(batch, len_in_dowrds); OUT_BATCH(batch, CMD_MEDIA_OBJECT | (len_in_dowrds - 2)); @@ -863,19 +885,19 @@ static void gen6_vme_pipeline_programing(VADriverContextP ctx, intel_batchbuffer_emit_mi_flush(batch); /*Step2: State command PIPELINE_SELECT*/ - gen6_vme_pipeline_select(ctx, gen6_encoder_context); + gen6_vme_pipeline_select(ctx, gen6_encoder_context, batch); /*Step3: State commands configuring pipeline states*/ - gen6_vme_state_base_address(ctx, gen6_encoder_context); - gen6_vme_vfe_state(ctx, gen6_encoder_context); - gen6_vme_curbe_load(ctx, gen6_encoder_context); - gen6_vme_idrt(ctx, gen6_encoder_context); + gen6_vme_state_base_address(ctx, gen6_encoder_context, batch); + gen6_vme_vfe_state(ctx, gen6_encoder_context, batch); + gen6_vme_curbe_load(ctx, gen6_encoder_context, batch); + gen6_vme_idrt(ctx, gen6_encoder_context, batch); emit_new_state = 0; } /*Step4: Primitive commands*/ - object_len_in_bytes = gen6_vme_media_object(ctx, encode_state, x, y, is_intra ? VME_INTRA_SHADER : VME_INTER_SHADER, gen6_encoder_context); + object_len_in_bytes = gen6_vme_media_object(ctx, encode_state, x, y, is_intra ? VME_INTRA_SHADER : VME_INTER_SHADER, gen6_encoder_context, batch); if (intel_batchbuffer_check_free_space(batch, object_len_in_bytes) == 0) { assert(0); |