mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-22 15:26:21 +00:00
tests/prime_self_import: add subtest to export/import a second gem buffer
Also add a subtest for the fd=handle_to_fd(), fd2=dup(fd), close(fd) case (idea from Kristian Høgsberg). Signed-off-by: Imre Deak <imre.deak@intel.com> v2: - add a new subtest instead of modifying the original test (Daniel) - add a new subtest for testing dup (Kristian) Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
6f0d8b011e
commit
70afbead46
@ -32,6 +32,7 @@ TESTS_progs_M = \
|
|||||||
gem_tiled_partial_pwrite_pread \
|
gem_tiled_partial_pwrite_pread \
|
||||||
$(NOUVEAU_TESTS_M) \
|
$(NOUVEAU_TESTS_M) \
|
||||||
kms_flip \
|
kms_flip \
|
||||||
|
prime_self_import \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
TESTS_progs = \
|
TESTS_progs = \
|
||||||
@ -101,7 +102,6 @@ TESTS_progs = \
|
|||||||
gem_reg_read \
|
gem_reg_read \
|
||||||
gem_tiling_max_stride \
|
gem_tiling_max_stride \
|
||||||
$(NOUVEAU_TESTS) \
|
$(NOUVEAU_TESTS) \
|
||||||
prime_self_import \
|
|
||||||
prime_udl \
|
prime_udl \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
|
@ -48,11 +48,14 @@
|
|||||||
|
|
||||||
#define BO_SIZE (16*1024)
|
#define BO_SIZE (16*1024)
|
||||||
|
|
||||||
|
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||||
|
|
||||||
|
static char counter;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
check_bo(int fd1, uint32_t handle1, int fd2, uint32_t handle2)
|
check_bo(int fd1, uint32_t handle1, int fd2, uint32_t handle2)
|
||||||
{
|
{
|
||||||
char *ptr1, *ptr2;
|
char *ptr1, *ptr2;
|
||||||
static char counter = 0;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ptr1 = gem_mmap(fd1, handle1, BO_SIZE, PROT_READ | PROT_WRITE);
|
ptr1 = gem_mmap(fd1, handle1, BO_SIZE, PROT_READ | PROT_WRITE);
|
||||||
@ -75,7 +78,68 @@ check_bo(int fd1, uint32_t handle1, int fd2, uint32_t handle2)
|
|||||||
munmap(ptr2, BO_SIZE);
|
munmap(ptr2, BO_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
static void test_with_fd_dup(void)
|
||||||
|
{
|
||||||
|
int fd1, fd2;
|
||||||
|
uint32_t handle, handle_import;
|
||||||
|
int dma_buf_fd1, dma_buf_fd2;
|
||||||
|
|
||||||
|
counter = 0;
|
||||||
|
|
||||||
|
fd1 = drm_open_any();
|
||||||
|
fd2 = drm_open_any();
|
||||||
|
|
||||||
|
handle = gem_create(fd1, BO_SIZE);
|
||||||
|
|
||||||
|
dma_buf_fd1 = prime_handle_to_fd(fd1, handle);
|
||||||
|
gem_close(fd1, handle);
|
||||||
|
|
||||||
|
dma_buf_fd2 = dup(dma_buf_fd1);
|
||||||
|
close(dma_buf_fd1);
|
||||||
|
handle_import = prime_fd_to_handle(fd2, dma_buf_fd2);
|
||||||
|
check_bo(fd2, handle_import, fd2, handle_import);
|
||||||
|
|
||||||
|
close(dma_buf_fd2);
|
||||||
|
check_bo(fd2, handle_import, fd2, handle_import);
|
||||||
|
|
||||||
|
close(fd1);
|
||||||
|
close(fd2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_with_two_bos(void)
|
||||||
|
{
|
||||||
|
int fd1, fd2;
|
||||||
|
uint32_t handle1, handle2, handle_import;
|
||||||
|
int dma_buf_fd;
|
||||||
|
|
||||||
|
counter = 0;
|
||||||
|
|
||||||
|
fd1 = drm_open_any();
|
||||||
|
fd2 = drm_open_any();
|
||||||
|
|
||||||
|
handle1 = gem_create(fd1, BO_SIZE);
|
||||||
|
handle2 = gem_create(fd1, BO_SIZE);
|
||||||
|
|
||||||
|
dma_buf_fd = prime_handle_to_fd(fd1, handle1);
|
||||||
|
handle_import = prime_fd_to_handle(fd2, dma_buf_fd);
|
||||||
|
|
||||||
|
close(dma_buf_fd);
|
||||||
|
gem_close(fd1, handle1);
|
||||||
|
|
||||||
|
dma_buf_fd = prime_handle_to_fd(fd1, handle2);
|
||||||
|
handle_import = prime_fd_to_handle(fd2, dma_buf_fd);
|
||||||
|
check_bo(fd1, handle2, fd2, handle_import);
|
||||||
|
|
||||||
|
gem_close(fd1, handle2);
|
||||||
|
close(dma_buf_fd);
|
||||||
|
|
||||||
|
check_bo(fd2, handle_import, fd2, handle_import);
|
||||||
|
|
||||||
|
close(fd1);
|
||||||
|
close(fd2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_with_one_bo(void)
|
||||||
{
|
{
|
||||||
int fd1, fd2;
|
int fd1, fd2;
|
||||||
uint32_t handle, handle_import1, handle_import2, handle_selfimport;
|
uint32_t handle, handle_import1, handle_import2, handle_selfimport;
|
||||||
@ -118,6 +182,26 @@ int main(int argc, char **argv)
|
|||||||
/* Completely rip out exporting fd. */
|
/* Completely rip out exporting fd. */
|
||||||
close(fd1);
|
close(fd1);
|
||||||
check_bo(fd2, handle_import1, fd2, handle_import1);
|
check_bo(fd2, handle_import1, fd2, handle_import1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
const char *name;
|
||||||
|
void (*fn)(void);
|
||||||
|
} tests[] = {
|
||||||
|
{ "with_one_bo", test_with_one_bo },
|
||||||
|
{ "with_two_bos", test_with_two_bos },
|
||||||
|
{ "with_fd_dup", test_with_fd_dup },
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
drmtest_subtest_init(argc, argv);
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(tests); i++) {
|
||||||
|
if (drmtest_run_subtest(tests[i].name))
|
||||||
|
tests[i].fn();
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user