summaryrefslogtreecommitdiff
path: root/i965_drv_video/gen6_vme.c
diff options
context:
space:
mode:
authorXiang, Haihao <haihao.xiang@intel.com>2011-04-22 09:43:11 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2011-04-22 09:43:11 +0800
commitecfc3b45e364ecb6ff8327e3b13ddf7e298e3169 (patch)
treecba7e660bca835f71fd07a0cb3016a5fbaf10874 /i965_drv_video/gen6_vme.c
parent2c52a0083ba94e89fc3d78195b918765e45dc806 (diff)
downloadlibva-ecfc3b45e364ecb6ff8327e3b13ddf7e298e3169.tar.gz
i965_drv_video/encode: merge the object command for intra/inter frame
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
Diffstat (limited to 'i965_drv_video/gen6_vme.c')
-rw-r--r--i965_drv_video/gen6_vme.c43
1 files changed, 7 insertions, 36 deletions
diff --git a/i965_drv_video/gen6_vme.c b/i965_drv_video/gen6_vme.c
index c7b4aa9..ccf26bc 100644
--- a/i965_drv_video/gen6_vme.c
+++ b/i965_drv_video/gen6_vme.c
@@ -519,10 +519,11 @@ static void gen6_vme_idrt(VADriverContextP ctx)
ADVANCE_BATCH(ctx);
}
-static int gen6_vme_media_object_intra(VADriverContextP ctx,
- VAContextID context,
- struct mfc_encode_state *encode_state,
- int mb_x, int mb_y)
+static int gen6_vme_media_object(VADriverContextP ctx,
+ VAContextID context,
+ struct mfc_encode_state *encode_state,
+ int mb_x, int mb_y,
+ int kernel)
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct object_surface *obj_surface = SURFACE( encode_state->current_render_target);
@@ -532,7 +533,7 @@ static int gen6_vme_media_object_intra(VADriverContextP ctx,
BEGIN_BATCH(ctx, len_in_dowrds);
OUT_BATCH(ctx, CMD_MEDIA_OBJECT | (len_in_dowrds - 2));
- OUT_BATCH(ctx, VME_INTRA_SHADER); /*Interface Descriptor Offset*/
+ OUT_BATCH(ctx, kernel); /*Interface Descriptor Offset*/
OUT_BATCH(ctx, 0);
OUT_BATCH(ctx, 0);
OUT_BATCH(ctx, 0);
@@ -545,32 +546,6 @@ static int gen6_vme_media_object_intra(VADriverContextP ctx,
return len_in_dowrds * 4;
}
-static int gen6_vme_media_object_inter(VADriverContextP ctx,
- VAContextID context,
- struct mfc_encode_state *encode_state,
- int mb_x, int mb_y)
-{
- struct i965_driver_data *i965 = i965_driver_data(ctx);
- 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;
-
- BEGIN_BATCH(ctx, len_in_dowrds);
-
- OUT_BATCH(ctx, CMD_MEDIA_OBJECT | (len_in_dowrds - 2));
- OUT_BATCH(ctx, VME_INTER_SHADER); /*Interface Descriptor Offset*/
- OUT_BATCH(ctx, 0);
- OUT_BATCH(ctx, 0);
- OUT_BATCH(ctx, 0);
- OUT_BATCH(ctx, 0);
-
- /*inline data */
- OUT_BATCH(ctx, mb_width << 16 | mb_y << 8 | mb_x);
- ADVANCE_BATCH(ctx);
-
- return len_in_dowrds * 4;
-}
-
static void gen6_vme_media_init(VADriverContextP ctx)
{
int i;
@@ -667,11 +642,7 @@ static void gen6_vme_pipeline_programing(VADriverContextP ctx,
}
/*Step4: Primitive commands*/
- if ( is_intra ) {
- object_len_in_bytes = gen6_vme_media_object_intra(ctx, context, encode_state, x, y);
- } else {
- object_len_in_bytes = gen6_vme_media_object_inter(ctx, context, encode_state, x, y);
- }
+ object_len_in_bytes = gen6_vme_media_object(ctx, context, encode_state, x, y, is_intra ? VME_INTRA_SHADER : VME_INTER_SHADER);
if (intel_batchbuffer_check_free_space(ctx, object_len_in_bytes) == 0) {
intel_batchbuffer_end_atomic(ctx);