summaryrefslogtreecommitdiffstats
path: root/recipes-multimedia/vpl/files/0004-Fix-rDRM-DMA-methods.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-multimedia/vpl/files/0004-Fix-rDRM-DMA-methods.patch')
-rw-r--r--recipes-multimedia/vpl/files/0004-Fix-rDRM-DMA-methods.patch294
1 files changed, 0 insertions, 294 deletions
diff --git a/recipes-multimedia/vpl/files/0004-Fix-rDRM-DMA-methods.patch b/recipes-multimedia/vpl/files/0004-Fix-rDRM-DMA-methods.patch
deleted file mode 100644
index de746a95..00000000
--- a/recipes-multimedia/vpl/files/0004-Fix-rDRM-DMA-methods.patch
+++ /dev/null
@@ -1,294 +0,0 @@
1From 61f75283da56105adca1d3034422ddac2bc88c18 Mon Sep 17 00:00:00 2001
2From: Vincent Cheah Beng Keat <vincent.beng.keat.cheah@intel.com>
3Date: Wed, 19 Jun 2024 21:08:14 +0800
4Subject: [PATCH 4/9] Fix rDRM DMA methods
5
6Upstream-Status: Backport [https://github.com/intel/libvpl-tools/commit/0c12ef0fed3d2e8c8f017e6fa5bf74e55ec51412]
7
8The commits also remove out libDRM intel bufmgr (i915) dependency
9where XE does not have the equivalent API. Tested i915 for both
10DRM_PRIME and KERNEL_DRM, both methods could work correctly.
11
12Signed-off-by: Lim Siew Hoon <siew.hoon.lim@intel.com>
13---
14 .../sample_common/include/vaapi_utils.h | 2 +
15 .../sample_common/include/vaapi_utils_drm.h | 2 +
16 .../legacy/sample_common/src/vaapi_utils.cpp | 3 +-
17 .../sample_common/src/vaapi_utils_drm.cpp | 159 ++++++++++--------
18 4 files changed, 93 insertions(+), 73 deletions(-)
19
20diff --git a/tools/legacy/sample_common/include/vaapi_utils.h b/tools/legacy/sample_common/include/vaapi_utils.h
21index a3a8544..868dd0e 100644
22--- a/tools/legacy/sample_common/include/vaapi_utils.h
23+++ b/tools/legacy/sample_common/include/vaapi_utils.h
24@@ -281,6 +281,7 @@ public:
25 typedef drm_intel_bufmgr* (*drm_intel_bufmgr_gem_init_type)(int fd, int batch_size);
26 typedef int (*drm_intel_bo_gem_export_to_prime_type)(drm_intel_bo*, int*);
27 typedef void (*drm_intel_bufmgr_destroy_type)(drm_intel_bufmgr*);
28+ typedef int (*drmPrimeFDToHandle_type)(int fd, int prime_fd, uint32_t* handle);
29
30 DrmIntel_Proxy();
31 ~DrmIntel_Proxy();
32@@ -290,6 +291,7 @@ public:
33 __DECLARE(drm_intel_bo_unreference);
34 __DECLARE(drm_intel_bufmgr_gem_init);
35 __DECLARE(drm_intel_bufmgr_destroy);
36+ __DECLARE(drmPrimeFDToHandle);
37 #if defined(X11_DRI3_SUPPORT)
38 __DECLARE(drm_intel_bo_gem_export_to_prime);
39 #endif
40diff --git a/tools/legacy/sample_common/include/vaapi_utils_drm.h b/tools/legacy/sample_common/include/vaapi_utils_drm.h
41index 78109aa..1ba6ea8 100644
42--- a/tools/legacy/sample_common/include/vaapi_utils_drm.h
43+++ b/tools/legacy/sample_common/include/vaapi_utils_drm.h
44@@ -130,6 +130,8 @@ private:
45 mfxExtContentLightLevelInfo* contentLight,
46 bool enableHDR);
47
48+ uint32_t convertVaFourccToDrmFormat(uint32_t vaFourcc);
49+
50 const MfxLoader::DRM_Proxy m_drmlib;
51 const MfxLoader::DrmIntel_Proxy m_drmintellib;
52
53diff --git a/tools/legacy/sample_common/src/vaapi_utils.cpp b/tools/legacy/sample_common/src/vaapi_utils.cpp
54index f01b07f..48a51b0 100644
55--- a/tools/legacy/sample_common/src/vaapi_utils.cpp
56+++ b/tools/legacy/sample_common/src/vaapi_utils.cpp
57@@ -136,7 +136,8 @@ DrmIntel_Proxy::DrmIntel_Proxy()
58 SIMPLE_LOADER_FUNCTION(drm_intel_bo_gem_create_from_prime),
59 SIMPLE_LOADER_FUNCTION(drm_intel_bo_unreference),
60 SIMPLE_LOADER_FUNCTION(drm_intel_bufmgr_gem_init),
61- SIMPLE_LOADER_FUNCTION(drm_intel_bufmgr_destroy)
62+ SIMPLE_LOADER_FUNCTION(drm_intel_bufmgr_destroy),
63+ SIMPLE_LOADER_FUNCTION(drmPrimeFDToHandle)
64 #if defined(X11_DRI3_SUPPORT)
65 ,
66 SIMPLE_LOADER_FUNCTION(drm_intel_bo_gem_export_to_prime)
67diff --git a/tools/legacy/sample_common/src/vaapi_utils_drm.cpp b/tools/legacy/sample_common/src/vaapi_utils_drm.cpp
68index 7227588..44bc693 100644
69--- a/tools/legacy/sample_common/src/vaapi_utils_drm.cpp
70+++ b/tools/legacy/sample_common/src/vaapi_utils_drm.cpp
71@@ -14,6 +14,7 @@
72 #include <stdexcept>
73
74 #include <drm_fourcc.h>
75+ #include <xf86drm.h>
76 #include "i915_drm.h"
77 #include "vaapi_utils_drm.h"
78
79@@ -211,7 +212,6 @@ drmRenderer::drmRenderer(int fd, mfxI32 monitorType)
80 m_crtc(),
81 m_connectorProperties(),
82 m_crtcProperties(),
83- m_bufmgr(NULL),
84 m_overlay_wrn(true),
85 m_bSentHDR(false),
86 m_bHdrSupport(false),
87@@ -257,11 +257,6 @@ drmRenderer::~drmRenderer() {
88 m_drmlib.drmModeFreeCrtc(m_crtc);
89 m_drmlib.drmModeFreeObjectProperties(m_connectorProperties);
90 m_drmlib.drmModeFreeObjectProperties(m_crtcProperties);
91-
92- if (m_bufmgr) {
93- m_drmintellib.drm_intel_bufmgr_destroy(m_bufmgr);
94- m_bufmgr = NULL;
95- }
96 }
97
98 drmModeObjectPropertiesPtr drmRenderer::getProperties(int fd, int objectId, int32_t objectTypeId) {
99@@ -752,36 +747,75 @@ int drmRenderer::drmSendHdrMetaData(mfxExtMasteringDisplayColourVolume* displayC
100 return 0;
101 }
102
103+uint32_t drmRenderer::convertVaFourccToDrmFormat(uint32_t vaFourcc) {
104+ switch (vaFourcc) {
105+ case VA_FOURCC_ARGB:
106+ return DRM_FORMAT_ARGB8888;
107+ case VA_FOURCC_NV12:
108+ return DRM_FORMAT_NV12;
109+ #if defined(DRM_LINUX_P010_SUPPORT)
110+ case VA_FOURCC_P010:
111+ return DRM_FORMAT_P010;
112+ #endif
113+
114+ default:
115+ printf("unsupported fourcc\n");
116+ return 0;
117+ }
118+}
119+
120 void* drmRenderer::acquire(mfxMemId mid) {
121- vaapiMemId* vmid = (vaapiMemId*)mid;
122+ vaapiMemId* vmid = (vaapiMemId*)mid;
123+
124 uint32_t fbhandle = 0;
125+ uint32_t handles[4], pitches[4], offsets[4], flags = 0;
126+ uint64_t modifiers[4];
127+ int ret;
128+
129+ MSDK_ZERO_MEMORY(handles);
130+ MSDK_ZERO_MEMORY(pitches);
131+ MSDK_ZERO_MEMORY(offsets);
132+ MSDK_ZERO_MEMORY(modifiers);
133
134 if (vmid->m_buffer_info.mem_type == VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME) {
135- if (!m_bufmgr) {
136- m_bufmgr = m_drmintellib.drm_intel_bufmgr_gem_init(m_fd, 4096);
137- if (!m_bufmgr)
138- return NULL;
139- }
140+ uint32_t bo_handle;
141
142- drm_intel_bo* bo =
143- m_drmintellib.drm_intel_bo_gem_create_from_prime(m_bufmgr,
144- (int)vmid->m_buffer_info.handle,
145- vmid->m_buffer_info.mem_size);
146- if (!bo)
147+ ret = m_drmintellib.drmPrimeFDToHandle(m_fd, (int)vmid->m_buffer_info.handle, &bo_handle);
148+ if (ret)
149 return NULL;
150
151- int ret = m_drmlib.drmModeAddFB(m_fd,
152- vmid->m_image.width,
153- vmid->m_image.height,
154- 24,
155- 32,
156- vmid->m_image.pitches[0],
157- bo->handle,
158- &fbhandle);
159- if (ret) {
160- return NULL;
161+ for (uint32_t i = 0; i < vmid->m_image.num_planes; i++) {
162+ pitches[i] = vmid->m_image.pitches[i];
163+ offsets[i] = vmid->m_image.offsets[i];
164+ handles[i] = bo_handle;
165+
166+ if (VA_FOURCC_NV12 == vmid->m_fourcc
167+ #if defined(DRM_LINUX_P010_SUPPORT)
168+ || VA_FOURCC_P010 == vmid->m_fourcc
169+ #endif
170+ ) {
171+ flags = DRM_MODE_FB_MODIFIERS;
172+ modifiers[i] = I915_FORMAT_MOD_Y_TILED;
173+ if (m_bRequiredTiled4) {
174+ #if defined(DRM_LINUX_MODIFIER_TILED4_SUPPORT)
175+ modifiers[i] = I915_FORMAT_MOD_4_TILED;
176+ #endif
177+ }
178+ }
179 }
180- m_drmintellib.drm_intel_bo_unreference(bo);
181+
182+ ret = m_drmlib.drmModeAddFB2WithModifiers(m_fd,
183+ vmid->m_image.width,
184+ vmid->m_image.height,
185+ convertVaFourccToDrmFormat(vmid->m_fourcc),
186+ handles,
187+ pitches,
188+ offsets,
189+ modifiers,
190+ &fbhandle,
191+ flags);
192+ if (ret)
193+ return NULL;
194 }
195 else if (vmid->m_buffer_info.mem_type == VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM) {
196 struct drm_gem_open flink_open;
197@@ -793,62 +827,42 @@ void* drmRenderer::acquire(mfxMemId mid) {
198 if (ret)
199 return NULL;
200
201- uint32_t handles[4], pitches[4], offsets[4], pixel_format, flags = 0;
202- uint64_t modifiers[4];
203-
204- memset(&handles, 0, sizeof(handles));
205- memset(&pitches, 0, sizeof(pitches));
206- memset(&offsets, 0, sizeof(offsets));
207- memset(&modifiers, 0, sizeof(modifiers));
208-
209- handles[0] = flink_open.handle;
210- pitches[0] = vmid->m_image.pitches[0];
211- offsets[0] = vmid->m_image.offsets[0];
212+ for (uint32_t i = 0; i < vmid->m_image.num_planes; i++) {
213+ pitches[i] = vmid->m_image.pitches[i];
214+ offsets[i] = vmid->m_image.offsets[i];
215+ handles[i] = flink_open.handle;
216
217- if (VA_FOURCC_NV12 == vmid->m_fourcc
218+ if (VA_FOURCC_NV12 == vmid->m_fourcc
219 #if defined(DRM_LINUX_P010_SUPPORT)
220- || VA_FOURCC_P010 == vmid->m_fourcc
221+ || VA_FOURCC_P010 == vmid->m_fourcc
222 #endif
223- ) {
224- pixel_format = DRM_FORMAT_NV12;
225- #if defined(DRM_LINUX_P010_SUPPORT)
226- if (VA_FOURCC_P010 == vmid->m_fourcc)
227- pixel_format = DRM_FORMAT_P010;
228- #endif
229- handles[1] = flink_open.handle;
230- pitches[1] = vmid->m_image.pitches[1];
231- offsets[1] = vmid->m_image.offsets[1];
232- modifiers[0] = modifiers[1] = I915_FORMAT_MOD_Y_TILED;
233- flags = DRM_MODE_FB_MODIFIERS;
234-
235- if (m_bRequiredTiled4) {
236+ ) {
237+ flags = DRM_MODE_FB_MODIFIERS;
238+ modifiers[i] = I915_FORMAT_MOD_Y_TILED;
239+ if (m_bRequiredTiled4) {
240 #if defined(DRM_LINUX_MODIFIER_TILED4_SUPPORT)
241- modifiers[0] = modifiers[1] = I915_FORMAT_MOD_4_TILED;
242+ modifiers[i] = I915_FORMAT_MOD_4_TILED;
243 #endif
244- }
245- else {
246- modifiers[0] = modifiers[1] = I915_FORMAT_MOD_Y_TILED;
247-
248- struct drm_i915_gem_set_tiling set_tiling;
249- memset(&set_tiling, 0, sizeof(set_tiling));
250- set_tiling.handle = flink_open.handle;
251- set_tiling.tiling_mode = I915_TILING_Y;
252- set_tiling.stride = vmid->m_image.pitches[0];
253- ret = m_drmlib.drmIoctl(m_fd, DRM_IOCTL_I915_GEM_SET_TILING, &set_tiling);
254- if (ret) {
255- printf("DRM_IOCTL_I915_GEM_SET_TILING Failed ret = %d\n", ret);
256- return NULL;
257+ }
258+ else {
259+ struct drm_i915_gem_set_tiling set_tiling;
260+ memset(&set_tiling, 0, sizeof(set_tiling));
261+ set_tiling.handle = flink_open.handle;
262+ set_tiling.tiling_mode = I915_TILING_Y;
263+ set_tiling.stride = vmid->m_image.pitches[0];
264+ ret = m_drmlib.drmIoctl(m_fd, DRM_IOCTL_I915_GEM_SET_TILING, &set_tiling);
265+ if (ret) {
266+ printf("DRM_IOCTL_I915_GEM_SET_TILING Failed ret = %d\n", ret);
267+ return NULL;
268+ }
269 }
270 }
271 }
272- else {
273- pixel_format = DRM_FORMAT_XRGB8888;
274- }
275
276 ret = m_drmlib.drmModeAddFB2WithModifiers(m_fd,
277 vmid->m_image.width,
278 vmid->m_image.height,
279- pixel_format,
280+ convertVaFourccToDrmFormat(vmid->m_fourcc),
281 handles,
282 pitches,
283 offsets,
284@@ -905,6 +919,7 @@ mfxStatus drmRenderer::render(mfxFrameSurface1* pSurface) {
285 if (!setMaster()) {
286 return MFX_ERR_UNKNOWN;
287 }
288+
289 if ((m_mode.hdisplay == memid->m_image.width) && (m_mode.vdisplay == memid->m_image.height)) {
290 // surface in the framebuffer exactly matches crtc scanout port, so we
291 // can scanout from this framebuffer for the whole crtc
292--
2932.43.2
294