-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
drm/selftests: Add tests for drm_internal_framebuffer_create
Add tests that verify that drm_internal_framebuffer_create creates buffers correctly by creating a dummy drm_device with a mock function for the fb_create callback. To decide if a buffer has been created or not it just checks if fb_create callback has been called for the particular drm_mode_fb_cmd2 that's being tested. Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Alexandru Gheorghe <alexandru-cosmin.gheorghe@arm.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181101151051.1509-8-alexandru-cosmin.gheorghe@arm.com
- Loading branch information
Alexandru Gheorghe
committed
Nov 2, 2018
1 parent
9aefed1
commit 6ff3d9f
Showing
4 changed files
with
347 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
test-drm_modeset-y := test-drm_modeset_common.o test-drm_plane_helper.o \ | ||
test-drm_format.o | ||
test-drm_format.o test-drm_framebuffer.o | ||
|
||
obj-$(CONFIG_DRM_DEBUG_SELFTEST) += test-drm_mm.o test-drm_modeset.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,344 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* Test cases for the drm_framebuffer functions | ||
*/ | ||
|
||
#include <drm/drmP.h> | ||
#include "../drm_crtc_internal.h" | ||
|
||
#include "test-drm_modeset_common.h" | ||
|
||
#define MIN_WIDTH 4 | ||
#define MAX_WIDTH 4096 | ||
#define MIN_HEIGHT 4 | ||
#define MAX_HEIGHT 4096 | ||
|
||
struct drm_framebuffer_test { | ||
int buffer_created; | ||
struct drm_mode_fb_cmd2 cmd; | ||
const char *name; | ||
}; | ||
|
||
static struct drm_framebuffer_test createbuffer_tests[] = { | ||
{ .buffer_created = 1, .name = "ABGR8888 normal sizes", | ||
.cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .pitches = { 4 * 600, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "ABGR8888 max sizes", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "ABGR8888 pitch greater than min required", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH + 1, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "ABGR8888 pitch less than min required", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH - 1, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "ABGR8888 Invalid width", | ||
.cmd = { .width = MAX_WIDTH + 1, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .pitches = { 4 * (MAX_WIDTH + 1), 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "ABGR8888 Invalid buffer handle", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 0, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "No pixel format", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = 0, | ||
.handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "ABGR8888 Width 0", | ||
.cmd = { .width = 0, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "ABGR8888 Height 0", | ||
.cmd = { .width = MAX_WIDTH, .height = 0, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "ABGR8888 Out of bound height * pitch combination", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .offsets = { UINT_MAX - 1, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "ABGR8888 Large buffer offset", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 }, | ||
.pitches = { 4 * MAX_WIDTH, 0, 0 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "ABGR8888 Valid buffer modifier", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 }, .pitches = { 4 * MAX_WIDTH, 0, 0 }, | ||
.flags = DRM_MODE_FB_MODIFIERS, .modifier = { AFBC_FORMAT_MOD_YTR, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 }, | ||
.pitches = { 4 * MAX_WIDTH, 0, 0 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .offsets = { UINT_MAX / 2, 0, 0 }, | ||
.pitches = { 4 * MAX_WIDTH, 4 * MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_ABGR8888, | ||
.handles = { 1, 0, 0 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.pitches = { 4 * MAX_WIDTH, 4 * MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "NV12 Normal sizes", | ||
.cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 0 }, .pitches = { 600, 600, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "NV12 Max sizes", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 0 }, .pitches = { MAX_WIDTH, MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "NV12 Invalid pitch", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 0 }, .pitches = { MAX_WIDTH, MAX_WIDTH - 1, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "NV12 Invalid modifier/misssing DRM_MODE_FB_MODIFIERS flag", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 0 }, .modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0, 0 }, | ||
.pitches = { MAX_WIDTH, MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "NV12 different modifier per-plane", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 0 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0, 0 }, | ||
.pitches = { MAX_WIDTH, MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 0 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0 }, | ||
.pitches = { MAX_WIDTH, MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 0 }, .modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, | ||
DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, 0 }, | ||
.pitches = { MAX_WIDTH, MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "NV12 Modifier for inexistent plane", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 0 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.modifier = { DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, DRM_FORMAT_MOD_SAMSUNG_64_32_TILE, | ||
DRM_FORMAT_MOD_SAMSUNG_64_32_TILE }, | ||
.pitches = { MAX_WIDTH, MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "NV12 Handle for inexistent plane", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS, .pitches = { MAX_WIDTH, MAX_WIDTH, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS", | ||
.cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_NV12, | ||
.handles = { 1, 1, 1 }, .pitches = { 600, 600, 600 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "YVU420 Normal sizes", | ||
.cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.pitches = { 600, 300, 300 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "YVU420 DRM_MODE_FB_MODIFIERS set without modifier", | ||
.cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .pitches = { 600, 300, 300 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "YVU420 Max sizes", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), | ||
DIV_ROUND_UP(MAX_WIDTH, 2) }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "YVU420 Invalid pitch", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2) - 1, | ||
DIV_ROUND_UP(MAX_WIDTH, 2) }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "YVU420 Different pitches", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2) + 1, | ||
DIV_ROUND_UP(MAX_WIDTH, 2) + 7 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "YVU420 Different buffer offsets/pitches", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .offsets = { MAX_WIDTH, MAX_WIDTH + MAX_WIDTH * MAX_HEIGHT, | ||
MAX_WIDTH + 2 * MAX_WIDTH * MAX_HEIGHT }, | ||
.pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2) + 1, DIV_ROUND_UP(MAX_WIDTH, 2) + 7 }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .modifier = { AFBC_FORMAT_MOD_SPARSE, 0, 0 }, | ||
.pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, 0 }, | ||
.pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, 0 }, | ||
.pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "YVU420 Valid modifier", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE }, | ||
.pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "YVU420 Different modifiers per plane", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE | AFBC_FORMAT_MOD_YTR, | ||
AFBC_FORMAT_MOD_SPARSE }, | ||
.pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) }, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "YVU420 Modifier for inexistent plane", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_YVU420, | ||
.handles = { 1, 1, 1 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, | ||
AFBC_FORMAT_MOD_SPARSE }, | ||
.pitches = { MAX_WIDTH, DIV_ROUND_UP(MAX_WIDTH, 2), DIV_ROUND_UP(MAX_WIDTH, 2) }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "X0L2 Normal sizes", | ||
.cmd = { .width = 600, .height = 600, .pixel_format = DRM_FORMAT_X0L2, | ||
.handles = { 1, 0, 0 }, .pitches = { 1200, 0, 0 } | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "X0L2 Max sizes", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2, | ||
.handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH, 0, 0 } | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "X0L2 Invalid pitch", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2, | ||
.handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH - 1, 0, 0 } | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "X0L2 Pitch greater than minimum required", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2, | ||
.handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH + 1, 0, 0 } | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "X0L2 Handle for inexistent plane", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2, | ||
.handles = { 1, 1, 0 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
.pitches = { 2 * MAX_WIDTH + 1, 0, 0 } | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2, | ||
.handles = { 1, 0, 0 }, .offsets = { 0, 0, 3 }, | ||
.pitches = { 2 * MAX_WIDTH + 1, 0, 0 } | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "X0L2 Modifier without DRM_MODE_FB_MODIFIERS set", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2, | ||
.handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH + 1, 0, 0 }, | ||
.modifier = { AFBC_FORMAT_MOD_SPARSE, 0, 0 }, | ||
} | ||
}, | ||
{ .buffer_created = 1, .name = "X0L2 Valid modifier", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, .pixel_format = DRM_FORMAT_X0L2, | ||
.handles = { 1, 0, 0 }, .pitches = { 2 * MAX_WIDTH + 1, 0, 0 }, | ||
.modifier = { AFBC_FORMAT_MOD_SPARSE, 0, 0 }, .flags = DRM_MODE_FB_MODIFIERS, | ||
} | ||
}, | ||
{ .buffer_created = 0, .name = "X0L2 Modifier for inexistent plane", | ||
.cmd = { .width = MAX_WIDTH, .height = MAX_HEIGHT, | ||
.pixel_format = DRM_FORMAT_X0L2, .handles = { 1, 0, 0 }, | ||
.pitches = { 2 * MAX_WIDTH + 1, 0, 0 }, | ||
.modifier = { AFBC_FORMAT_MOD_SPARSE, AFBC_FORMAT_MOD_SPARSE, 0 }, | ||
.flags = DRM_MODE_FB_MODIFIERS, | ||
} | ||
}, | ||
}; | ||
|
||
static struct drm_framebuffer *fb_create_mock(struct drm_device *dev, | ||
struct drm_file *file_priv, | ||
const struct drm_mode_fb_cmd2 *mode_cmd) | ||
{ | ||
int *buffer_created = dev->dev_private; | ||
*buffer_created = 1; | ||
return ERR_PTR(-EINVAL); | ||
} | ||
|
||
static int execute_drm_mode_fb_cmd2(struct drm_mode_fb_cmd2 *r) | ||
{ | ||
int buffer_created = 0; | ||
struct drm_framebuffer *fb; | ||
struct drm_mode_config_funcs mock_config_funcs = { | ||
.fb_create = fb_create_mock, | ||
}; | ||
struct drm_device mock_drm_device = { | ||
.mode_config = { | ||
.min_width = MIN_WIDTH, | ||
.max_width = MAX_WIDTH, | ||
.min_height = MIN_HEIGHT, | ||
.max_height = MAX_HEIGHT, | ||
.allow_fb_modifiers = true, | ||
.funcs = &mock_config_funcs, | ||
}, | ||
.dev_private = &buffer_created | ||
}; | ||
|
||
fb = drm_internal_framebuffer_create(&mock_drm_device, r, NULL); | ||
return buffer_created; | ||
} | ||
|
||
int igt_check_drm_framebuffer_create(void *ignored) | ||
{ | ||
int i = 0; | ||
|
||
for (i = 0; i < ARRAY_SIZE(createbuffer_tests); i++) { | ||
FAIL(createbuffer_tests[i].buffer_created != | ||
execute_drm_mode_fb_cmd2(&createbuffer_tests[i].cmd), | ||
"Test %d: \"%s\" failed\n", i, createbuffer_tests[i].name); | ||
} | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters