[Libva] [LIBVA_INTEL_DRIVER][PATCH 3/3] Rewrite Media_kernel to optimize the YUV420 8Bit-scaling on Gen8

Xiang, Haihao haihao.xiang at intel.com
Fri Nov 25 08:53:08 UTC 2016


LGTM.

> The following conversion is supported:
> NV12->NV12
> NV12->I420
> I420->NV12
> I420->I420
> 
> Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
> ---
>  src/gen8_post_processing.c                     | 450
> +++++++++++++++++++++++++
>  src/intel_common_vpp_internal.c                |  10 +-
>  src/intel_common_vpp_internal.h                |   9 +
>  src/shaders/post_processing/gen8/Makefile.am   |   3 +-
>  src/shaders/post_processing/gen8/conv_nv12.g8b | 362
> ++++++++++++++++++++
>  5 files changed, 832 insertions(+), 2 deletions(-)
>  create mode 100644 src/shaders/post_processing/gen8/conv_nv12.g8b
> 
> diff --git a/src/gen8_post_processing.c b/src/gen8_post_processing.c
> index a70814c..db15894 100644
> --- a/src/gen8_post_processing.c
> +++ b/src/gen8_post_processing.c
> @@ -43,6 +43,7 @@
>  #include "intel_media.h"
>  
>  #include "gen75_picture_process.h"
> +#include "intel_common_vpp_internal.h"
>  
>  #define
> SURFACE_STATE_PADDED_SIZE               SURFACE_STATE_PADDED_SIZE_GEN
> 8
>  
> @@ -319,6 +320,14 @@ static struct pp_module pp_modules_gen8[] = {
>      },
>  };
>  
> +#define MAX_SCALING_SURFACES    16
> +
> +#define DEFAULT_MOCS    0
> +
> +static const uint32_t pp_yuv420p8_scaling_gen8[][4] = {
> +#include "shaders/post_processing/gen8/conv_nv12.g8b"
> +};
> +
>  static int
>  pp_get_surface_fourcc(VADriverContextP ctx, const struct
> i965_surface *surface)
>  {
> @@ -1675,8 +1684,449 @@
> gen8_post_processing_context_init(VADriverContextP ctx,
>                                    void *data,
>                                    struct intel_batchbuffer *batch)
>  {
> +    struct i965_driver_data *i965 = i965_driver_data(ctx);
>      struct i965_post_processing_context *pp_context = data;
> +    struct i965_gpe_context *gpe_context;
> +    struct i965_kernel scaling_kernel;
>  
>      gen8_post_processing_context_common_init(ctx, data,
> pp_modules_gen8, ARRAY_ELEMS(pp_modules_gen8), batch);
>      avs_init_state(&pp_context->pp_avs_context.state,
> &gen8_avs_config);
> +
> +    /* initialize the YUV420 8-Bit scaling context. The below is
> supported.
> +     * NV12 ->NV12
> +     * NV12 ->I420
> +     * I420 ->I420
> +     * I420 ->NV12
> +     */
> +    gpe_context = &pp_context->scaling_yuv420p8_context;
> +    memset(&scaling_kernel, 0, sizeof(scaling_kernel));
> +    scaling_kernel.bin = pp_yuv420p8_scaling_gen8;
> +    scaling_kernel.size = sizeof(pp_yuv420p8_scaling_gen8);
> +    gen8_gpe_load_kernels(ctx, gpe_context, &scaling_kernel, 1);
> +    gpe_context->idrt.entry_size = ALIGN(sizeof(struct
> gen8_interface_descriptor_data), 64);
> +    gpe_context->idrt.max_entries = 1;
> +    gpe_context->sampler.entry_size = ALIGN(sizeof(struct
> gen8_sampler_state), 64);
> +    gpe_context->sampler.max_entries = 1;
> +    gpe_context->curbe.length = ALIGN(sizeof(struct
> scaling_input_parameter), 32);
> +
> +    gpe_context->surface_state_binding_table.max_entries =
> MAX_SCALING_SURFACES;
> +    gpe_context->surface_state_binding_table.binding_table_offset =
> 0;
> +    gpe_context->surface_state_binding_table.surface_state_offset =
> ALIGN(MAX_SCALING_SURFACES * 4, 64);
> +    gpe_context->surface_state_binding_table.length =
> ALIGN(MAX_SCALING_SURFACES * 4, 64) + ALIGN(MAX_SCALING_SURFACES *
> SURFACE_STATE_PADDED_SIZE_GEN8, 64);
> +
> +    if (i965->intel.eu_total > 0) {
> +        gpe_context->vfe_state.max_num_threads = i965-
> >intel.eu_total * 6;
> +    } else {
> +        if (i965->intel.has_bsd2)
> +            gpe_context->vfe_state.max_num_threads = 300;
> +        else
> +            gpe_context->vfe_state.max_num_threads = 60;
> +    }
> +
> +    gpe_context->vfe_state.curbe_allocation_size = 37;
> +    gpe_context->vfe_state.urb_entry_size = 16;
> +    if (i965->intel.has_bsd2)
> +        gpe_context->vfe_state.num_urb_entries = 127;
> +    else
> +        gpe_context->vfe_state.num_urb_entries = 64;
> +
> +    gpe_context->vfe_state.gpgpu_mode = 0;
> +
> +    gen8_gpe_context_init(ctx, gpe_context);
> +    pp_context->scaling_8bit_initialized = VPPGPE_8BIT_420;
> +    return;
> +}
> +
> +static void
> +gen8_run_kernel_media_object_walker(VADriverContextP ctx,
> +                                    struct intel_batchbuffer *batch,
> +                                    struct i965_gpe_context
> *gpe_context,
> +                                    struct
> gpe_media_object_walker_parameter *param)
> +{
> +    if (!batch || !gpe_context || !param)
> +        return;
> +
> +    intel_batchbuffer_start_atomic(batch, 0x1000);
> +
> +    intel_batchbuffer_emit_mi_flush(batch);
> +
> +    gen8_gpe_pipeline_setup(ctx, gpe_context, batch);
> +    gen8_gpe_media_object_walker(ctx, gpe_context, batch, param);
> +    gen8_gpe_media_state_flush(ctx, gpe_context, batch);
> +
> +
> +    intel_batchbuffer_end_atomic(batch);
> +
> +    intel_batchbuffer_flush(batch);
> +    return;
> +}
> +
> +static void
> +gen8_add_dri_buffer_2d_gpe_surface(VADriverContextP ctx,
> +                                   struct i965_gpe_context
> *gpe_context,
> +                                   dri_bo *bo,
> +                                   unsigned int bo_offset,
> +                                   unsigned int width,
> +                                   unsigned int height,
> +                                   unsigned int pitch,
> +                                   int is_media_block_rw,
> +                                   unsigned int format,
> +                                   int index,
> +                                   int is_10bit)
> +{
> +    struct i965_gpe_resource gpe_resource;
> +    struct i965_gpe_surface gpe_surface;
> +
> +    i965_dri_object_to_2d_gpe_resource(&gpe_resource, bo, width,
> height, pitch);
> +    memset(&gpe_surface, 0, sizeof(gpe_surface));
> +    gpe_surface.gpe_resource = &gpe_resource;
> +    gpe_surface.is_2d_surface = 1;
> +    gpe_surface.is_media_block_rw = !!is_media_block_rw;
> +    gpe_surface.cacheability_control = DEFAULT_MOCS;
> +    gpe_surface.format = format;
> +    gpe_surface.is_override_offset = 1;
> +    gpe_surface.offset = bo_offset;
> +    gpe_surface.is_16bpp = is_10bit;
> +
> +    gen9_gpe_context_add_surface(gpe_context, &gpe_surface, index);
> +
> +    i965_free_gpe_resource(&gpe_resource);
> +}
> +
> +static void
> +gen8_vpp_scaling_sample_state(VADriverContextP ctx,
> +                               struct i965_gpe_context *gpe_context,
> +                               VARectangle *src_rect,
> +                               VARectangle *dst_rect)
> +{
> +    struct gen8_sampler_state *sampler_state;
> +
> +    if (gpe_context == NULL || !src_rect || !dst_rect)
> +        return;
> +    dri_bo_map(gpe_context->sampler.bo, 1);
> +
> +    if (gpe_context->sampler.bo->virtual == NULL)
> +        return;
> +
> +    assert(gpe_context->sampler.bo->virtual);
> +
> +    sampler_state = (struct gen8_sampler_state *)
> +       (gpe_context->sampler.bo->virtual + gpe_context-
> >sampler.offset);
> +
> +    memset(sampler_state, 0, sizeof(*sampler_state));
> +
> +    if ((src_rect->width == dst_rect->width) &&
> +        (src_rect->height == dst_rect->height)) {
> +        sampler_state->ss0.min_filter = I965_MAPFILTER_NEAREST;
> +        sampler_state->ss0.mag_filter = I965_MAPFILTER_NEAREST;
> +    } else {
> +        sampler_state->ss0.min_filter = I965_MAPFILTER_LINEAR;
> +        sampler_state->ss0.mag_filter = I965_MAPFILTER_LINEAR;
> +    }
> +
> +    sampler_state->ss3.r_wrap_mode = I965_TEXCOORDMODE_CLAMP;
> +    sampler_state->ss3.s_wrap_mode = I965_TEXCOORDMODE_CLAMP;
> +    sampler_state->ss3.t_wrap_mode = I965_TEXCOORDMODE_CLAMP;
> +
> +    dri_bo_unmap(gpe_context->sampler.bo);
> +}
> +
> +static void
> +gen8_gpe_context_yuv420p8_scaling_curbe(VADriverContextP ctx,
> +                               struct i965_gpe_context *gpe_context,
> +                               VARectangle *src_rect,
> +                               struct i965_surface *src_surface,
> +                               VARectangle *dst_rect,
> +                               struct i965_surface *dst_surface)
> +{
> +    struct scaling_input_parameter *scaling_curbe;
> +    float src_width, src_height;
> +    float coeff;
> +    unsigned int fourcc;
> +
> +    if ((gpe_context == NULL) ||
> +        (src_rect == NULL) || (src_surface == NULL) ||
> +        (dst_rect == NULL) || (dst_surface == NULL))
> +        return;
> +
> +    scaling_curbe = i965_gpe_context_map_curbe(gpe_context);
> +
> +    if (!scaling_curbe)
> +        return;
> +
> +    memset(scaling_curbe, 0, sizeof(struct
> scaling_input_parameter));
> +
> +    scaling_curbe->bti_input = BTI_SCALING_INPUT_Y;
> +    scaling_curbe->bti_output = BTI_SCALING_OUTPUT_Y;
> +
> +    /* As the src_rect/dst_rect is already checked, it is skipped.*/
> +    scaling_curbe->x_dst     = dst_rect->x;
> +    scaling_curbe->y_dst     = dst_rect->y;
> +
> +    src_width = src_rect->x + src_rect->width;
> +    src_height = src_rect->y + src_rect->height;
> +
> +    scaling_curbe->inv_width = 1 / src_width;
> +    scaling_curbe->inv_height = 1 / src_height;
> +
> +    coeff = (float) (src_rect->width) / dst_rect->width;
> +    scaling_curbe->x_factor = coeff / src_width;
> +    scaling_curbe->x_orig = (float)(src_rect->x) / src_width;
> +
> +    coeff = (float) (src_rect->height) / dst_rect->height;
> +    scaling_curbe->y_factor = coeff / src_height;
> +    scaling_curbe->y_orig = (float)(src_rect->y) / src_height;
> +
> +    fourcc = pp_get_surface_fourcc(ctx, src_surface);
> +    if (fourcc == VA_FOURCC_NV12) {
> +        scaling_curbe->dw7.src_packed = 1;
> +    }
> +
> +    fourcc = pp_get_surface_fourcc(ctx, dst_surface);
> +
> +    if (fourcc == VA_FOURCC_NV12) {
> +        scaling_curbe->dw7.dst_packed = 1;
> +    }
> +
> +    i965_gpe_context_unmap_curbe(gpe_context);
> +}
> +
> +static bool
> +gen8_pp_context_get_surface_conf(VADriverContextP ctx,
> +                                 struct i965_surface *surface,
> +                                 VARectangle *rect,
> +                                 int *width,
> +                                 int *height,
> +                                 int *pitch,
> +                                 int *bo_offset)
> +{
> +    unsigned int fourcc;
> +    if (!rect || !surface || !width || !height || !pitch ||
> !bo_offset)
> +        return false;
> +
> +    if (surface->base == NULL)
> +        return false;
> +
> +    fourcc = pp_get_surface_fourcc(ctx, surface);
> +    if (surface->type == I965_SURFACE_TYPE_SURFACE) {
> +        struct object_surface *obj_surface;
> +
> +        obj_surface = (struct object_surface *)surface->base;
> +        width[0] = MIN(rect->x + rect->width, obj_surface-
> >orig_width);
> +        height[0] = MIN(rect->y + rect->height, obj_surface-
> >orig_height);
> +        pitch[0] = obj_surface->width;
> +        bo_offset[0] = 0;
> +
> +        if (fourcc == VA_FOURCC_P010 || fourcc == VA_FOURCC_NV12) {
> +            width[1] = width[0] / 2;
> +            height[1] = height[0] / 2;
> +            pitch[1] = obj_surface->cb_cr_pitch;
> +            bo_offset[1] = obj_surface->width * obj_surface-
> >y_cb_offset;
> +        } else {
> +            /* I010/I420 format */
> +            width[1] = width[0] / 2;
> +            height[1] = height[0] / 2;
> +            pitch[1] = obj_surface->cb_cr_pitch;
> +            bo_offset[1] = obj_surface->width * obj_surface-
> >y_cb_offset;
> +            width[2] = width[0] / 2;
> +            height[2] = height[0] / 2;
> +            pitch[2] = obj_surface->cb_cr_pitch;
> +            bo_offset[2] = obj_surface->width * obj_surface-
> >y_cr_offset;
> +        }
> +
> +    } else {
> +        struct object_image *obj_image;
> +
> +        obj_image = (struct object_image *)surface->base;
> +
> +        width[0] = MIN(rect->x + rect->width, obj_image-
> >image.width);
> +        height[0] = MIN(rect->y + rect->height, obj_image-
> >image.height);
> +        pitch[0] = obj_image->image.pitches[0];
> +        bo_offset[0] = obj_image->image.offsets[0];
> +
> +        if (fourcc == VA_FOURCC_P010 || fourcc == VA_FOURCC_NV12) {
> +            width[1] = width[0] / 2;
> +            height[1] = height[0] / 2;
> +            pitch[1] = obj_image->image.pitches[1];
> +            bo_offset[1] = obj_image->image.offsets[1];
> +        } else {
> +            /* I010/I420 format */
> +            /* YV12 is TBD */
> +            width[1] = width[0] / 2;
> +            height[1] = height[0] / 2;
> +            pitch[1] = obj_image->image.pitches[1];
> +            bo_offset[1] = obj_image->image.offsets[1];
> +            width[2] = width[0] / 2;
> +            height[2] = height[0] / 2;
> +            pitch[2] = obj_image->image.pitches[2];
> +            bo_offset[2] = obj_image->image.offsets[2];
> +        }
> +
> +    }
> +    return true;
> +}
> +
> +static void
> +gen8_gpe_context_yuv420p8_scaling_surfaces(VADriverContextP ctx,
> +                               struct i965_gpe_context *gpe_context,
> +                               VARectangle *src_rect,
> +                               struct i965_surface *src_surface,
> +                               VARectangle *dst_rect,
> +                               struct i965_surface *dst_surface)
> +{
> +    unsigned int fourcc;
> +    int width[3], height[3], pitch[3], bo_offset[3];
> +    dri_bo *bo;
> +    struct object_surface *obj_surface;
> +    struct object_image *obj_image;
> +    int bti;
> +
> +    if ((gpe_context == NULL) ||
> +        (src_rect == NULL) || (src_surface == NULL) ||
> +        (dst_rect == NULL) || (dst_surface == NULL))
> +        return;
> +
> +    if (src_surface->base == NULL || dst_surface->base == NULL)
> +        return;
> +
> +    fourcc = pp_get_surface_fourcc(ctx, src_surface);
> +
> +    if (src_surface->type == I965_SURFACE_TYPE_SURFACE) {
> +        obj_surface = (struct object_surface *)src_surface->base;
> +        bo = obj_surface->bo;
> +    } else {
> +        obj_image = (struct object_image *)src_surface->base;
> +        bo = obj_image->bo;
> +    }
> +
> +    bti = 0;
> +    if (gen8_pp_context_get_surface_conf(ctx, src_surface, src_rect,
> +                                         width, height, pitch,
> +                                         bo_offset)) {
> +        bti = BTI_SCALING_INPUT_Y;
> +        /* Input surface */
> +        gen8_add_dri_buffer_2d_gpe_surface(ctx, gpe_context, bo,
> +                                           bo_offset[0],
> +                                           width[0], height[0],
> +                                           pitch[0], 0,
> +                                           I965_SURFACEFORMAT_R8_UNO
> RM,
> +                                           bti, 0);
> +        if (fourcc == VA_FOURCC_NV12) {
> +            gen8_add_dri_buffer_2d_gpe_surface(ctx, gpe_context, bo,
> +                                           bo_offset[1],
> +                                           width[1], height[1],
> +                                           pitch[1], 0,
> +                                           I965_SURFACEFORMAT_R8G8_U
> NORM,
> +                                           bti + 1, 0);
> +        } else {
> +            gen8_add_dri_buffer_2d_gpe_surface(ctx, gpe_context, bo,
> +                                           bo_offset[1],
> +                                           width[1], height[1],
> +                                           pitch[1], 0,
> +                                           I965_SURFACEFORMAT_R8_UNO
> RM,
> +                                           bti + 1, 0);
> +
> +            gen8_add_dri_buffer_2d_gpe_surface(ctx, gpe_context, bo,
> +                                           bo_offset[2],
> +                                           width[2], height[2],
> +                                           pitch[2], 0,
> +                                           I965_SURFACEFORMAT_R8_UNO
> RM,
> +                                           bti + 2, 0);
> +        }
> +    }
> +
> +    fourcc = pp_get_surface_fourcc(ctx, dst_surface);
> +
> +    if (dst_surface->type == I965_SURFACE_TYPE_SURFACE) {
> +        obj_surface = (struct object_surface *)dst_surface->base;
> +        bo = obj_surface->bo;
> +    } else {
> +        obj_image = (struct object_image *)dst_surface->base;
> +        bo = obj_image->bo;
> +    }
> +
> +    if (gen8_pp_context_get_surface_conf(ctx, dst_surface, dst_rect,
> +                                         width, height, pitch,
> +                                         bo_offset)) {
> +        bti = BTI_SCALING_OUTPUT_Y;
> +        /* Input surface */
> +        gen8_add_dri_buffer_2d_gpe_surface(ctx, gpe_context, bo,
> +                                           bo_offset[0],
> +                                           width[0], height[0],
> +                                           pitch[0], 1,
> +                                           I965_SURFACEFORMAT_R8_UIN
> T,
> +                                           bti, 0);
> +        if (fourcc == VA_FOURCC_NV12) {
> +            gen8_add_dri_buffer_2d_gpe_surface(ctx, gpe_context, bo,
> +                                           bo_offset[1],
> +                                           width[1] * 2, height[1],
> +                                           pitch[1], 1,
> +                                           I965_SURFACEFORMAT_R16_UI
> NT,
> +                                           bti + 1, 0);
> +        } else {
> +            gen8_add_dri_buffer_2d_gpe_surface(ctx, gpe_context, bo,
> +                                           bo_offset[1],
> +                                           width[1], height[1],
> +                                           pitch[1], 1,
> +                                           I965_SURFACEFORMAT_R8_UIN
> T,
> +                                           bti + 1, 0);
> +
> +            gen8_add_dri_buffer_2d_gpe_surface(ctx, gpe_context, bo,
> +                                           bo_offset[2],
> +                                           width[2], height[2],
> +                                           pitch[2], 1,
> +                                           I965_SURFACEFORMAT_R8_UIN
> T,
> +                                           bti + 2, 0);
> +        }
> +    }
> +
> +    return;
> +}
> +
> +VAStatus
> +gen8_yuv420p8_scaling_post_processing(
> +    VADriverContextP   ctx,
> +    struct i965_post_processing_context *pp_context,
> +    struct i965_surface *src_surface,
> +    VARectangle *src_rect,
> +    struct i965_surface *dst_surface,
> +    VARectangle *dst_rect)
> +{
> +    struct i965_gpe_context *gpe_context;
> +    struct gpe_media_object_walker_parameter
> media_object_walker_param;
> +    struct intel_vpp_kernel_walker_parameter kernel_walker_param;
> +
> +    if (!pp_context || !src_surface || !src_rect || !dst_surface ||
> !dst_rect)
> +        return VA_STATUS_ERROR_INVALID_PARAMETER;
> +
> +    if (!(pp_context->scaling_8bit_initialized & VPPGPE_8BIT_420))
> +        return VA_STATUS_ERROR_UNIMPLEMENTED;
> +
> +    gpe_context = &pp_context->scaling_yuv420p8_context;
> +
> +    gen8_gpe_context_init(ctx, gpe_context);
> +    gen8_vpp_scaling_sample_state(ctx, gpe_context, src_rect,
> dst_rect);
> +    gen8_gpe_reset_binding_table(ctx, gpe_context);
> +    gen8_gpe_context_yuv420p8_scaling_curbe(ctx, gpe_context,
> +                                        src_rect, src_surface,
> +                                        dst_rect, dst_surface);
> +
> +    gen8_gpe_context_yuv420p8_scaling_surfaces(ctx, gpe_context,
> +                                        src_rect, src_surface,
> +                                        dst_rect, dst_surface);
> +
> +    gen8_gpe_setup_interface_data(ctx, gpe_context);
> +
> +    memset(&kernel_walker_param, 0, sizeof(kernel_walker_param));
> +    kernel_walker_param.resolution_x = ALIGN(dst_rect->width, 16) >>
> 4;
> +    kernel_walker_param.resolution_y = ALIGN(dst_rect->height, 16)
> >> 4;
> +    kernel_walker_param.no_dependency = 1;
> +
> +    intel_vpp_init_media_object_walker_parameter(&kernel_walker_para
> m, &media_object_walker_param);
> +
> +    gen8_run_kernel_media_object_walker(ctx, pp_context->batch,
> +                                        gpe_context,
> +                                        &media_object_walker_param);
> +
> +    return VA_STATUS_SUCCESS;
>  }
> diff --git a/src/intel_common_vpp_internal.c
> b/src/intel_common_vpp_internal.c
> index 4da056f..d9e2284 100644
> --- a/src/intel_common_vpp_internal.c
> +++ b/src/intel_common_vpp_internal.c
> @@ -62,9 +62,17 @@ intel_yuv420p8_scaling_post_processing(
>      struct i965_surface *dst_surface,
>      VARectangle *dst_rect)
>  {
> +    struct i965_driver_data *i965 = i965_driver_data(ctx);
>      VAStatus va_status;
>  
> -    va_status = gen9_yuv420p8_scaling_post_processing(ctx,
> pp_context,
> +    if (IS_GEN8(i965->intel.device_info))
> +        va_status = gen8_yuv420p8_scaling_post_processing(ctx,
> pp_context,
> +                                                      src_surface,
> +                                                      src_rect,
> +                                                      dst_surface,
> +                                                      dst_rect);
> +    else
> +        va_status = gen9_yuv420p8_scaling_post_processing(ctx,
> pp_context,
>                                                        src_surface,
>                                                        src_rect,
>                                                        dst_surface,
> diff --git a/src/intel_common_vpp_internal.h
> b/src/intel_common_vpp_internal.h
> index 7575041..88b4b7f 100644
> --- a/src/intel_common_vpp_internal.h
> +++ b/src/intel_common_vpp_internal.h
> @@ -72,4 +72,13 @@ gen9_yuv420p8_scaling_post_processing(
>      struct i965_surface *dst_surface,
>      VARectangle *dst_rect);
>  
> +VAStatus
> +gen8_yuv420p8_scaling_post_processing(
> +    VADriverContextP   ctx,
> +    struct i965_post_processing_context *pp_context,
> +    struct i965_surface *src_surface,
> +    VARectangle *src_rect,
> +    struct i965_surface *dst_surface,
> +    VARectangle *dst_rect);
> +
>  #endif  // _INTEL_COMMON_VPP_INTERNAL_H_
> diff --git a/src/shaders/post_processing/gen8/Makefile.am
> b/src/shaders/post_processing/gen8/Makefile.am
> index 48a077e..052b342 100644
> --- a/src/shaders/post_processing/gen8/Makefile.am
> +++ b/src/shaders/post_processing/gen8/Makefile.am
> @@ -15,7 +15,8 @@ INTEL_PP_G8B = \
>  INTEL_PP_PRE_G8B =		\
>  	sharpening_h_blur.g8b	\
>  	sharpening_unmask.g8b	\
> -	sharpening_v_blur.g8b
> +	sharpening_v_blur.g8b   \
> +        conv_nv12.g8b
>  
>  INTEL_PP_G8A = \
>  	EOT.g8a				\
> diff --git a/src/shaders/post_processing/gen8/conv_nv12.g8b
> b/src/shaders/post_processing/gen8/conv_nv12.g8b
> new file mode 100644
> index 0000000..b62dff3
> --- /dev/null
> +++ b/src/shaders/post_processing/gen8/conv_nv12.g8b
> @@ -0,0 +1,362 @@
> +{ 0x00600001, 0x20602648, 0x00000000, 0x76543210 },
> +{ 0x00000005, 0x2700124c, 0x16000004, 0x01ff01ff },
> +{ 0x00600001, 0x27401208, 0x008d0060, 0x00000000 },
> +{ 0x00000005, 0x2720124c, 0x16000006, 0x01ff01ff },
> +{ 0x00000041, 0x20a01208, 0x16000700, 0x00100010 },
> +{ 0x00600040, 0x27600208, 0x168d0740, 0x00080008 },
> +{ 0x00000041, 0x20801228, 0x16000720, 0x00100010 },
> +{ 0x00000040, 0x27800228, 0x02000040, 0x000000a0 },
> +{ 0x00800040, 0x27400208, 0x028d0740, 0x000000a0 },
> +{ 0x00000041, 0x21003ae8, 0x3e000048, 0x3f000000 },
> +{ 0x00000041, 0x21603ae8, 0x3e00004c, 0x3f000000 },
> +{ 0x00800001, 0x212002e8, 0x00000080, 0x00000000 },
> +{ 0x00800001, 0x20c002e8, 0x008d0740, 0x00000000 },
> +{ 0x0080015b, 0x401e0000, 0xc020b001, 0x02472004 },
> +{ 0x0080015b, 0x3e1e0000, 0x80208001, 0x01872004 },
> +{ 0x00800040, 0x28003ae8, 0x3a8d0800, 0x00000054 },
> +{ 0x00800040, 0x27c03ae8, 0x3a8d07c0, 0x00000050 },
> +{ 0x00000001, 0x28401e28, 0x00000000, 0x00000000 },
> +{ 0x00000001, 0x29600208, 0x0000005c, 0x00000000 },
> +{ 0x00000040, 0x27a00228, 0x02000044, 0x00000080 },
> +{ 0x00600001, 0x20600208, 0x008d0000, 0x00000000 },
> +{ 0x00800001, 0x21400608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x21001ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x20c00208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x20800208, 0x008d07c0, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000058, 0x122c0000 },
> +{ 0x00000001, 0x20680608, 0x00000000, 0x0000e000 },
> +{ 0x02800031, 0x21803a68, 0x008d0060, 0x00000200 },
> +{ 0x00000001, 0x21c01ee8, 0x00000000, 0x00ff00ff },
> +{ 0x00800040, 0x28003ae8, 0x3a8d0800, 0x0000004c },
> +{ 0x00800001, 0x23600608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x23201ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x22a00208, 0x008d07c0, 0x00000000 },
> +{ 0x00600001, 0x22800208, 0x008d0060, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000058, 0x122c0000 },
> +{ 0x00800001, 0x22e00208, 0x008d0800, 0x00000000 },
> +{ 0x00800040, 0x28003ae8, 0x3a8d0800, 0x0000004c },
> +{ 0x00800001, 0x24c00608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x24801ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x24000208, 0x008d07c0, 0x00000000 },
> +{ 0x00600001, 0x23e00208, 0x008d0280, 0x00000000 },
> +{ 0x00800001, 0x24400208, 0x008d0800, 0x00000000 },
> +{ 0x00800040, 0x28003ae8, 0x3a8d0800, 0x0000004c },
> +{ 0x00800001, 0x26200608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x25e01ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x25600208, 0x008d07c0, 0x00000000 },
> +{ 0x00600001, 0x25400208, 0x008d03e0, 0x00000000 },
> +{ 0x00800001, 0x25a00208, 0x008d0800, 0x00000000 },
> +{ 0x00600001, 0x2200020c, 0x008d0000, 0x00000000 },
> +{ 0x00000040, 0x28400a28, 0x1e000840, 0x00010001 },
> +{ 0x00000001, 0x2204020c, 0x000007a0, 0x00000000 },
> +{ 0x00000001, 0x2200020c, 0x00000780, 0x00000000 },
> +{ 0x00000001, 0x2208060c, 0x00000000, 0x0003000f },
> +{ 0x05000010, 0x20000a23, 0x1e000840, 0x00040004 },
> +{ 0x00800040, 0x28003ae8, 0x3a8d0800, 0x0000004c },
> +{ 0x00000040, 0x27a00a28, 0x1e0007a0, 0x00040004 },
> +{ 0x00800041, 0x21803ae8, 0x3a8d0180, 0x000001c0 },
> +{ 0x00600001, 0x22603a28, 0x008d01a0, 0x00000000 },
> +{ 0x00600001, 0x21e03a28, 0x008d0180, 0x00000000 },
> +{ 0x02800031, 0x21803a68, 0x008d0280, 0x00000200 },
> +{ 0x00600001, 0x22282288, 0x00cf0260, 0x00000000 },
> +{ 0x00600001, 0x22202288, 0x00cf01e0, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000058, 0x122c0000 },
> +{ 0x00800041, 0x21803ae8, 0x3a8d0180, 0x000001c0 },
> +{ 0x00600001, 0x23c03a28, 0x008d01a0, 0x00000000 },
> +{ 0x00600001, 0x23a03a28, 0x008d0180, 0x00000000 },
> +{ 0x02800031, 0x21803a68, 0x008d03e0, 0x00000200 },
> +{ 0x00600001, 0x22382288, 0x00cf03c0, 0x00000000 },
> +{ 0x00600001, 0x22302288, 0x00cf03a0, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000058, 0x122c0000 },
> +{ 0x00800041, 0x21803ae8, 0x3a8d0180, 0x000001c0 },
> +{ 0x00600001, 0x25203a28, 0x008d01a0, 0x00000000 },
> +{ 0x00600001, 0x25003a28, 0x008d0180, 0x00000000 },
> +{ 0x02800031, 0x21803a68, 0x008d0540, 0x00000200 },
> +{ 0x00600001, 0x22482288, 0x00cf0520, 0x00000000 },
> +{ 0x00600001, 0x22402288, 0x00cf0500, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000960, 0x060a8000 },
> +{ 0x00800041, 0x21803ae8, 0x3a8d0180, 0x000001c0 },
> +{ 0x00600001, 0x26803a28, 0x008d01a0, 0x00000000 },
> +{ 0x00600001, 0x26603a28, 0x008d0180, 0x00000000 },
> +{ 0x00600001, 0x22582288, 0x00cf0680, 0x00000000 },
> +{ 0x00600001, 0x22502288, 0x00cf0660, 0x00000000 },
> +{ 0x0c600031, 0x20003a04, 0x008d0200, 0x00000200 },
> +{ 0x00010020, 0x34000007, 0x0e001400, 0xfffffc00 },
> +{ 0x00600001, 0x20602668, 0x00000000, 0x76543210 },
> +{ 0x00000041, 0x20a01228, 0x16000720, 0x00100010 },
> +{ 0x00600009, 0x27601a08, 0x168d0060, 0x00010001 },
> +{ 0x00000041, 0x20801208, 0x16000700, 0x00100010 },
> +{ 0x00600001, 0x20c00a08, 0x000000a0, 0x00000000 },
> +{ 0x00600001, 0x27400208, 0x008d0760, 0x00000000 },
> +{ 0x00600040, 0x20e00208, 0x168d00c0, 0x00020002 },
> +{ 0x00800040, 0x27400208, 0x028d0740, 0x00000080 },
> +{ 0x00800001, 0x216002e8, 0x008d00c0, 0x00000000 },
> +{ 0x00800001, 0x212002e8, 0x008d0740, 0x00000000 },
> +{ 0x00000005, 0x21a00208, 0x1600003c, 0x000c000c },
> +{ 0x0080015b, 0x401e0000, 0xc0202a01, 0x02c72004 },
> +{ 0x0080015b, 0x3e1e0000, 0x80202801, 0x02472004 },
> +{ 0x00000040, 0x21000228, 0x02000044, 0x000000a0 },
> +{ 0x02000010, 0x20000202, 0x160001a0, 0x000c000c },
> +{ 0x00800040, 0x28003ae8, 0x3a8d0800, 0x00000038 },
> +{ 0x00800040, 0x27c03ae8, 0x3a8d07c0, 0x00000034 },
> +{ 0x00000040, 0x28600208, 0x16000058, 0x00010001 },
> +{ 0x00000040, 0x28800208, 0x16000058, 0x00020002 },
> +{ 0x00000040, 0x28a00208, 0x1600005c, 0x00010001 },
> +{ 0x00000040, 0x28c00208, 0x1600005c, 0x00020002 },
> +{ 0x0000000c, 0x27a00a28, 0x1e000100, 0x00010001 },
> +{ 0x00010020, 0x34000006, 0x0e001400, 0x00000370 },
> +{ 0x00000001, 0x28401e28, 0x00000000, 0x00000000 },
> +{ 0x00600001, 0x20600208, 0x008d0000, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000860, 0x124c0000 },
> +{ 0x00800001, 0x21400608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x21001ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x20c00208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x20800208, 0x008d07c0, 0x00000000 },
> +{ 0x00000001, 0x20680608, 0x00000000, 0x0000c000 },
> +{ 0x02800031, 0x28e03a68, 0x008d0060, 0x00000200 },
> +{ 0x00000001, 0x22c03ee8, 0x00000000, 0x40800000 },
> +{ 0x00000001, 0x21801ee8, 0x00000000, 0x00ff00ff },
> +{ 0x0080015b, 0x401e0000, 0xc02401c8, 0x05800404 },
> +{ 0x00800001, 0x23c00608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x23801ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x23000208, 0x008d07c0, 0x00000000 },
> +{ 0x00600001, 0x22e00208, 0x008d0060, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000860, 0x124c0000 },
> +{ 0x00800001, 0x23400208, 0x008d0800, 0x00000000 },
> +{ 0x00600001, 0x21c0020c, 0x008d0000, 0x00000000 },
> +{ 0x00000040, 0x28400a28, 0x1e000840, 0x00010001 },
> +{ 0x00000001, 0x21c4020c, 0x000007a0, 0x00000000 },
> +{ 0x00000001, 0x21c0020c, 0x00000780, 0x00000000 },
> +{ 0x00000001, 0x21c8060c, 0x00000000, 0x0003000f },
> +{ 0x05000010, 0x20000a21, 0x1e000840, 0x00020002 },
> +{ 0x0080015b, 0x401e0000, 0xc02401c8, 0x05800404 },
> +{ 0x00000040, 0x27a00a28, 0x1e0007a0, 0x00040004 },
> +{ 0x00800041, 0x29203ae8, 0x3a8d0920, 0x00000180 },
> +{ 0x00800041, 0x28e03ae8, 0x3a8d08e0, 0x00000180 },
> +{ 0x00600001, 0x22803a28, 0x008d0940, 0x00000000 },
> +{ 0x00600001, 0x22403a28, 0x008d0920, 0x00000000 },
> +{ 0x00600001, 0x22203a28, 0x008d0900, 0x00000000 },
> +{ 0x00600001, 0x21a03a28, 0x008d08e0, 0x00000000 },
> +{ 0x02800031, 0x28e03a68, 0x008d02e0, 0x00000200 },
> +{ 0x00600001, 0x62a00a88, 0x008d0280, 0x00000000 },
> +{ 0x00600001, 0x62600a88, 0x008d0240, 0x00000000 },
> +{ 0x00600001, 0x41f02288, 0x00cf0220, 0x00000000 },
> +{ 0x00600001, 0x41e02288, 0x00cf01a0, 0x00000000 },
> +{ 0x00600001, 0x41f12288, 0x006002a0, 0x00000000 },
> +{ 0x00600001, 0x41e12288, 0x00600260, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x060008a0, 0x060a8000 },
> +{ 0x00800041, 0x29203ae8, 0x3a8d0920, 0x00000180 },
> +{ 0x00800041, 0x28e03ae8, 0x3a8d08e0, 0x00000180 },
> +{ 0x00600001, 0x24803a28, 0x008d0940, 0x00000000 },
> +{ 0x00600001, 0x24403a28, 0x008d0920, 0x00000000 },
> +{ 0x00600001, 0x24203a28, 0x008d0900, 0x00000000 },
> +{ 0x00600001, 0x24003a28, 0x008d08e0, 0x00000000 },
> +{ 0x00600001, 0x64a00a88, 0x008d0480, 0x00000000 },
> +{ 0x00600001, 0x64600a88, 0x008d0440, 0x00000000 },
> +{ 0x00600001, 0x42102288, 0x00cf0420, 0x00000000 },
> +{ 0x00600001, 0x42002288, 0x00cf0400, 0x00000000 },
> +{ 0x00600001, 0x42112288, 0x006004a0, 0x00000000 },
> +{ 0x00600001, 0x42012288, 0x00600460, 0x00000000 },
> +{ 0x0c600031, 0x20003a04, 0x008d01c0, 0x00000200 },
> +{ 0x00010020, 0x34000005, 0x0e001400, 0xfffffcb0 },
> +{ 0x00000020, 0x34000004, 0x0e001400, 0x00000c60 },
> +{ 0x00000005, 0x20600208, 0x1600003c, 0x000c000c },
> +{ 0x02000010, 0x20000200, 0x16000060, 0x00040004 },
> +{ 0x00010020, 0x34000004, 0x0e001400, 0x00000370 },
> +{ 0x00000001, 0x28401e28, 0x00000000, 0x00000000 },
> +{ 0x0000000c, 0x27800a28, 0x1e000780, 0x00010001 },
> +{ 0x00600001, 0x20600208, 0x008d0000, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000860, 0x124c0000 },
> +{ 0x00800001, 0x21400608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x21001ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x20c00208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x20800208, 0x008d07c0, 0x00000000 },
> +{ 0x00000001, 0x20680608, 0x00000000, 0x0000c000 },
> +{ 0x02800031, 0x28e03a68, 0x008d0060, 0x00000200 },
> +{ 0x00000001, 0x22a03ee8, 0x00000000, 0x40800000 },
> +{ 0x00000001, 0x21801ee8, 0x00000000, 0x00ff00ff },
> +{ 0x0080015b, 0x401e0000, 0xc02401c8, 0x05400404 },
> +{ 0x00800001, 0x23a00608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x23601ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x22e00208, 0x008d07c0, 0x00000000 },
> +{ 0x00600001, 0x22c00208, 0x008d0060, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000860, 0x124c0000 },
> +{ 0x00800001, 0x23200208, 0x008d0800, 0x00000000 },
> +{ 0x00600001, 0x21c0020c, 0x008d0000, 0x00000000 },
> +{ 0x00000001, 0x21c4020c, 0x000007a0, 0x00000000 },
> +{ 0x00000001, 0x21c0020c, 0x00000780, 0x00000000 },
> +{ 0x00000001, 0x21c8060c, 0x00000000, 0x00030007 },
> +{ 0x00000040, 0x28400a28, 0x1e000840, 0x00010001 },
> +{ 0x00600001, 0x2240020c, 0x008d01c0, 0x00000000 },
> +{ 0x05000010, 0x20000a23, 0x1e000840, 0x00020002 },
> +{ 0x0080015b, 0x401e0000, 0xc02401c8, 0x05400404 },
> +{ 0x00000040, 0x27a00a28, 0x1e0007a0, 0x00040004 },
> +{ 0x00800041, 0x29203ae8, 0x3a8d0920, 0x00000180 },
> +{ 0x00800041, 0x28e03ae8, 0x3a8d08e0, 0x00000180 },
> +{ 0x00600001, 0x22803a28, 0x008d0940, 0x00000000 },
> +{ 0x00600001, 0x22203a28, 0x008d0920, 0x00000000 },
> +{ 0x00600001, 0x22003a28, 0x008d0900, 0x00000000 },
> +{ 0x00600001, 0x21a03a28, 0x008d08e0, 0x00000000 },
> +{ 0x02800031, 0x28e03a68, 0x008d02c0, 0x00000200 },
> +{ 0x00600001, 0x22682288, 0x00cf0280, 0x00000000 },
> +{ 0x00600001, 0x21e82288, 0x00cf0200, 0x00000000 },
> +{ 0x00600001, 0x21e02288, 0x00cf01a0, 0x00000000 },
> +{ 0x00600001, 0x22602288, 0x00cf0220, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x060008a0, 0x040a8000 },
> +{ 0x00800041, 0x28e03ae8, 0x3a8d08e0, 0x00000180 },
> +{ 0x00600001, 0x24003a28, 0x008d0900, 0x00000000 },
> +{ 0x00600001, 0x23e03a28, 0x008d08e0, 0x00000000 },
> +{ 0x00600001, 0x21f82288, 0x00cf0400, 0x00000000 },
> +{ 0x00600001, 0x21f02288, 0x00cf03e0, 0x00000000 },
> +{ 0x0c600031, 0x20003a04, 0x008d01c0, 0x00000200 },
> +{ 0x00800041, 0x29203ae8, 0x3a8d0920, 0x00000180 },
> +{ 0x00600001, 0x24403a28, 0x008d0940, 0x00000000 },
> +{ 0x00600001, 0x24203a28, 0x008d0920, 0x00000000 },
> +{ 0x00600001, 0x22782288, 0x00cf0440, 0x00000000 },
> +{ 0x00600001, 0x22702288, 0x00cf0420, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x060008c0, 0x040a8000 },
> +{ 0x0c600031, 0x20003a04, 0x008d0240, 0x00000200 },
> +{ 0x00010020, 0x34000007, 0x0e001400, 0xfffffcc0 },
> +{ 0x00000020, 0x34000004, 0x0e001400, 0x000008c0 },
> +{ 0x00000005, 0x20600208, 0x1600003c, 0x000c000c },
> +{ 0x02000010, 0x20000202, 0x16000060, 0x00080008 },
> +{ 0x00010020, 0x34000006, 0x0e001400, 0x00000450 },
> +{ 0x00000001, 0x28401e28, 0x00000000, 0x00000000 },
> +{ 0x00600001, 0x20600208, 0x008d0000, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000860, 0x122c0000 },
> +{ 0x00800001, 0x21400608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x21001ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x20c00208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x20800208, 0x008d07c0, 0x00000000 },
> +{ 0x00000001, 0x20680608, 0x00000000, 0x0000e000 },
> +{ 0x02800031, 0x28e03a68, 0x008d0060, 0x00000200 },
> +{ 0x00800001, 0x22600608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x22201ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x21e00208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x21a00208, 0x008d07c0, 0x00000000 },
> +{ 0x00600001, 0x21800208, 0x008d0060, 0x00000000 },
> +{ 0x00600001, 0x24000208, 0x008d0180, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000880, 0x122c0000 },
> +{ 0x00600001, 0x25200208, 0x008d0400, 0x00000000 },
> +{ 0x02800031, 0x29203a68, 0x008d0180, 0x00000200 },
> +{ 0x00000001, 0x23e03ee8, 0x00000000, 0x40800000 },
> +{ 0x00000001, 0x22a01ee8, 0x00000000, 0x00ff00ff },
> +{ 0x0080015b, 0x401e0000, 0xc02401c8, 0x07c00404 },
> +{ 0x00800001, 0x24e00608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x24a01ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x24200208, 0x008d07c0, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000860, 0x122c0000 },
> +{ 0x00800001, 0x24600208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x26000608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x25c01ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x25400208, 0x008d07c0, 0x00000000 },
> +{ 0x00800001, 0x25800208, 0x008d0800, 0x00000000 },
> +{ 0x00600001, 0x22e0020c, 0x008d0000, 0x00000000 },
> +{ 0x00000040, 0x28400a28, 0x1e000840, 0x00010001 },
> +{ 0x00000001, 0x22e4020c, 0x000007a0, 0x00000000 },
> +{ 0x00000001, 0x22e0020c, 0x00000780, 0x00000000 },
> +{ 0x00000001, 0x22e8060c, 0x00000000, 0x0003000f },
> +{ 0x05000010, 0x20000a21, 0x1e000840, 0x00020002 },
> +{ 0x0080015b, 0x401e0000, 0xc02401c8, 0x07c00404 },
> +{ 0x00000040, 0x27a00a28, 0x1e0007a0, 0x00040004 },
> +{ 0x00800041, 0x28e03ae8, 0x3a8d08e0, 0x000002a0 },
> +{ 0x00600001, 0x23403a28, 0x008d0900, 0x00000000 },
> +{ 0x00600001, 0x22c03a28, 0x008d08e0, 0x00000000 },
> +{ 0x02800031, 0x28e03a68, 0x008d0400, 0x00000200 },
> +{ 0x00600001, 0x43102288, 0x00cf0340, 0x00000000 },
> +{ 0x00600001, 0x43002288, 0x00cf02c0, 0x00000000 },
> +{ 0x00800041, 0x29203ae8, 0x3a8d0920, 0x000002a0 },
> +{ 0x00000040, 0x22000204, 0x06000880, 0x122c0000 },
> +{ 0x00600001, 0x23a03a28, 0x008d0940, 0x00000000 },
> +{ 0x00600001, 0x23603a28, 0x008d0920, 0x00000000 },
> +{ 0x02800031, 0x29203a68, 0x008d0520, 0x00000200 },
> +{ 0x00600001, 0x63c00a88, 0x008d03a0, 0x00000000 },
> +{ 0x00600001, 0x63800a88, 0x008d0360, 0x00000000 },
> +{ 0x00600001, 0x43112288, 0x006003c0, 0x00000000 },
> +{ 0x00600001, 0x43012288, 0x00600380, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x060008a0, 0x060a8000 },
> +{ 0x00800041, 0x28e03ae8, 0x3a8d08e0, 0x000002a0 },
> +{ 0x00600001, 0x26603a28, 0x008d0900, 0x00000000 },
> +{ 0x00600001, 0x26403a28, 0x008d08e0, 0x00000000 },
> +{ 0x00600001, 0x43302288, 0x00cf0660, 0x00000000 },
> +{ 0x00600001, 0x43202288, 0x00cf0640, 0x00000000 },
> +{ 0x00800041, 0x29203ae8, 0x3a8d0920, 0x000002a0 },
> +{ 0x00600001, 0x26c03a28, 0x008d0940, 0x00000000 },
> +{ 0x00600001, 0x26803a28, 0x008d0920, 0x00000000 },
> +{ 0x00600001, 0x66e00a88, 0x008d06c0, 0x00000000 },
> +{ 0x00600001, 0x66a00a88, 0x008d0680, 0x00000000 },
> +{ 0x00600001, 0x43312288, 0x006006e0, 0x00000000 },
> +{ 0x00600001, 0x43212288, 0x006006a0, 0x00000000 },
> +{ 0x0c600031, 0x20003a04, 0x008d02e0, 0x00000200 },
> +{ 0x00010020, 0x34000005, 0x0e001400, 0xfffffbd0 },
> +{ 0x00000020, 0x34000004, 0x0e001400, 0x00000440 },
> +{ 0x00000001, 0x28401e28, 0x00000000, 0x00000000 },
> +{ 0x0000000c, 0x27800a28, 0x1e000780, 0x00010001 },
> +{ 0x00600001, 0x20600208, 0x008d0000, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000860, 0x122c0000 },
> +{ 0x00800001, 0x21400608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x21001ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x20c00208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x20800208, 0x008d07c0, 0x00000000 },
> +{ 0x00000001, 0x20680608, 0x00000000, 0x0000e000 },
> +{ 0x02800031, 0x28e03a68, 0x008d0060, 0x00000200 },
> +{ 0x00800001, 0x22600608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x22201ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x21e00208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x21a00208, 0x008d07c0, 0x00000000 },
> +{ 0x00600001, 0x21800208, 0x008d0060, 0x00000000 },
> +{ 0x00600001, 0x23e00208, 0x008d0180, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000880, 0x122c0000 },
> +{ 0x00600001, 0x25000208, 0x008d03e0, 0x00000000 },
> +{ 0x02800031, 0x29203a68, 0x008d0180, 0x00000200 },
> +{ 0x00000001, 0x23c03ee8, 0x00000000, 0x40800000 },
> +{ 0x00000001, 0x22a01ee8, 0x00000000, 0x00ff00ff },
> +{ 0x0080015b, 0x401e0000, 0xc02401c8, 0x07800404 },
> +{ 0x00800001, 0x24c00608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x24801ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x24000208, 0x008d07c0, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x06000860, 0x122c0000 },
> +{ 0x00800001, 0x24400208, 0x008d0800, 0x00000000 },
> +{ 0x00800001, 0x25e00608, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x25a01ee8, 0x00000000, 0x00000000 },
> +{ 0x00800001, 0x25200208, 0x008d07c0, 0x00000000 },
> +{ 0x00800001, 0x25600208, 0x008d0800, 0x00000000 },
> +{ 0x00600001, 0x22e0020c, 0x008d0000, 0x00000000 },
> +{ 0x00000001, 0x22e4020c, 0x000007a0, 0x00000000 },
> +{ 0x00000001, 0x22e0020c, 0x00000780, 0x00000000 },
> +{ 0x00000001, 0x22e8060c, 0x00000000, 0x00030007 },
> +{ 0x00000040, 0x28400a28, 0x1e000840, 0x00010001 },
> +{ 0x00600001, 0x2360020c, 0x008d02e0, 0x00000000 },
> +{ 0x05000010, 0x20000a20, 0x1e000840, 0x00020002 },
> +{ 0x0080015b, 0x401e0000, 0xc02401c8, 0x07800404 },
> +{ 0x00000040, 0x27a00a28, 0x1e0007a0, 0x00040004 },
> +{ 0x00800041, 0x28e03ae8, 0x3a8d08e0, 0x000002a0 },
> +{ 0x00600001, 0x23203a28, 0x008d0900, 0x00000000 },
> +{ 0x00600001, 0x22c03a28, 0x008d08e0, 0x00000000 },
> +{ 0x02800031, 0x28e03a68, 0x008d03e0, 0x00000200 },
> +{ 0x00600001, 0x23082288, 0x00cf0320, 0x00000000 },
> +{ 0x00600001, 0x23002288, 0x00cf02c0, 0x00000000 },
> +{ 0x00800041, 0x29203ae8, 0x3a8d0920, 0x000002a0 },
> +{ 0x00000040, 0x22000204, 0x06000880, 0x122c0000 },
> +{ 0x00600001, 0x23a03a28, 0x008d0940, 0x00000000 },
> +{ 0x00600001, 0x23403a28, 0x008d0920, 0x00000000 },
> +{ 0x02800031, 0x29203a68, 0x008d0500, 0x00000200 },
> +{ 0x00600001, 0x23882288, 0x00cf03a0, 0x00000000 },
> +{ 0x00600001, 0x23802288, 0x00cf0340, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x060008a0, 0x040a8000 },
> +{ 0x00800041, 0x28e03ae8, 0x3a8d08e0, 0x000002a0 },
> +{ 0x00600001, 0x26403a28, 0x008d0900, 0x00000000 },
> +{ 0x00600001, 0x26203a28, 0x008d08e0, 0x00000000 },
> +{ 0x00600001, 0x23182288, 0x00cf0640, 0x00000000 },
> +{ 0x00600001, 0x23102288, 0x00cf0620, 0x00000000 },
> +{ 0x0c600031, 0x20003a04, 0x008d02e0, 0x00000200 },
> +{ 0x00800041, 0x29203ae8, 0x3a8d0920, 0x000002a0 },
> +{ 0x00600001, 0x26803a28, 0x008d0940, 0x00000000 },
> +{ 0x00600001, 0x26603a28, 0x008d0920, 0x00000000 },
> +{ 0x00600001, 0x23982288, 0x00cf0680, 0x00000000 },
> +{ 0x00000040, 0x22000204, 0x060008c0, 0x040a8000 },
> +{ 0x00600001, 0x23902288, 0x00cf0660, 0x00000000 },
> +{ 0x0c600031, 0x20003a04, 0x008d0360, 0x00000200 },
> +{ 0x00010020, 0x34000004, 0x0e001400, 0xfffffbe0 },
> +{ 0x00600001, 0x2fe0020c, 0x008d0000, 0x00000000 },
> +{ 0x07000031, 0x20003a00, 0x06000fe0, 0x82000010 },


More information about the Libva mailing list