[Intel-gfx] [i-g-t PATCH v1 06/14] lib: Add wrapper for DRM_IOCTL_MODE_CREATE_DUMB
Daniel Vetter
daniel at ffwll.ch
Sat Mar 5 12:21:56 UTC 2016
On Wed, Mar 02, 2016 at 03:00:13PM +0100, Tomeu Vizoso wrote:
> In order to test drivers that don't have support for proper buffer
> objects, add a wrapper for creating dumb buffer objects that will be
> called from the lib code for those subtests that don't need to care.
>
> Signed-off-by: Tomeu Vizoso <tomeu.vizoso at collabora.com>
Hm, in a way ioctl_wrappers.c is just i915 gem ioctl wrappers. I think
dumb makes much more sense as part of the kmstest_* set of functions in
igt_kms.c. Also maybe kmstest_dumb_create for consistency.
-Daniel
> ---
>
> lib/ioctl_wrappers.c | 36 ++++++++++++++++++++++++++++++++++++
> lib/ioctl_wrappers.h | 1 +
> tests/drm_read.c | 16 +---------------
> tests/gem_exec_blt.c | 18 +-----------------
> 4 files changed, 39 insertions(+), 32 deletions(-)
>
> diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c
> index 0221b7fef3a1..d842d860ba65 100644
> --- a/lib/ioctl_wrappers.c
> +++ b/lib/ioctl_wrappers.c
> @@ -531,6 +531,42 @@ uint32_t gem_create(int fd, uint64_t size)
> }
>
> /**
> + * dumb_create:
> + * @fd: open drm file descriptor
> + * @width: width of the buffer in pixels
> + * @height: height of the buffer in pixels
> + * @bpp: bytes per pixel of the buffer
> + *
> + * This wraps the CREATE_DUMB ioctl, which allocates a new dumb buffer object
> + * for the specified dimensions.
> + *
> + * Returns: The file-private handle of the created buffer object
> + */
> +uint32_t dumb_create(int fd, int width, int height, int bpp, unsigned *stride,
> + unsigned *size)
> +{
> + struct drm_mode_create_dumb create;
> +
> + memset(&create, 0, sizeof(create));
> + create.width = width;
> + create.height = height;
> + create.bpp = bpp;
> +
> + create.handle = 0;
> + do_ioctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &create);
> + igt_assert(create.handle);
> + igt_assert(create.size >= width * height * bpp / 8);
> +
> + if (stride)
> + *stride = create.pitch;
> +
> + if (size)
> + *size = create.size;
> +
> + return create.handle;
> +}
> +
> +/**
> * __gem_execbuf:
> * @fd: open i915 drm file descriptor
> * @execbuf: execbuffer data structure
> diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h
> index f59eafba4bdd..9282ffdd8520 100644
> --- a/lib/ioctl_wrappers.h
> +++ b/lib/ioctl_wrappers.h
> @@ -62,6 +62,7 @@ uint32_t __gem_create_stolen(int fd, uint64_t size);
> uint32_t gem_create_stolen(int fd, uint64_t size);
> uint32_t __gem_create(int fd, int size);
> uint32_t gem_create(int fd, uint64_t size);
> +uint32_t dumb_create(int fd, int width, int height, int bpp, unsigned *stride, unsigned *size);
> void gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf);
> int __gem_execbuf(int fd, struct drm_i915_gem_execbuffer2 *execbuf);
>
> diff --git a/tests/drm_read.c b/tests/drm_read.c
> index faa3df862ea6..a27e5522daa0 100644
> --- a/tests/drm_read.c
> +++ b/tests/drm_read.c
> @@ -120,20 +120,6 @@ static void test_invalid_buffer(int in)
> teardown(fd);
> }
>
> -static uint32_t dumb_create(int fd)
> -{
> - struct drm_mode_create_dumb arg;
> -
> - arg.bpp = 32;
> - arg.width = 32;
> - arg.height = 32;
> -
> - do_ioctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &arg);
> - igt_assert(arg.size >= 4096);
> -
> - return arg.handle;
> -}
> -
> static void test_fault_buffer(int in)
> {
> int fd = setup(in, 0);
> @@ -141,7 +127,7 @@ static void test_fault_buffer(int in)
> char *buf;
>
> memset(&arg, 0, sizeof(arg));
> - arg.handle = dumb_create(fd);
> + arg.handle = dumb_create(fd, 32, 32, 32, NULL, NULL);
>
> do_ioctl(fd, DRM_IOCTL_MODE_MAP_DUMB, &arg);
>
> diff --git a/tests/gem_exec_blt.c b/tests/gem_exec_blt.c
> index 74f5c2ba87ad..42a030fb4f57 100644
> --- a/tests/gem_exec_blt.c
> +++ b/tests/gem_exec_blt.c
> @@ -170,22 +170,6 @@ static const char *bytes_per_sec(char *buf, double v)
> return buf;
> }
>
> -static uint32_t dumb_create(int fd)
> -{
> - struct drm_mode_create_dumb arg;
> - int ret;
> -
> - arg.bpp = 32;
> - arg.width = 32;
> - arg.height = 32;
> -
> - ret = drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &arg);
> - igt_assert_eq(ret, 0);
> - igt_assert(arg.size >= 4096);
> -
> - return arg.handle;
> -}
> -
> static int dcmp(const void *A, const void *B)
> {
> const double *a = A, *b = B;
> @@ -209,7 +193,7 @@ static void run(int object_size, bool dumb)
>
> fd = drm_open_driver(DRIVER_INTEL);
> if (dumb)
> - handle = dumb_create(fd);
> + handle = dumb_create(fd, 32, 32, 32, NULL, NULL);
> else
> handle = gem_create(fd, 4096);
>
> --
> 2.5.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the Intel-gfx
mailing list