summaryrefslogtreecommitdiff
path: root/lib/igt_fb.c
diff options
context:
space:
mode:
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>2019-04-02 13:45:22 -0400
committerNicholas Kazlauskas <nicholas.kazlauskas@amd.com>2019-04-10 08:53:21 -0400
commita1701d0bb565de68d2db279fdf4f95ecb0e61c59 (patch)
treee31c047d05df9c3fa705fa8a2242795793d62538 /lib/igt_fb.c
parent256c6107ee127d2ff07d23dfeb3b8d828cb43b37 (diff)
lib/igt_fb: Create AMD YUV buffers with AMD GEM IOCTL
The kmstest_dumb_create API isn't suitable for creating multi-planar buffers since it tries to calculate the size based on the first plane's pitch only. AMDGPU requires that the luma pitch be aligned to 256 for YUV buffers which results in crashes on kms_plane@pixel-format-pipe-*-planes tests when using kmstest_dumb_create since the buffer returned is smaller than needed (16384 size returned, 24576 size required). Create and map the buffer with the correct size by using the AMD helpers introduced by this patch: igt_amd_create_bo and igt_amd_mmap_bo. Cc: Harry Wentland <harry.wentland@amd.com> Cc: Leo Li <sunpeng.li@amd.com> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Leo Li <sunpeng.li@amd.com>
Diffstat (limited to 'lib/igt_fb.c')
-rw-r--r--lib/igt_fb.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 6adf4222..f5c9a9f1 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -38,6 +38,7 @@
#include "igt_kms.h"
#include "igt_matrix.h"
#include "igt_vc4.h"
+#include "igt_amd.h"
#include "igt_x86.h"
#include "ioctl_wrappers.h"
#include "intel_batchbuffer.h"
@@ -763,7 +764,8 @@ static int create_bo_for_fb(struct igt_fb *fb)
* them, so we need to make sure to use a device BO then.
*/
if (fb->modifier || fb->size || fb->strides[0] ||
- (is_i915_device(fd) && igt_format_is_yuv(fb->drm_format)))
+ (is_i915_device(fd) && igt_format_is_yuv(fb->drm_format)) ||
+ (is_amdgpu_device(fd) && igt_format_is_yuv(fb->drm_format)))
device_bo = true;
/* Sets offets and stride if necessary. */
@@ -787,6 +789,8 @@ static int create_bo_for_fb(struct igt_fb *fb)
if (fb->modifier == DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED)
igt_vc4_set_tiling(fd, fb->gem_handle,
fb->modifier);
+ } else if (is_amdgpu_device(fd)) {
+ fb->gem_handle = igt_amd_create_bo(fd, fb->size);
} else {
igt_assert(false);
}
@@ -1832,6 +1836,9 @@ static void *map_bo(int fd, struct igt_fb *fb)
else if (is_vc4_device(fd))
ptr = igt_vc4_mmap_bo(fd, fb->gem_handle, fb->size,
PROT_READ | PROT_WRITE);
+ else if (is_amdgpu_device(fd))
+ ptr = igt_amd_mmap_bo(fd, fb->gem_handle, fb->size,
+ PROT_READ | PROT_WRITE);
else
igt_assert(false);