diff options
author | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2014-05-09 15:08:05 +0200 |
---|---|---|
committer | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2014-06-06 01:20:11 +0200 |
commit | a8d6381cd879a100e80f457086214325b92d531e (patch) | |
tree | a5f2bb939cf5aab9d1391b107569157fce60e202 | |
parent | a6d5f93380576c1188e22e267ee778f0398711ee (diff) |
surface: drop SURFACE_DISPLAYED flag.16.h264.mvc-r6
The optimization by which the VA surface storage is deallocated after
it is displayed and not used for reference or vaDeriveImage() purposes
cannot be implemented safely. We need to honour explicit lifetimes
defined by the upper codec layer.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
-rwxr-xr-x | src/gen6_mfd.c | 6 | ||||
-rw-r--r-- | src/gen75_mfd.c | 6 | ||||
-rwxr-xr-x | src/gen7_mfd.c | 6 | ||||
-rw-r--r-- | src/gen8_mfd.c | 6 | ||||
-rw-r--r-- | src/i965_avc_bsd.c | 6 | ||||
-rw-r--r-- | src/i965_drv_video.h | 4 | ||||
-rw-r--r-- | src/i965_output_dri.c | 1 |
7 files changed, 20 insertions, 15 deletions
diff --git a/src/gen6_mfd.c b/src/gen6_mfd.c index 01f8390..ebf13e5 100755 --- a/src/gen6_mfd.c +++ b/src/gen6_mfd.c @@ -831,8 +831,10 @@ gen6_mfd_avc_decode_init(VADriverContextP ctx, /* Current decoded picture */ obj_surface = decode_state->render_object; - obj_surface->flags &= ~SURFACE_REF_DIS_MASK; - obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0); + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; avc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); gen6_mfd_init_avc_surface(ctx, pic_param, obj_surface); diff --git a/src/gen75_mfd.c b/src/gen75_mfd.c index c118914..2ebc25b 100644 --- a/src/gen75_mfd.c +++ b/src/gen75_mfd.c @@ -1052,8 +1052,10 @@ gen75_mfd_avc_decode_init(VADriverContextP ctx, /* Current decoded picture */ obj_surface = decode_state->render_object; - obj_surface->flags &= ~SURFACE_REF_DIS_MASK; - obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0); + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; avc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); gen75_mfd_init_avc_surface(ctx, pic_param, obj_surface); diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c index 41b5016..fab83e7 100755 --- a/src/gen7_mfd.c +++ b/src/gen7_mfd.c @@ -749,8 +749,10 @@ gen7_mfd_avc_decode_init(VADriverContextP ctx, /* Current decoded picture */ obj_surface = decode_state->render_object; - obj_surface->flags &= ~SURFACE_REF_DIS_MASK; - obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0); + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; avc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); gen7_mfd_init_avc_surface(ctx, pic_param, obj_surface); diff --git a/src/gen8_mfd.c b/src/gen8_mfd.c index 88dce7e..3800fd2 100644 --- a/src/gen8_mfd.c +++ b/src/gen8_mfd.c @@ -812,8 +812,10 @@ gen8_mfd_avc_decode_init(VADriverContextP ctx, /* Current decoded picture */ obj_surface = decode_state->render_object; - obj_surface->flags &= ~SURFACE_REF_DIS_MASK; - obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0); + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; avc_ensure_surface_bo(ctx, decode_state, obj_surface, pic_param); gen8_mfd_init_avc_surface(ctx, pic_param, obj_surface); diff --git a/src/i965_avc_bsd.c b/src/i965_avc_bsd.c index aa95400..09f7591 100644 --- a/src/i965_avc_bsd.c +++ b/src/i965_avc_bsd.c @@ -433,8 +433,10 @@ i965_avc_bsd_buf_base_state(VADriverContextP ctx, va_pic = &pic_param->CurrPic; obj_surface = decode_state->render_object; - obj_surface->flags &= ~SURFACE_REF_DIS_MASK; - obj_surface->flags |= (pic_param->pic_fields.bits.reference_pic_flag ? SURFACE_REFERENCED : 0); + if (pic_param->pic_fields.bits.reference_pic_flag) + obj_surface->flags |= SURFACE_REFERENCED; + else + obj_surface->flags &= ~SURFACE_REFERENCED; i965_check_alloc_surface_bo(ctx, obj_surface, 0, VA_FOURCC_NV12, SUBSAMPLE_YUV420); /* initial uv component for YUV400 case */ diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h index 568d05d..444096d 100644 --- a/src/i965_drv_video.h +++ b/src/i965_drv_video.h @@ -202,12 +202,8 @@ struct object_context }; #define SURFACE_REFERENCED (1 << 0) -#define SURFACE_DISPLAYED (1 << 1) #define SURFACE_DERIVED (1 << 2) -#define SURFACE_REF_DIS_MASK ((SURFACE_REFERENCED) | \ - (SURFACE_DISPLAYED)) #define SURFACE_ALL_MASK ((SURFACE_REFERENCED) | \ - (SURFACE_DISPLAYED) | \ (SURFACE_DERIVED)) struct object_surface diff --git a/src/i965_output_dri.c b/src/i965_output_dri.c index 8102e83..57cd712 100644 --- a/src/i965_output_dri.c +++ b/src/i965_output_dri.c @@ -206,7 +206,6 @@ i965_put_surface_dri( if (!getenv("INTEL_DEBUG_BENCH")) dri_vtable->swap_buffer(ctx, dri_drawable); - obj_surface->flags |= SURFACE_DISPLAYED; _i965UnlockMutex(&i965->render_mutex); |