From ff68bb495257c7867589ff434a091d14e267b47e Mon Sep 17 00:00:00 2001 From: "Yew, Chang Ching" Date: Mon, 8 Nov 2021 10:14:29 +0800 Subject: onevpl: Adding basic wayland dmabuf support to samples Signed-off-by: Ung, Teng En Signed-off-by: Yew, Chang Ching Signed-off-by: Anuj Mittal --- ...e_misc-Addin-basic-wayland-dmabuf-support.patch | 90 +++++++++++++++++ ...le_misc-use-wayland-dmabuf-to-render-nv12.patch | 94 ++++++++++++++++++ ...in-wayland-scanner-auto-generate-on-cmake.patch | 98 +++++++++++++++++++ ...-find_program-to-detect-wayland-scanner-i.patch | 108 +++++++++++++++++++++ recipes-multimedia/onevpl/onevpl_2021.6.0.bb | 7 ++ 5 files changed, 397 insertions(+) create mode 100644 recipes-multimedia/onevpl/onevpl/0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch create mode 100644 recipes-multimedia/onevpl/onevpl/0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch create mode 100644 recipes-multimedia/onevpl/onevpl/0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch create mode 100644 recipes-multimedia/onevpl/onevpl/0001-samples-use-find_program-to-detect-wayland-scanner-i.patch (limited to 'recipes-multimedia/onevpl') diff --git a/recipes-multimedia/onevpl/onevpl/0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch b/recipes-multimedia/onevpl/onevpl/0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch new file mode 100644 index 00000000..96110ef8 --- /dev/null +++ b/recipes-multimedia/onevpl/onevpl/0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch @@ -0,0 +1,90 @@ +From 2e2bcb1817f2dc91adf85f5255a4792a6213a74e Mon Sep 17 00:00:00 2001 +From: "Ung, Teng En" +Date: Fri, 8 Oct 2021 14:19:40 +0000 +Subject: [PATCH 2/3] sample_misc: Addin basic wayland dmabuf support. + +Upstream-Status: Submitted +innersource PR #269 + +--- + .../sample_misc/wayland/include/class_wayland.h | 16 ++++++++++++++++ + .../sample_misc/wayland/src/class_wayland.cpp | 8 ++++++++ + 2 files changed, 24 insertions(+) + +diff --git a/tools/legacy/sample_misc/wayland/include/class_wayland.h b/tools/legacy/sample_misc/wayland/include/class_wayland.h +index 564b9b8b..e5267ec2 100644 +--- a/tools/legacy/sample_misc/wayland/include/class_wayland.h ++++ b/tools/legacy/sample_misc/wayland/include/class_wayland.h +@@ -32,6 +32,9 @@ extern "C" { + #include "sample_defs.h" + #include "vpl/mfxstructures.h" + #include "wayland-drm-client-protocol.h" ++#if defined(WAYLAND_LINUX_DMABUF_SUPPORT) ++ #include "linux-dmabuf-unstable-v1.h" ++#endif + + typedef struct buffer wld_buffer; + +@@ -93,6 +96,11 @@ public: + struct wl_drm* GetDrm() { + return m_drm; + } ++#if defined(WAYLAND_LINUX_DMABUF_SUPPORT) ++ struct zwp_linux_dmabuf_v1* GetDMABuf() { ++ return m_dmabuf; ++ } ++#endif + struct wl_shm* GetShm() { + return m_shm; + }; +@@ -120,6 +128,11 @@ public: + void SetDrm(struct wl_drm* drm) { + m_drm = drm; + } ++#if defined(WAYLAND_LINUX_DMABUF_SUPPORT) ++ void SetDMABuf(struct zwp_linux_dmabuf_v1* dmabuf) { ++ m_dmabuf = dmabuf; ++ } ++#endif + void DrmHandleDevice(const char* device); + void DrmHandleAuthenticated(); + void RegistryGlobal(struct wl_registry* registry, +@@ -147,6 +160,9 @@ private: + struct wl_compositor* m_compositor; + struct wl_shell* m_shell; + struct wl_drm* m_drm; ++#if defined(WAYLAND_LINUX_DMABUF_SUPPORT) ++ struct zwp_linux_dmabuf_v1* m_dmabuf; ++#endif + struct wl_shm* m_shm; + struct wl_shm_pool* m_pool; + struct wl_surface* m_surface; +diff --git a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp +index 65147973..dc2fc718 100644 +--- a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp ++++ b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp +@@ -50,6 +50,9 @@ Wayland::Wayland() + m_compositor(NULL), + m_shell(NULL), + m_drm(NULL), ++#if defined(WAYLAND_LINUX_DMABUF_SUPPORT) ++ m_dmabuf(NULL), ++#endif + m_shm(NULL), + m_pool(NULL), + m_surface(NULL), +@@ -360,6 +363,11 @@ void Wayland::RegistryGlobal(struct wl_registry* registry, + m_drm = static_cast(wl_registry_bind(registry, name, &wl_drm_interface, 2)); + wl_drm_add_listener(m_drm, &drm_listener, this); + } ++#if defined(WAYLAND_LINUX_DMABUF_SUPPORT) ++ else if(0 == strcmp(interface, "zwp_linux_dmabuf_v1")) ++ m_dmabuf = static_cast( ++ wl_registry_bind(registry, name, &zwp_linux_dmabuf_v1_interface, version)); ++#endif + } + + void Wayland::DrmHandleDevice(const char* name) { +-- +2.31.1 + diff --git a/recipes-multimedia/onevpl/onevpl/0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch b/recipes-multimedia/onevpl/onevpl/0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch new file mode 100644 index 00000000..d061e3ef --- /dev/null +++ b/recipes-multimedia/onevpl/onevpl/0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch @@ -0,0 +1,94 @@ +From 0091d3fea76e64ffbd537b2ae47b8912c89c09d7 Mon Sep 17 00:00:00 2001 +From: "Ung, Teng En" +Date: Fri, 8 Oct 2021 14:38:45 +0000 +Subject: [PATCH 3/3] sample_misc: use wayland dmabuf to render nv12 + +Upstream-Status: Submitted +innersource PR #269 + +--- + .../sample_misc/wayland/src/class_wayland.cpp | 60 +++++++++++++++---- + 1 file changed, 47 insertions(+), 13 deletions(-) + +diff --git a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp +index dc2fc718..d2e7e4e2 100644 +--- a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp ++++ b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp +@@ -26,6 +26,7 @@ or https://software.intel.com/en-us/media-client-solutions-support. + #include + extern "C" { + #include ++#include + #include + #include + } +@@ -305,20 +306,53 @@ struct wl_buffer* Wayland::CreatePrimeBuffer(uint32_t name, + int32_t offsets[3], + int32_t pitches[3]) { + struct wl_buffer* buffer = NULL; +- if (NULL == m_drm) +- return NULL; + +- buffer = wl_drm_create_prime_buffer(m_drm, +- name, +- width, +- height, +- format, +- offsets[0], +- pitches[0], +- offsets[1], +- pitches[1], +- offsets[2], +- pitches[2]); ++#if defined(WAYLAND_LINUX_DMABUF_SUPPORT) ++ if (format == WL_DRM_FORMAT_NV12) { ++ if(NULL == m_dmabuf) ++ return NULL; ++ ++ struct zwp_linux_buffer_params_v1 *dmabuf_params = NULL; ++ int i = 0; ++ uint64_t modifier = I915_FORMAT_MOD_Y_TILED; ++ ++ dmabuf_params = zwp_linux_dmabuf_v1_create_params(m_dmabuf); ++ for(i = 0; i < 2; i++) { ++ zwp_linux_buffer_params_v1_add(dmabuf_params, ++ name, ++ i, ++ offsets[i], ++ pitches[i], ++ modifier >> 32, ++ modifier & 0xffffffff); ++ } ++ ++ buffer = zwp_linux_buffer_params_v1_create_immed(dmabuf_params, ++ width, ++ height, ++ format, ++ 0); ++ ++ zwp_linux_buffer_params_v1_destroy(dmabuf_params); ++ } else ++#endif ++ { ++ if(NULL == m_drm) ++ return NULL; ++ ++ buffer = wl_drm_create_prime_buffer(m_drm, ++ name, ++ width, ++ height, ++ format, ++ offsets[0], ++ pitches[0], ++ offsets[1], ++ pitches[1], ++ offsets[2], ++ pitches[2]); ++ } ++ + return buffer; + } + +-- +2.31.1 + diff --git a/recipes-multimedia/onevpl/onevpl/0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch b/recipes-multimedia/onevpl/onevpl/0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch new file mode 100644 index 00000000..6fab79e5 --- /dev/null +++ b/recipes-multimedia/onevpl/onevpl/0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch @@ -0,0 +1,98 @@ +From 6ef9dd02e297ae20da422f2f3f4f298061efd6e9 Mon Sep 17 00:00:00 2001 +From: "Ung, Teng En" +Date: Fri, 15 Oct 2021 11:55:13 +0000 +Subject: [PATCH 1/3] samples: Addin wayland-scanner auto generate on cmake. + +Upstream-Status: Submitted +innersource PR #269 + +--- + tools/legacy/sample_common/CMakeLists.txt | 21 ++++++++++ + .../legacy/sample_misc/wayland/CMakeLists.txt | 39 +++++++++++++++++++ + 2 files changed, 60 insertions(+) + +diff --git a/tools/legacy/sample_common/CMakeLists.txt b/tools/legacy/sample_common/CMakeLists.txt +index 0ff83aa4..0ed8b390 100644 +--- a/tools/legacy/sample_common/CMakeLists.txt ++++ b/tools/legacy/sample_common/CMakeLists.txt +@@ -92,6 +92,27 @@ if(UNIX) + target_include_directories( + ${TARGET} + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../sample_misc/wayland/include) ++ ++ pkg_check_modules(PKG_WAYLAND_SCANNER "wayland-scanner>=1.15") ++ pkg_check_modules(PKG_WAYLAND_PROTCOLS "wayland-protocols>=1.15") ++ ++ if(PKG_WAYLAND_SCANNER_FOUND AND PKG_WAYLAND_PROTCOLS_FOUND) ++ pkg_get_variable(WAYLAND_PROTOCOLS_PATH wayland-protocols pkgdatadir) ++ if(WAYLAND_PROTOCOLS_PATH) ++ find_file( ++ WAYLAND_LINUX_DMABUF_XML_PATH linux-dmabuf-unstable-v1.xml ++ PATHS ${WAYLAND_PROTOCOLS_PATH}/unstable/linux-dmabuf ++ NO_DEFAULT_PATH) ++ endif() ++ endif() ++ ++ if(WAYLAND_LINUX_DMABUF_XML_PATH) ++ target_compile_definitions( ++ ${TARGET} PUBLIC -DWAYLAND_LINUX_DMABUF_SUPPORT) ++ target_include_directories( ++ ${TARGET} ++ PUBLIC ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland) ++ endif() + else() + message( + WARNING +diff --git a/tools/legacy/sample_misc/wayland/CMakeLists.txt b/tools/legacy/sample_misc/wayland/CMakeLists.txt +index 1fe98da4..01e6029b 100644 +--- a/tools/legacy/sample_misc/wayland/CMakeLists.txt ++++ b/tools/legacy/sample_misc/wayland/CMakeLists.txt +@@ -29,6 +29,45 @@ target_sources( + ${CMAKE_CURRENT_SOURCE_DIR}/src/listener_wayland.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/wayland-drm-protocol.c) + ++if(PKG_WAYLAND_SCANNER_FOUND AND PKG_WAYLAND_PROTCOLS_FOUND AND WAYLAND_LINUX_DMABUF_XML_PATH) ++ pkg_get_variable(WAYLAND_SCANNER_BIN_PATH wayland-scanner bindir) ++ pkg_get_variable(WAYLAND_SCANNER_BIN wayland-scanner wayland_scanner) ++ ++ if(WAYLAND_SCANNER_BIN_PATH AND WAYLAND_SCANNER_BIN) ++ execute_process( ++ COMMAND "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}" ++ "client-header" "${WAYLAND_LINUX_DMABUF_XML_PATH}" ++ "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.h" ++ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" ++ RESULT_VARIABLE WAYLAND_SCANNER_RESULT) ++ if (WAYLAND_SCANNER_RESULT) ++ message(ERROR "Failed to generate linux-dmabuf-unstable-v1.h") ++ return() ++ endif() ++ ++ execute_process( ++ COMMAND "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}" ++ "private-code" "${WAYLAND_LINUX_DMABUF_XML_PATH}" ++ "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c" ++ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" ++ RESULT_VARIABLE WAYLAND_SCANNER_RESULT) ++ if (WAYLAND_SCANNER_RESULT) ++ message(ERROR "Failed to generate linux-dmabuf-unstable-v1.c") ++ return() ++ endif() ++ ++ include_directories( ++ ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland) ++ add_definitions(-DWAYLAND_LINUX_DMABUF_SUPPORT) ++ target_sources( ++ ${TARGET} ++ PRIVATE ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c) ++ else() ++ message(ERROR "Don't know how to execute wayland-scanner.") ++ return() ++ endif() ++endif() ++ + target_link_libraries(${TARGET} sample_common wayland-client va drm drm_intel) + + install(TARGETS ${TARGET} LIBRARY DESTINATION ${_TOOLS_LIB_PATH}) +-- +2.31.1 + diff --git a/recipes-multimedia/onevpl/onevpl/0001-samples-use-find_program-to-detect-wayland-scanner-i.patch b/recipes-multimedia/onevpl/onevpl/0001-samples-use-find_program-to-detect-wayland-scanner-i.patch new file mode 100644 index 00000000..6f1ad93e --- /dev/null +++ b/recipes-multimedia/onevpl/onevpl/0001-samples-use-find_program-to-detect-wayland-scanner-i.patch @@ -0,0 +1,108 @@ +From c69500c88058358bdc6c0a036d90b000d63f2a41 Mon Sep 17 00:00:00 2001 +From: "Ung, Teng En" +Date: Wed, 3 Nov 2021 14:23:15 +0000 +Subject: [PATCH 4/4] samples: use find_program to detect wayland-scanner in + cmake + +Upstream-Status: Submitted +innersource PR #269 + +--- + tools/legacy/sample_common/CMakeLists.txt | 4 +- + tools/legacy/sample_misc/wayland/CMakeLists.txt | 59 +++++++++++-------------- + 2 files changed, 28 insertions(+), 35 deletions(-) + +diff --git a/tools/legacy/sample_common/CMakeLists.txt b/tools/legacy/sample_common/CMakeLists.txt +index 0ed8b39..658d44d 100644 +--- a/tools/legacy/sample_common/CMakeLists.txt ++++ b/tools/legacy/sample_common/CMakeLists.txt +@@ -93,10 +93,10 @@ if(UNIX) + ${TARGET} + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../sample_misc/wayland/include) + +- pkg_check_modules(PKG_WAYLAND_SCANNER "wayland-scanner>=1.15") ++ find_program(WAYLAND_SCANNER_BIN "wayland-scanner") + pkg_check_modules(PKG_WAYLAND_PROTCOLS "wayland-protocols>=1.15") + +- if(PKG_WAYLAND_SCANNER_FOUND AND PKG_WAYLAND_PROTCOLS_FOUND) ++ if(WAYLAND_SCANNER_BIN AND PKG_WAYLAND_PROTCOLS_FOUND) + pkg_get_variable(WAYLAND_PROTOCOLS_PATH wayland-protocols pkgdatadir) + if(WAYLAND_PROTOCOLS_PATH) + find_file( +diff --git a/tools/legacy/sample_misc/wayland/CMakeLists.txt b/tools/legacy/sample_misc/wayland/CMakeLists.txt +index 01e6029..7625bc5 100644 +--- a/tools/legacy/sample_misc/wayland/CMakeLists.txt ++++ b/tools/legacy/sample_misc/wayland/CMakeLists.txt +@@ -29,43 +29,36 @@ target_sources( + ${CMAKE_CURRENT_SOURCE_DIR}/src/listener_wayland.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/wayland-drm-protocol.c) + +-if(PKG_WAYLAND_SCANNER_FOUND AND PKG_WAYLAND_PROTCOLS_FOUND AND WAYLAND_LINUX_DMABUF_XML_PATH) +- pkg_get_variable(WAYLAND_SCANNER_BIN_PATH wayland-scanner bindir) +- pkg_get_variable(WAYLAND_SCANNER_BIN wayland-scanner wayland_scanner) ++ if(WAYLAND_SCANNER_BIN AND PKG_WAYLAND_PROTCOLS_FOUND AND WAYLAND_LINUX_DMABUF_XML_PATH) + +- if(WAYLAND_SCANNER_BIN_PATH AND WAYLAND_SCANNER_BIN) +- execute_process( +- COMMAND "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}" +- "client-header" "${WAYLAND_LINUX_DMABUF_XML_PATH}" +- "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.h" +- WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" +- RESULT_VARIABLE WAYLAND_SCANNER_RESULT) +- if (WAYLAND_SCANNER_RESULT) +- message(ERROR "Failed to generate linux-dmabuf-unstable-v1.h") +- return() +- endif() +- +- execute_process( +- COMMAND "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}" +- "private-code" "${WAYLAND_LINUX_DMABUF_XML_PATH}" +- "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c" +- WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" +- RESULT_VARIABLE WAYLAND_SCANNER_RESULT) +- if (WAYLAND_SCANNER_RESULT) +- message(ERROR "Failed to generate linux-dmabuf-unstable-v1.c") +- return() +- endif() ++ execute_process( ++ COMMAND "${WAYLAND_SCANNER_BIN}" ++ "client-header" "${WAYLAND_LINUX_DMABUF_XML_PATH}" ++ "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.h" ++ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" ++ RESULT_VARIABLE WAYLAND_SCANNER_RESULT) ++ if (WAYLAND_SCANNER_RESULT) ++ message(ERROR "Failed to generate linux-dmabuf-unstable-v1.h") ++ return() ++ endif() + +- include_directories( +- ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland) +- add_definitions(-DWAYLAND_LINUX_DMABUF_SUPPORT) +- target_sources( +- ${TARGET} +- PRIVATE ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c) +- else() +- message(ERROR "Don't know how to execute wayland-scanner.") ++ execute_process( ++ COMMAND "${WAYLAND_SCANNER_BIN}" ++ "private-code" "${WAYLAND_LINUX_DMABUF_XML_PATH}" ++ "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c" ++ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" ++ RESULT_VARIABLE WAYLAND_SCANNER_RESULT) ++ if (WAYLAND_SCANNER_RESULT) ++ message(ERROR "Failed to generate linux-dmabuf-unstable-v1.c") + return() + endif() ++ ++ include_directories( ++ ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland) ++ add_definitions(-DWAYLAND_LINUX_DMABUF_SUPPORT) ++ target_sources( ++ ${TARGET} ++ PRIVATE ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c) + endif() + + target_link_libraries(${TARGET} sample_common wayland-client va drm drm_intel) +-- +2.7.4 + diff --git a/recipes-multimedia/onevpl/onevpl_2021.6.0.bb b/recipes-multimedia/onevpl/onevpl_2021.6.0.bb index 86a2b60b..ae198e9a 100644 --- a/recipes-multimedia/onevpl/onevpl_2021.6.0.bb +++ b/recipes-multimedia/onevpl/onevpl_2021.6.0.bb @@ -11,6 +11,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=c18ea6bb4786a26bf4eee88a7424a408 \ SRC_URI = "git://github.com/oneapi-src/oneVPL.git;protocol=https;branch=master \ file://0001-Fix-basename-build-issue-with-musl_libc.patch \ file://0001-Extends-errorTypes-to-support-JPEG-errors.patch \ + file://0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch \ + file://0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch \ + file://0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch \ + file://0001-samples-use-find_program-to-detect-wayland-scanner-i.patch \ " SRCREV = "cdf7444dc971544d148c51e0d93a2df1bb55dda7" S = "${WORKDIR}/git" @@ -18,6 +22,9 @@ S = "${WORKDIR}/git" inherit cmake DEPENDS += "libva pkgconfig-native" +PACKAGECONFIG ??= "tools" +PACKAGECONFIG[tools] = "-DBUILD_TOOLS=ON, -DBUILD_TOOLS=OFF, wayland wayland-native wayland-protocols" + do_install:append() { mkdir -p ${D}${datadir}/oneVPL/samples mv ${D}${bindir}/sample_* ${D}${datadir}/oneVPL/samples -- cgit v1.2.3-54-g00ecf