From e2db8ba83915c3745135c9ae42cfc252678777e6 Mon Sep 17 00:00:00 2001 From: Gwenole Beauchesne Date: Fri, 26 Jul 2013 10:23:39 +0200 Subject: [PATCH] vpp: add basic processing support for packed YUV to packed YUV. Add support for video processing from packed YUV 4:2:2 formats (YUY2, UYVY) to packed YUV 4:2:2 formats. In particular, add support for HW accelerated vaPutImage() for packed YUV formats. https://bugs.freedesktop.org/show_bug.cgi?id=67338 Signed-off-by: Gwenole Beauchesne --- src/i965_post_processing.c | 71 +++++++++++++++++++- src/i965_post_processing.h | 1 + src/shaders/post_processing/gen5_6/Makefile.am | 5 +- .../post_processing/gen5_6/pa_load_save_pa.asm | 17 +++++ src/shaders/post_processing/gen7/Makefile.am | 1 + src/shaders/post_processing/gen7/pa_to_pa.asm | 17 +++++ 6 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 src/shaders/post_processing/gen5_6/pa_load_save_pa.asm create mode 100644 src/shaders/post_processing/gen7/pa_to_pa.asm diff --git a/src/i965_post_processing.c b/src/i965_post_processing.c index e91dc03..658acd7 100755 --- a/src/i965_post_processing.c +++ b/src/i965_post_processing.c @@ -104,6 +104,10 @@ static const uint32_t pp_pl3_load_save_pa_gen5[][4] = { #include "shaders/post_processing/gen5_6/pl3_load_save_pa.g4b.gen5" }; +static const uint32_t pp_pa_load_save_pa_gen5[][4] = { +#include "shaders/post_processing/gen5_6/pa_load_save_pa.g4b.gen5" +}; + static const uint32_t pp_pa_load_save_nv12_gen5[][4] = { #include "shaders/post_processing/gen5_6/pa_load_save_nv12.g4b.gen5" }; @@ -343,6 +347,18 @@ static struct pp_module pp_modules_gen5[] = { pp_plx_load_save_plx_initialize, }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen5, + sizeof(pp_pa_load_save_pa_gen5), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, }; static const uint32_t pp_null_gen6[][4] = { @@ -389,6 +405,10 @@ static const uint32_t pp_pl3_load_save_pa_gen6[][4] = { #include "shaders/post_processing/gen5_6/pl3_load_save_pa.g6b" }; +static const uint32_t pp_pa_load_save_pa_gen6[][4] = { +#include "shaders/post_processing/gen5_6/pa_load_save_pa.g6b" +}; + static const uint32_t pp_pa_load_save_nv12_gen6[][4] = { #include "shaders/post_processing/gen5_6/pa_load_save_nv12.g6b" }; @@ -584,6 +604,18 @@ static struct pp_module pp_modules_gen6[] = { pp_plx_load_save_plx_initialize, }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen6, + sizeof(pp_pa_load_save_pa_gen6), + NULL, + }, + + pp_plx_load_save_plx_initialize, + }, }; static const uint32_t pp_null_gen7[][4] = { @@ -626,6 +658,9 @@ static const uint32_t pp_nv12_load_save_pa_gen7[][4] = { static const uint32_t pp_pl3_load_save_pa_gen7[][4] = { #include "shaders/post_processing/gen7/pl3_to_pa.g7b" }; +static const uint32_t pp_pa_load_save_pa_gen7[][4] = { +#include "shaders/post_processing/gen7/pa_to_pa.g7b" +}; static const uint32_t pp_pa_load_save_nv12_gen7[][4] = { #include "shaders/post_processing/gen7/pa_to_pl2.g7b" }; @@ -844,6 +879,18 @@ static struct pp_module pp_modules_gen7[] = { gen7_pp_plx_avs_initialize, }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen7, + sizeof(pp_pa_load_save_pa_gen7), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, }; @@ -887,6 +934,9 @@ static const uint32_t pp_nv12_load_save_pa_gen75[][4] = { static const uint32_t pp_pl3_load_save_pa_gen75[][4] = { #include "shaders/post_processing/gen7/pl3_to_pa.g75b" }; +static const uint32_t pp_pa_load_save_pa_gen75[][4] = { +#include "shaders/post_processing/gen7/pa_to_pa.g75b" +}; static const uint32_t pp_pa_load_save_nv12_gen75[][4] = { #include "shaders/post_processing/gen7/pa_to_pl2.g75b" }; @@ -1080,6 +1130,18 @@ static struct pp_module pp_modules_gen75[] = { gen7_pp_plx_avs_initialize, }, + + { + { + "PA_PA module", + PP_PA_LOAD_SAVE_PA, + pp_pa_load_save_pa_gen75, + sizeof(pp_pa_load_save_pa_gen75), + NULL, + }, + + gen7_pp_plx_avs_initialize, + }, }; @@ -4943,7 +5005,14 @@ i965_image_pl1_processing(VADriverContextP ctx, dst_rect, PP_PA_LOAD_SAVE_PL3, NULL); - + } else if (fourcc == VA_FOURCC_YUY2 || fourcc == VA_FOURCC_UYVY) { + i965_post_processing_internal(ctx, i965->pp_context, + src_surface, + src_rect, + dst_surface, + dst_rect, + PP_PA_LOAD_SAVE_PA, + NULL); } else { return VA_STATUS_ERROR_UNKNOWN; } diff --git a/src/i965_post_processing.h b/src/i965_post_processing.h index 66fcdef..b6a2e67 100755 --- a/src/i965_post_processing.h +++ b/src/i965_post_processing.h @@ -53,6 +53,7 @@ enum PP_PA_LOAD_SAVE_PL3, PP_RGBX_LOAD_SAVE_NV12, PP_NV12_LOAD_SAVE_RGBX, + PP_PA_LOAD_SAVE_PA, NUM_PP_MODULES, }; diff --git a/src/shaders/post_processing/gen5_6/Makefile.am b/src/shaders/post_processing/gen5_6/Makefile.am index bb8caa4..4a13d9d 100755 --- a/src/shaders/post_processing/gen5_6/Makefile.am +++ b/src/shaders/post_processing/gen5_6/Makefile.am @@ -16,6 +16,7 @@ INTEL_PP_G4B_GEN5 = \ nv12_load_save_pl3.g4b.gen5 \ nv12_load_save_rgbx.g4b.gen5 \ nv12_scaling_nv12.g4b.gen5 \ + pa_load_save_pa.g4b.gen5 \ pa_load_save_nv12.g4b.gen5 \ pa_load_save_pl3.g4b.gen5 \ pl3_load_save_nv12.g4b.gen5 \ @@ -33,6 +34,7 @@ INTEL_PP_G6B = \ nv12_load_save_pl3.g6b \ nv12_load_save_rgbx.g6b \ nv12_scaling_nv12.g6b \ + pa_load_save_pa.g6b \ pa_load_save_nv12.g6b \ pa_load_save_pl3.g6b \ pl3_load_save_nv12.g6b \ @@ -50,6 +52,7 @@ INTEL_PP_ASM = \ nv12_load_save_pl3.asm \ nv12_load_save_rgbx.asm \ nv12_scaling_nv12.asm \ + pa_load_save_pa.asm \ pa_load_save_nv12.asm \ pa_load_save_pl3.asm \ pl3_load_save_nv12.asm \ @@ -178,7 +181,7 @@ endif all-local: $(TARGETS) -SUFFIXES = .g4a .g4b .g6a .g6b .g5s .g6s .asm +SUFFIXES = .g4a .g4b .g4b.gen5 .g6a .g6b .g5s .g6s .asm if HAVE_GEN4ASM .g4a.g4b: diff --git a/src/shaders/post_processing/gen5_6/pa_load_save_pa.asm b/src/shaders/post_processing/gen5_6/pa_load_save_pa.asm new file mode 100644 index 0000000..72c2a8a --- /dev/null +++ b/src/shaders/post_processing/gen5_6/pa_load_save_pa.asm @@ -0,0 +1,17 @@ +// Module name: PA_LOAD_SAVE_PA +.kernel PA_LOAD_SAVE_PA +.code + +#include "SetupVPKernel.asm" +#include "Multiple_Loop_Head.asm" +#include "PA_Load_8x8.asm" +#include "PL8x8_Save_PA.asm" +#include "Multiple_Loop.asm" + +END_THREAD // End of Thread + +.end_code + +.end_kernel + +// end of pa_load_save_pa.asm diff --git a/src/shaders/post_processing/gen7/Makefile.am b/src/shaders/post_processing/gen7/Makefile.am index f1a1c60..ec4a886 100644 --- a/src/shaders/post_processing/gen7/Makefile.am +++ b/src/shaders/post_processing/gen7/Makefile.am @@ -2,6 +2,7 @@ INTEL_PP_G7B = \ avs.g7b \ dndi.g7b \ nv12_dn_nv12.g7b \ + pa_to_pa.g7b \ pa_to_pl2.g7b \ pa_to_pl3.g7b \ pl2_to_pa.g7b \ diff --git a/src/shaders/post_processing/gen7/pa_to_pa.asm b/src/shaders/post_processing/gen7/pa_to_pa.asm new file mode 100644 index 0000000..f78e98d --- /dev/null +++ b/src/shaders/post_processing/gen7/pa_to_pa.asm @@ -0,0 +1,17 @@ +// Module name: AVS +.kernel PA_TO_PA +.code + +#include "VP_Setup.g4a" +#include "Set_Layer_0.g4a" +#include "Set_AVS_Buf_0123_VYUA.g4a" +#include "PA_AVS_Buf_0.g4a" +#include "PA_AVS_Buf_1.g4a" +#include "PA_AVS_Buf_2.g4a" +#include "PA_AVS_Buf_3.g4a" +#include "Save_AVS_PA.g4a" +#include "EOT.g4a" + +.end_code + +.end_kernel -- 1.7.9.5