diff options
author | Thierry Reding <treding@nvidia.com> | 2014-02-24 11:55:13 +0100 |
---|---|---|
committer | Javier Jardón <jjardon@gnome.org> | 2014-11-21 15:27:26 +0000 |
commit | f5793d4617c490dc785be7aadb98cf3e86ecbcdd (patch) | |
tree | 1aacdd2826df374465f729269773287bb08d1c53 | |
parent | 41b48655dff962fd560b192d4236aea068f514b8 (diff) | |
download | drm-f5793d4617c490dc785be7aadb98cf3e86ecbcdd.tar.gz |
WIP: VIC test
-rw-r--r-- | tests/tegra/Makefile.am | 3 | ||||
-rw-r--r-- | tests/tegra/vic-syncpt.c | 101 |
2 files changed, 103 insertions, 1 deletions
diff --git a/tests/tegra/Makefile.am b/tests/tegra/Makefile.am index 5d12fb0f..cc0413d0 100644 --- a/tests/tegra/Makefile.am +++ b/tests/tegra/Makefile.am @@ -22,7 +22,8 @@ LDADD = \ TESTS = \ openclose \ - gr2d-fill + gr2d-fill \ + vic-syncpt if HAVE_INSTALL_TESTS testdir = $(libexecdir)/libdrm/tests/tegra diff --git a/tests/tegra/vic-syncpt.c b/tests/tegra/vic-syncpt.c new file mode 100644 index 00000000..9c5a0c13 --- /dev/null +++ b/tests/tegra/vic-syncpt.c @@ -0,0 +1,101 @@ +/* + * 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 <stdio.h> +#include <string.h> + +#include "drm-test-tegra.h" +#include "tegra.h" + +int main(int argc, char *argv[]) +{ + struct drm_tegra_channel *channel; + struct drm_tegra_pushbuf *pushbuf; + struct drm_tegra_fence *fence; + struct drm_tegra_job *job; + struct drm_tegra *drm; + int fd, err; + + fd = drm_open(argv[1]); + if (fd < 0) { + fprintf(stderr, "failed to open DRM device %s: %s\n", argv[1], + strerror(errno)); + return 1; + } + + err = drm_tegra_new(&drm, fd); + if (err < 0) { + fprintf(stderr, "failed to create Tegra DRM context: %s\n", + strerror(-err)); + return 1; + } + + err = drm_tegra_channel_open(&channel, drm, DRM_TEGRA_VIC); + if (err < 0) { + fprintf(stderr, "failed to open channel to VIC: %s\n", + strerror(-err)); + return 1; + } + + err = drm_tegra_job_new(&job, channel); + if (err < 0) + return 1; + + err = drm_tegra_pushbuf_new(&pushbuf, job); + if (err < 0) + return 1; + + err = drm_tegra_pushbuf_prepare(pushbuf, 4); + if (err < 0) + return 1; + + *pushbuf->ptr++ = HOST1X_OPCODE_SETCL(0, HOST1X_CLASS_GR2D, 0); + + err = drm_tegra_pushbuf_sync(pushbuf, DRM_TEGRA_SYNCPT_COND_OP_DONE); + if (err < 0) + return 1; + + err = drm_tegra_job_submit(job, &fence); + if (err < 0) { + return 1; + } + + err = drm_tegra_fence_wait(fence); + if (err < 0) { + return 1; + } + + drm_tegra_fence_free(fence); + drm_tegra_pushbuf_free(pushbuf); + drm_tegra_job_free(job); + + drm_tegra_channel_close(channel); + drm_tegra_close(drm); + drm_close(fd); + + return 0; +} |