[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