[PATCH v2 libdrm 6/7] tegra: Add gr2d-fill test

Thierry Reding thierry.reding at gmail.com
Fri May 2 07:25:55 PDT 2014


On Thu, Apr 10, 2014 at 07:28:16PM +0200, Erik Faye-Lund wrote:
> On Wed, Apr 9, 2014 at 1:40 PM, Thierry Reding <thierry.reding at gmail.com> wrote:
> > diff --git a/tests/tegra/gr2d-fill.c b/tests/tegra/gr2d-fill.c
> > new file mode 100644
> > index 000000000000..b6ba35a9d668
> > --- /dev/null
> > +++ b/tests/tegra/gr2d-fill.c
> > @@ -0,0 +1,146 @@
> > +/*
> > + * Copyright © 2014 NVIDIA Corporation
> > + *
> > + * Permission is hereby granted, free of charge, to any person obtaining a
> > + * copy of this software and associated documentation files (the "Software"),
> > + * to deal in the Software without restriction, including without limitation
> > + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> > + * and/or sell copies of the Software, and to permit persons to whom the
> > + * Software is furnished to do so, subject to the following conditions:
> > + *
> > + * The above copyright notice and this permission notice shall be included in
> > + * all copies or substantial portions of the Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> > + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> > + * OTHER DEALINGS IN THE SOFTWARE.
> > + */
> > +
> > +#ifdef HAVE_CONFIG_H
> > +#  include "config.h"
> > +#endif
> > +
> > +#include <errno.h>
> > +#include <fcntl.h>
> > +#include <stdbool.h>
> > +#include <stdint.h>
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include <string.h>
> > +#include <unistd.h>
> > +
> > +#include <sys/ioctl.h>
> > +
> > +#include "xf86drm.h"
> > +#include "xf86drmMode.h"
> > +#include "drm_fourcc.h"
> > +
> > +#include "drm-test-tegra.h"
> > +#include "tegra.h"
> > +
> > +int main(int argc, char *argv[])
> > +{
> > +       uint32_t format = DRM_FORMAT_XRGB8888;
> > +       struct drm_tegra_gr2d *gr2d;
> > +       struct drm_framebuffer *fb;
> > +       struct drm_screen *screen;
> > +       unsigned int pitch, size;
> > +       struct drm_tegra_bo *bo;
> > +       struct drm_tegra *drm;
> > +       uint32_t handle;
> > +       int fd, err;
> > +       void *ptr;
> > +
> > +       fd = drm_open(argv[1]);
> > +       if (fd < 0) {
> > +               fprintf(stderr, "failed to open DRM device %s: %s\n", argv[1],
> > +                       strerror(errno));
> > +               return 1;
> > +       }
> 
> I'm not quite sure I understand this part. Why would argv[1] be
> anything else than NULL? Is this useful for manual debugging, perhaps?

Yes. On newer Tegra generations the nouveau driver can create its own
device files in /dev/dri and depending on device probe order, the card0
device can be the wrong one. For such cases these test programs can be
passed the path to the correct device via the command-line.

Probably a better approach would be to search for a compatible device
via udev matching or iterating over /dev/dri/card* and querying the
driver name (which is what drm_tegra_new() already does). But that seems
overkill currently. Perhaps when this turns into a more fully-fledged
test suite that could be implemented more cleverly.

For now I've addressed this by making the tests fallback to a default
device (/dev/dri/card0) if no argument has been specified.

> > +       err = drm_tegra_gr2d_fill(gr2d, fb, fb->width / 4, fb->height / 4,
> > +                                 fb->width / 2, fb->height / 2, 0x00000000);
> > +       if (err < 0) {
> > +               fprintf(stderr, "failed to fill rectangle: %s\n",
> > +                       strerror(-err));
> > +               return 1;
> > +       }
> > +
> > +       sleep(1);
> > +
> 
> Why do we need to sleep here?

This is a visual test, so that one second gives me some time to see if
the result looks as expected.

I have tentative plans to implement a set of more automated tests, where
an image is rendered and the checksum computed over the content can be
compared with a known good reference checksum, but for now this is
better than nothing.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20140502/dab0c1e9/attachment.sig>


More information about the dri-devel mailing list