summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2018-07-18 17:38:07 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2018-09-25 16:27:39 +0300
commitc7b3e2465773f9fb30bf45976732028e4e4dc365 (patch)
tree6703d13493ffc7804e55f4f1af3dea9a50e49524
parent42359edda12e5ebf715f2a978944a18baaba6490 (diff)
lib/kms: Pass the number of planes explicitly to __kms_addfb()
Currently __kms_addfb() assumes that only the first plane can be at offset 0. I don't particularly like such assumptions so let's just pass in the number of planes explicitly. We'll also require offsets[] to be passed in always. Nothing really to gain by making it optional. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
-rw-r--r--lib/igt_fb.c1
-rw-r--r--lib/ioctl_wrappers.c9
-rw-r--r--lib/ioctl_wrappers.h2
-rw-r--r--tests/kms_available_modes_crc.c5
-rw-r--r--tests/kms_draw_crc.c3
-rw-r--r--tests/prime_vgem.c3
6 files changed, 13 insertions, 10 deletions
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 13fce9f0..b7d70edc 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -876,6 +876,7 @@ igt_create_fb_with_bo_size(int fd, int width, int height,
do_or_die(__kms_addfb(fd, fb->gem_handle, width, height,
format, tiling, pitches, fb->offsets,
+ fb_num_planes(f),
LOCAL_DRM_MODE_FB_MODIFIERS, &fb_id));
} else {
uint32_t handles[4];
diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c
index a3485726..d992e015 100644
--- a/lib/ioctl_wrappers.c
+++ b/lib/ioctl_wrappers.c
@@ -1674,7 +1674,7 @@ int __kms_addfb(int fd, uint32_t handle,
uint32_t width, uint32_t height,
uint32_t pixel_format, uint64_t modifier,
uint32_t strides[4], uint32_t offsets[4],
- uint32_t flags, uint32_t *buf_id)
+ int num_planes, uint32_t flags, uint32_t *buf_id)
{
struct drm_mode_fb_cmd2 f;
int ret, i;
@@ -1687,14 +1687,11 @@ int __kms_addfb(int fd, uint32_t handle,
f.height = height;
f.pixel_format = pixel_format;
f.flags = flags;
- f.handles[0] = handle;
- f.pitches[0] = strides[0];
- f.modifier[0] = modifier;
- for (i = 1; i < 4 && offsets && offsets[i]; i++) {
+ for (i = 0; i < num_planes; i++) {
f.handles[i] = handle;
- f.pitches[i] = strides[i];
f.modifier[i] = modifier;
+ f.pitches[i] = strides[i];
f.offsets[i] = offsets[i];
}
diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h
index 67bf5056..872e3056 100644
--- a/lib/ioctl_wrappers.h
+++ b/lib/ioctl_wrappers.h
@@ -239,7 +239,7 @@ int __kms_addfb(int fd, uint32_t handle,
uint32_t width, uint32_t height,
uint32_t pixel_format, uint64_t modifier,
uint32_t strides[4], uint32_t offsets[4],
- uint32_t flags, uint32_t *buf_id);
+ int num_planes, uint32_t flags, uint32_t *buf_id);
/**
* to_user_pointer:
diff --git a/tests/kms_available_modes_crc.c b/tests/kms_available_modes_crc.c
index e77bd80f..09fb2e99 100644
--- a/tests/kms_available_modes_crc.c
+++ b/tests/kms_available_modes_crc.c
@@ -256,6 +256,7 @@ static bool setup_fb(data_t *data, igt_output_t *output, igt_plane_t *plane,
unsigned tile_width, tile_height;
uint32_t strides[4] = {};
uint32_t offsets[4] = {};
+ int num_planes = 1;
uint64_t tiling;
int bpp = 0;
int i;
@@ -302,6 +303,7 @@ static bool setup_fb(data_t *data, igt_output_t *output, igt_plane_t *plane,
offsets[1] = data->size;
strides[1] = strides[0];
gemsize = data->size * 2;
+ num_planes = 2;
}
data->gem_handle = gem_create(data->gfx_fd, gemsize);
@@ -312,7 +314,8 @@ static bool setup_fb(data_t *data, igt_output_t *output, igt_plane_t *plane,
ret = __kms_addfb(data->gfx_fd, data->gem_handle, w, h,
format, tiling, strides, offsets,
- LOCAL_DRM_MODE_FB_MODIFIERS, &data->fb.fb_id);
+ num_planes, LOCAL_DRM_MODE_FB_MODIFIERS,
+ &data->fb.fb_id);
if(ret < 0) {
igt_info("Creating fb for format %s failed, return code %d\n",
diff --git a/tests/kms_draw_crc.c b/tests/kms_draw_crc.c
index fb10d7cc..90904714 100644
--- a/tests/kms_draw_crc.c
+++ b/tests/kms_draw_crc.c
@@ -156,6 +156,7 @@ static void get_method_crc(enum igt_draw_method method, uint32_t drm_format,
static bool format_is_supported(uint32_t format, uint64_t modifier)
{
uint32_t gem_handle, fb_id;
+ unsigned int offsets[4] = {};
unsigned int strides[4] = {};
int ret;
@@ -163,7 +164,7 @@ static bool format_is_supported(uint32_t format, uint64_t modifier)
format, modifier,
0, NULL, &strides[0], NULL);
ret = __kms_addfb(drm_fd, gem_handle, 64, 64,
- format, modifier, strides, NULL,
+ format, modifier, strides, offsets, 1,
LOCAL_DRM_MODE_FB_MODIFIERS, &fb_id);
drmModeRmFB(drm_fd, fb_id);
gem_close(drm_fd, gem_handle);
diff --git a/tests/prime_vgem.c b/tests/prime_vgem.c
index b95fd4f5..5e0c4e28 100644
--- a/tests/prime_vgem.c
+++ b/tests/prime_vgem.c
@@ -751,6 +751,7 @@ static void test_flip(int i915, int vgem, unsigned hang)
for (int i = 0; i < 2; i++) {
uint32_t strides[4] = {};
+ uint32_t offsets[4] = {};
int fd;
bo[i].width = 1024;
@@ -768,7 +769,7 @@ static void test_flip(int i915, int vgem, unsigned hang)
do_or_die(__kms_addfb(i915, handle[i],
bo[i].width, bo[i].height,
DRM_FORMAT_XRGB8888, I915_TILING_NONE,
- strides, NULL,
+ strides, offsets, 1,
LOCAL_DRM_MODE_FB_MODIFIERS, &fb_id[i]));
igt_assert(fb_id[i]);
}