diff --git a/src/platform/linux/graphics.cpp b/src/platform/linux/graphics.cpp index 448051f4..ab6702c2 100644 --- a/src/platform/linux/graphics.cpp +++ b/src/platform/linux/graphics.cpp @@ -560,21 +560,25 @@ namespace egl { std::optional import_target(display_t::pointer egl_display, std::array &&fds, const surface_descriptor_t &r8, const surface_descriptor_t &gr88) { - EGLAttrib img_attr_planes[2][13] { - { EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_R8, + EGLAttrib img_attr_planes[2][17] { + { EGL_LINUX_DRM_FOURCC_EXT, r8.fourcc, EGL_WIDTH, r8.width, EGL_HEIGHT, r8.height, EGL_DMA_BUF_PLANE0_FD_EXT, r8.fds[0], EGL_DMA_BUF_PLANE0_OFFSET_EXT, r8.offsets[0], EGL_DMA_BUF_PLANE0_PITCH_EXT, r8.pitches[0], + EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, (EGLAttrib) (r8.modifier & 0xFFFFFFFF), + EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT, (EGLAttrib) (r8.modifier >> 32), EGL_NONE }, - { EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_GR88, + { EGL_LINUX_DRM_FOURCC_EXT, gr88.fourcc, EGL_WIDTH, gr88.width, EGL_HEIGHT, gr88.height, - EGL_DMA_BUF_PLANE0_FD_EXT, r8.fds[0], + EGL_DMA_BUF_PLANE0_FD_EXT, gr88.fds[0], EGL_DMA_BUF_PLANE0_OFFSET_EXT, gr88.offsets[0], EGL_DMA_BUF_PLANE0_PITCH_EXT, gr88.pitches[0], + EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT, (EGLAttrib) (gr88.modifier & 0xFFFFFFFF), + EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT, (EGLAttrib) (gr88.modifier >> 32), EGL_NONE }, }; diff --git a/src/platform/linux/vaapi.cpp b/src/platform/linux/vaapi.cpp index 77daeab5..f210bba4 100644 --- a/src/platform/linux/vaapi.cpp +++ b/src/platform/linux/vaapi.cpp @@ -37,7 +37,7 @@ extern "C" struct AVBufferRef; namespace va { constexpr auto SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 = 0x40000000; constexpr auto EXPORT_SURFACE_WRITE_ONLY = 0x0002; - constexpr auto EXPORT_SURFACE_COMPOSED_LAYERS = 0x0008; + constexpr auto EXPORT_SURFACE_SEPARATE_LAYERS = 0x0004; using VADisplay = void *; using VAStatus = int; @@ -350,7 +350,7 @@ namespace va { this->va_display, surface, va::SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2, - va::EXPORT_SURFACE_WRITE_ONLY | va::EXPORT_SURFACE_COMPOSED_LAYERS, + va::EXPORT_SURFACE_WRITE_ONLY | va::EXPORT_SURFACE_SEPARATE_LAYERS, &prime); if (status) { BOOST_LOG(error) << "Couldn't export va surface handle: ["sv << (int) surface << "]: "sv << va::errorStr(status); @@ -370,17 +370,17 @@ namespace va { { (int) prime.width, (int) prime.height, { prime.objects[prime.layers[0].object_index[0]].fd, -1, -1, -1 }, - 0, - 0, + prime.layers[0].drm_format, + prime.objects[prime.layers[0].object_index[0]].drm_format_modifier, { prime.layers[0].pitch[0] }, { prime.layers[0].offset[0] } }, { (int) prime.width / 2, (int) prime.height / 2, - { prime.objects[prime.layers[0].object_index[1]].fd, -1, -1, -1 }, - 0, - 0, - { prime.layers[0].pitch[1] }, - { prime.layers[0].offset[1] } }); + { prime.objects[prime.layers[1].object_index[0]].fd, -1, -1, -1 }, + prime.layers[1].drm_format, + prime.objects[prime.layers[1].object_index[0]].drm_format_modifier, + { prime.layers[1].pitch[0] }, + { prime.layers[1].offset[0] } }); if (!nv12_opt) { return -1;