From 2b2ba534e2ba4ee7f9ef89f1cec9136061974b94 Mon Sep 17 00:00:00 2001 From: SergeyIvanov87 Date: Tue, 12 Jul 2022 12:41:23 +0300 Subject: [PATCH] Forbid Rctx in IE for VAAPI temporary, Add preproc VAAPI --- .../gapi/samples/onevpl_infer_single_roi.cpp | 6 ++- .../engine/preproc_engine_interface.cpp | 51 ++++++++++++++----- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/modules/gapi/samples/onevpl_infer_single_roi.cpp b/modules/gapi/samples/onevpl_infer_single_roi.cpp index 8759295f6a..ff080aceec 100644 --- a/modules/gapi/samples/onevpl_infer_single_roi.cpp +++ b/modules/gapi/samples/onevpl_infer_single_roi.cpp @@ -300,9 +300,13 @@ support_matrix resolved_conf{{ {"CPU", {{ "CPU", {/* unsupported: preproc mix */}}, { "GPU", {/* unsupported: preproc mix */}} }}, - +#if defined(HAVE_DIRECTX) && defined(HAVE_D3D11) {"GPU", {{ "CPU", std::make_shared(true, false)}, { "GPU", std::make_shared(true, true)}}} +#else // TODO VAAPI under linux doesn't support GPU IE remote context + {"GPU", {{ "CPU", std::make_shared(true, false)}, + { "GPU", std::make_shared(true, false)}}} +#endif }} }, {"CPU", {{ diff --git a/modules/gapi/src/streaming/onevpl/engine/preproc_engine_interface.cpp b/modules/gapi/src/streaming/onevpl/engine/preproc_engine_interface.cpp index ff9f103b5a..b5787320d6 100644 --- a/modules/gapi/src/streaming/onevpl/engine/preproc_engine_interface.cpp +++ b/modules/gapi/src/streaming/onevpl/engine/preproc_engine_interface.cpp @@ -14,6 +14,7 @@ #include "streaming/onevpl/accelerators/accel_policy_dx11.hpp" #include "streaming/onevpl/accelerators/accel_policy_cpu.hpp" +#include "streaming/onevpl/accelerators/accel_policy_va_api.hpp" #include "streaming/onevpl/accelerators/surface/surface.hpp" #include "streaming/onevpl/cfg_param_device_selector.hpp" #include "streaming/onevpl/cfg_params_parser.hpp" @@ -41,30 +42,56 @@ IPreprocEngine::create_preproc_engine_impl(const onevpl::Device &device, cv::util::suppress_unused_warning(context); std::unique_ptr dispatcher(new VPPPreprocDispatcher); #ifdef HAVE_ONEVPL - if (device.get_type() == onevpl::AccelType::DX11) { - bool gpu_pp_is_created = false; + bool pp_is_created = false; + switch (device.get_type()) { + case onevpl::AccelType::DX11: { + GAPI_LOG_INFO(nullptr, "Creating DX11 VPP preprocessing engine"); #ifdef HAVE_DIRECTX #ifdef HAVE_D3D11 - GAPI_LOG_INFO(nullptr, "Creating DX11 VPP preprocessing engine"); - // create GPU VPP preproc engine - dispatcher->insert_worker( + // create GPU VPP preproc engine + dispatcher->insert_worker( std::unique_ptr{ new VPLDX11AccelerationPolicy( std::make_shared( device, context, CfgParams{})) }); - GAPI_LOG_INFO(nullptr, "DX11 VPP preprocessing engine created"); - gpu_pp_is_created = true; + GAPI_LOG_INFO(nullptr, "DX11 VPP preprocessing engine created"); + pp_is_created = true; #endif #endif - GAPI_Assert(gpu_pp_is_created && "VPP preproc for GPU is requested, but it is avaiable only for DX11 at now"); - } else { - GAPI_LOG_INFO(nullptr, "Creating CPU VPP preprocessing engine"); - dispatcher->insert_worker( + break; + } + case onevpl::AccelType::VAAPI: { + GAPI_LOG_INFO(nullptr, "Creating VAAPI VPP preprocessing engine"); +#ifdef __linux__ +#if defined(HAVE_VA) || defined(HAVE_VA_INTEL) + // create GPU VPP preproc engine + dispatcher->insert_worker( + std::unique_ptr{ + new VPLVAAPIAccelerationPolicy( + std::make_shared( + device, context, CfgParams{})) + }); + GAPI_LOG_INFO(nullptr, "VAAPI VPP preprocessing engine created"); + pp_is_created = true; +#endif // defined(HAVE_VA) || defined(HAVE_VA_INTEL) +#endif // #ifdef __linux__ + break; + } + default: { + GAPI_LOG_INFO(nullptr, "Creating CPU VPP preprocessing engine"); + dispatcher->insert_worker( std::unique_ptr{ new VPLCPUAccelerationPolicy( std::make_shared(CfgParams{}))}); - GAPI_LOG_INFO(nullptr, "CPU VPP preprocessing engine created"); + GAPI_LOG_INFO(nullptr, "CPU VPP preprocessing engine created"); + pp_is_created = true; + break; + } + } + if (!pp_is_created) { + GAPI_LOG_WARNING(nullptr, "Cannot create VPP preprocessing engine: configuration unsupported"); + GAPI_Assert(false && "VPP preproc unsupported"); } #endif // HAVE_ONEVPL return dispatcher;