summaryrefslogtreecommitdiff
path: root/src/gen6_vme.c
diff options
context:
space:
mode:
authorXiang, Haihao <haihao.xiang@intel.com>2012-11-01 09:39:29 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2012-11-01 09:39:29 +0800
commit1e14a7ae9469544a99c4be9155c061003255c71f (patch)
treedbc7b9ab4116d1ecc8411cafd26ea692c72f2c04 /src/gen6_vme.c
parent984491249fcf79c3ed6b61379447a221313437d7 (diff)
downloadlibva-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.c58
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);