summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhao Yakui <yakui.zhao@intel.com>2013-01-07 13:18:47 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2014-02-27 09:51:36 +0800
commit20bfe6784c2830ad4cc711b6035ed8a70ca2ad45 (patch)
tree272d72b8aec6fff6feeb05daa46f69c0d11e9642
parent696606c72768196f13fb8aaa7b821a33f8867689 (diff)
Add the initial support for GEN8
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> [Haihao: fix conflict when rebasing] Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
-rwxr-xr-xsrc/i965_defines.h1
-rwxr-xr-xsrc/i965_drv_video.c27
-rwxr-xr-xsrc/i965_post_processing.c28
-rw-r--r--src/i965_render.c18
-rw-r--r--src/intel_batchbuffer.c3
5 files changed, 58 insertions, 19 deletions
diff --git a/src/i965_defines.h b/src/i965_defines.h
index c7163ae..58a73d7 100755
--- a/src/i965_defines.h
+++ b/src/i965_defines.h
@@ -752,6 +752,7 @@
#define SUBSAMPLE_RGBX 6
#define URB_SIZE(intel) (IS_GEN7(intel->device_id) ? 4096 : \
+ IS_GEN8(intel->device_id) ? 4096 : \
IS_GEN6(intel->device_id) ? 1024 : \
IS_IRONLAKE(intel->device_id) ? 1024 : \
IS_G4X(intel->device_id) ? 384 : 256)
diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c
index fb7dc16..c9ed624 100755
--- a/src/i965_drv_video.c
+++ b/src/i965_drv_video.c
@@ -318,6 +318,26 @@ static struct hw_codec_info gen75_hw_codec_info = {
},
};
+/* TODO: Add the separate call back function for Gen8 */
+static struct hw_codec_info gen8_hw_codec_info = {
+ .dec_hw_context_init = gen75_dec_hw_context_init,
+ .enc_hw_context_init = gen75_enc_hw_context_init,
+ .proc_hw_context_init = gen75_proc_context_init,
+ .max_width = 4096,
+ .max_height = 4096,
+
+ .has_mpeg2_decoding = 1,
+ .has_mpeg2_encoding = 1,
+ .has_h264_decoding = 1,
+ .has_h264_encoding = 1,
+ .has_vc1_decoding = 1,
+ .has_jpeg_decoding = 1,
+ .has_vpp = 1,
+ .has_accelerated_getimage = 1,
+ .has_accelerated_putimage = 1,
+ .has_tiled_surface = 1,
+};
+
#define I965_PACKED_HEADER_BASE 0
#define I965_PACKED_MISC_HEADER_BASE 3
@@ -358,7 +378,6 @@ va_enc_packed_type_to_idx(int packed_type)
return idx;
}
-
VAStatus
i965_QueryConfigProfiles(VADriverContextP ctx,
VAProfile *profile_list, /* out */
@@ -1497,7 +1516,7 @@ i965_CreateContext(VADriverContextP ctx,
render_state->interleaved_uv = 1;
break;
default:
- render_state->interleaved_uv = !!(IS_GEN6(i965->intel.device_id) || IS_GEN7(i965->intel.device_id));
+ render_state->interleaved_uv = !!(IS_GEN6(i965->intel.device_id) || IS_GEN7(i965->intel.device_id) || IS_GEN8(i965->intel.device_id));
break;
}
@@ -4823,7 +4842,9 @@ i965_driver_data_init(VADriverContextP ctx)
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
- if (IS_HASWELL(i965->intel.device_id))
+ if (IS_GEN8(i965->intel.device_id))
+ i965->codec_info = &gen8_hw_codec_info;
+ else if (IS_HASWELL(i965->intel.device_id))
i965->codec_info = &gen75_hw_codec_info;
else if (IS_G4X(i965->intel.device_id))
i965->codec_info = &g4x_hw_codec_info;
diff --git a/src/i965_post_processing.c b/src/i965_post_processing.c
index 015e11c..0353044 100755
--- a/src/i965_post_processing.c
+++ b/src/i965_post_processing.c
@@ -42,7 +42,8 @@
#define HAS_PP(ctx) (IS_IRONLAKE((ctx)->intel.device_id) || \
IS_GEN6((ctx)->intel.device_id) || \
- IS_GEN7((ctx)->intel.device_id))
+ IS_GEN7((ctx)->intel.device_id) || \
+ IS_GEN8((ctx)->intel.device_id))
#define SURFACE_STATE_PADDED_SIZE_0_I965 ALIGN(sizeof(struct i965_surface_state), 32)
#define SURFACE_STATE_PADDED_SIZE_1_I965 ALIGN(sizeof(struct i965_surface_state2), 32)
@@ -4306,7 +4307,8 @@ gen6_pp_initialize(
assert(bo);
pp_context->vfe_state.bo = bo;
- if (IS_GEN7(i965->intel.device_id)) {
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id)) {
static_param_size = sizeof(struct gen7_pp_static_parameter);
inline_param_size = sizeof(struct gen7_pp_inline_parameter);
} else {
@@ -4361,7 +4363,8 @@ gen6_pp_interface_descriptor_table(VADriverContextP ctx,
desc->desc3.binding_table_pointer = (BINDING_TABLE_OFFSET >> 5);
desc->desc4.constant_urb_entry_read_offset = 0;
- if (IS_GEN7(i965->intel.device_id))
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id))
desc->desc4.constant_urb_entry_read_length = 6; /* grf 1-6 */
else
desc->desc4.constant_urb_entry_read_length = 4; /* grf 1-4 */
@@ -4393,7 +4396,8 @@ gen6_pp_upload_constants(VADriverContextP ctx,
assert(sizeof(struct pp_static_parameter) == 128);
assert(sizeof(struct gen7_pp_static_parameter) == 192);
- if (IS_GEN7(i965->intel.device_id))
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id))
param_size = sizeof(struct gen7_pp_static_parameter);
else
param_size = sizeof(struct pp_static_parameter);
@@ -4555,7 +4559,8 @@ gen6_pp_object_walker(VADriverContextP ctx,
dri_bo *command_buffer;
unsigned int *command_ptr;
- if (IS_GEN7(i965->intel.device_id))
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id))
param_size = sizeof(struct gen7_pp_inline_parameter);
else
param_size = sizeof(struct pp_inline_parameter);
@@ -4680,7 +4685,8 @@ i965_post_processing_internal(
struct i965_driver_data *i965 = i965_driver_data(ctx);
if (IS_GEN6(i965->intel.device_id) ||
- IS_GEN7(i965->intel.device_id))
+ IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id))
va_status = gen6_post_processing(ctx, pp_context, src_surface, src_rect, dst_surface, dst_rect, pp_index, filter_param);
else
va_status = ironlake_post_processing(ctx, pp_context, src_surface, src_rect, dst_surface, dst_rect, pp_index, filter_param);
@@ -4743,7 +4749,8 @@ i965_vpp_clear_surface(VADriverContextP ctx,
br13 |= pitch;
if (IS_GEN6(i965->intel.device_id) ||
- IS_GEN7(i965->intel.device_id)) {
+ IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id)) {
intel_batchbuffer_start_atomic_blt(batch, 48);
BEGIN_BLT_BATCH(batch, 12);
} else {
@@ -5391,7 +5398,9 @@ i965_post_processing_context_init(VADriverContextP ctx,
assert(NUM_PP_MODULES == ARRAY_ELEMS(pp_modules_gen7));
assert(NUM_PP_MODULES == ARRAY_ELEMS(pp_modules_gen75));
- if (IS_HASWELL(i965->intel.device_id))
+ if (IS_GEN8(i965->intel.device_id))
+ memcpy(pp_context->pp_modules, pp_modules_gen7, sizeof(pp_context->pp_modules));
+ else if (IS_HASWELL(i965->intel.device_id))
memcpy(pp_context->pp_modules, pp_modules_gen75, sizeof(pp_context->pp_modules));
else if (IS_GEN7(i965->intel.device_id))
memcpy(pp_context->pp_modules, pp_modules_gen7, sizeof(pp_context->pp_modules));
@@ -5416,7 +5425,8 @@ i965_post_processing_context_init(VADriverContextP ctx,
}
/* static & inline parameters */
- if (IS_GEN7(i965->intel.device_id)) {
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id)) {
pp_context->pp_static_parameter = calloc(sizeof(struct gen7_pp_static_parameter), 1);
pp_context->pp_inline_parameter = calloc(sizeof(struct gen7_pp_inline_parameter), 1);
} else {
diff --git a/src/i965_render.c b/src/i965_render.c
index a902fcb..1161fb6 100644
--- a/src/i965_render.c
+++ b/src/i965_render.c
@@ -827,7 +827,8 @@ i965_render_src_surface_state(
assert(ss_bo->virtual);
ss = (char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index);
- if (IS_GEN7(i965->intel.device_id)) {
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id)) {
gen7_render_set_surface_state(ss,
region, offset,
w, h,
@@ -942,7 +943,8 @@ i965_render_dest_surface_state(VADriverContextP ctx, int index)
assert(ss_bo->virtual);
ss = (char *)ss_bo->virtual + SURFACE_STATE_OFFSET(index);
- if (IS_GEN7(i965->intel.device_id)) {
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id)) {
gen7_render_set_surface_state(ss,
dest_region->bo, 0,
dest_region->width, dest_region->height,
@@ -1536,7 +1538,8 @@ i965_clear_dest_region(VADriverContextP ctx)
br13 |= pitch;
if (IS_GEN6(i965->intel.device_id) ||
- IS_GEN7(i965->intel.device_id)) {
+ IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id)) {
intel_batchbuffer_start_atomic_blt(batch, 24);
BEGIN_BLT_BATCH(batch, 6);
} else {
@@ -3107,7 +3110,8 @@ intel_render_put_surface(
src_rect = dst_rect;
}
- if (IS_GEN7(i965->intel.device_id))
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id))
gen7_render_put_surface(ctx, obj_surface, src_rect, dst_rect, flags);
else if (IS_GEN6(i965->intel.device_id))
gen6_render_put_surface(ctx, obj_surface, src_rect, dst_rect, flags);
@@ -3128,7 +3132,8 @@ intel_render_put_subpicture(
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
- if (IS_GEN7(i965->intel.device_id))
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id))
gen7_render_put_subpicture(ctx, obj_surface, src_rect, dst_rect);
else if (IS_GEN6(i965->intel.device_id))
gen6_render_put_subpicture(ctx, obj_surface, src_rect, dst_rect);
@@ -3149,7 +3154,8 @@ i965_render_init(VADriverContextP ctx)
assert(NUM_RENDER_KERNEL == (sizeof(render_kernels_gen6) /
sizeof(render_kernels_gen6[0])));
- if (IS_GEN7(i965->intel.device_id))
+ if (IS_GEN7(i965->intel.device_id) ||
+ IS_GEN8(i965->intel.device_id))
memcpy(render_state->render_kernels,
(IS_HASWELL(i965->intel.device_id) ? render_kernels_gen7_haswell : render_kernels_gen7),
sizeof(render_state->render_kernels));
diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c
index 8b35744..e1f5a5e 100644
--- a/src/intel_batchbuffer.c
+++ b/src/intel_batchbuffer.c
@@ -184,7 +184,8 @@ intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch)
struct intel_driver_data *intel = batch->intel;
if (IS_GEN6(intel->device_id) ||
- IS_GEN7(intel->device_id)) {
+ IS_GEN7(intel->device_id) ||
+ IS_GEN8(intel->device_id)) {
if (batch->flag == I915_EXEC_RENDER) {
if (IS_GEN6(intel->device_id)) {
assert(batch->wa_render_bo);