summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiang, Haihao <haihao.xiang@intel.com>2015-07-07 16:32:14 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2015-12-07 13:31:28 +0800
commit8fadc325d12b86e06aa3deb5a1e5c6298ad4b89a (patch)
tree059174840827be2ef86efb7c7646ee6e905a2bdd
parentdaf8f6c76287452f2bc37af83d9078831ba0a8b0 (diff)
Add support for P010 in vaPutSurface() in a X window system
Currently it converts P010 to RGBA32 because the drawable to vaPutSurface() is RGBA color v2: P010 has interleaved UV planar (Peng) v3: change commit log Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com> Signed-off-by: peng.chen <peng.c.chen@intel.com> Reviewed-by: Zhao Yakui <yakui.zhao@intel.com> Cc: Emil Velikov <emil.l.velikov@gmail.com> (cherry picked from commit bace1e29c669f3fe47cb41c57fc817b493fc7882)
-rw-r--r--src/gen9_render.c60
1 files changed, 37 insertions, 23 deletions
diff --git a/src/gen9_render.c b/src/gen9_render.c
index b45543a..4c24443 100644
--- a/src/gen9_render.c
+++ b/src/gen9_render.c
@@ -249,35 +249,48 @@ gen9_render_src_surfaces_state(
rh = obj_surface->orig_height;
region = obj_surface->bo;
- gen9_render_src_surface_state(ctx, 1, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags); /* Y */
- gen9_render_src_surface_state(ctx, 2, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags);
-
- if (obj_surface->fourcc == VA_FOURCC('N', 'V', '1', '2')) {
+ if (obj_surface->fourcc == VA_FOURCC('P', '0', '1', '0')) {
+ gen9_render_src_surface_state(ctx, 1, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R16_UNORM, flags); /* Y */
+ gen9_render_src_surface_state(ctx, 2, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R16_UNORM, flags);
gen9_render_src_surface_state(ctx, 3, region,
region_pitch * obj_surface->y_cb_offset,
obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
- I965_SURFACEFORMAT_R8G8_UNORM, flags); /* UV */
+ I965_SURFACEFORMAT_R16G16_UNORM, flags); /* UV */
gen9_render_src_surface_state(ctx, 4, region,
region_pitch * obj_surface->y_cb_offset,
obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
- I965_SURFACEFORMAT_R8G8_UNORM, flags);
+ I965_SURFACEFORMAT_R16G16_UNORM, flags);
} else {
- gen9_render_src_surface_state(ctx, 3, region,
- region_pitch * obj_surface->y_cb_offset,
- obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
- I965_SURFACEFORMAT_R8_UNORM, flags); /* U */
- gen9_render_src_surface_state(ctx, 4, region,
- region_pitch * obj_surface->y_cb_offset,
- obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
- I965_SURFACEFORMAT_R8_UNORM, flags);
- gen9_render_src_surface_state(ctx, 5, region,
- region_pitch * obj_surface->y_cr_offset,
- obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
- I965_SURFACEFORMAT_R8_UNORM, flags); /* V */
- gen9_render_src_surface_state(ctx, 6, region,
- region_pitch * obj_surface->y_cr_offset,
- obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
- I965_SURFACEFORMAT_R8_UNORM, flags);
+ gen9_render_src_surface_state(ctx, 1, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags); /* Y */
+ gen9_render_src_surface_state(ctx, 2, region, 0, rw, rh, region_pitch, I965_SURFACEFORMAT_R8_UNORM, flags);
+
+ if (obj_surface->fourcc == VA_FOURCC('N', 'V', '1', '2')) {
+ gen9_render_src_surface_state(ctx, 3, region,
+ region_pitch * obj_surface->y_cb_offset,
+ obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
+ I965_SURFACEFORMAT_R8G8_UNORM, flags); /* UV */
+ gen9_render_src_surface_state(ctx, 4, region,
+ region_pitch * obj_surface->y_cb_offset,
+ obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
+ I965_SURFACEFORMAT_R8G8_UNORM, flags);
+ } else {
+ gen9_render_src_surface_state(ctx, 3, region,
+ region_pitch * obj_surface->y_cb_offset,
+ obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
+ I965_SURFACEFORMAT_R8_UNORM, flags); /* U */
+ gen9_render_src_surface_state(ctx, 4, region,
+ region_pitch * obj_surface->y_cb_offset,
+ obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
+ I965_SURFACEFORMAT_R8_UNORM, flags);
+ gen9_render_src_surface_state(ctx, 5, region,
+ region_pitch * obj_surface->y_cr_offset,
+ obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
+ I965_SURFACEFORMAT_R8_UNORM, flags); /* V */
+ gen9_render_src_surface_state(ctx, 6, region,
+ region_pitch * obj_surface->y_cr_offset,
+ obj_surface->cb_cr_width, obj_surface->cb_cr_height, obj_surface->cb_cr_pitch,
+ I965_SURFACEFORMAT_R8_UNORM, flags);
+ }
}
}
@@ -773,7 +786,8 @@ gen9_render_upload_constants(VADriverContextP ctx,
*constant_buffer = 2;
} else {
- if (obj_surface->fourcc == VA_FOURCC('N', 'V', '1', '2'))
+ if (obj_surface->fourcc == VA_FOURCC('N', 'V', '1', '2') ||
+ obj_surface->fourcc == VA_FOURCC('P', '0', '1', '0'))
*constant_buffer = 1;
else
*constant_buffer = 0;