From: Jason Ekstrand Date: Fri, 14 Aug 2015 22:22:57 +0000 (-0700) Subject: vk: Build a version of the driver for linking into unit tests X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=16c5b9f4eda04d22c3c7b4cba0fe6303f149f86d;p=mesa.git vk: Build a version of the driver for linking into unit tests --- diff --git a/src/vulkan/Makefile.am b/src/vulkan/Makefile.am index c816f97034f..31367de42a2 100644 --- a/src/vulkan/Makefile.am +++ b/src/vulkan/Makefile.am @@ -30,6 +30,8 @@ vulkan_include_HEADERS = \ lib_LTLIBRARIES = libvulkan.la +check_LTLIBRARIES = libvulkan-test.la + # The gallium includes are for the util/u_math.h include from main/macros.h AM_CPPFLAGS = \ @@ -53,7 +55,7 @@ libvulkan_la_CFLAGS = \ libvulkan_la_CXXFLAGS = \ -Wall -Wextra -Wno-unused-parameter -fvisibility=hidden -O0 -g -libvulkan_la_SOURCES = \ +VULKAN_SOURCES = \ anv_allocator.c \ anv_aub.c \ anv_cmd_buffer.c \ @@ -63,7 +65,6 @@ libvulkan_la_SOURCES = \ anv_entrypoints.c \ anv_entrypoints.h \ anv_formats.c \ - anv_gem.c \ anv_image.c \ anv_intel.c \ anv_meta.c \ @@ -73,6 +74,10 @@ libvulkan_la_SOURCES = \ anv_util.c \ anv_x11.c +libvulkan_la_SOURCES = \ + $(VULKAN_SOURCES) \ + anv_gem.c + BUILT_SOURCES = \ anv_entrypoints.h \ anv_entrypoints.c \ @@ -92,4 +97,14 @@ CLEANFILES = $(BUILT_SOURCES) libvulkan_la_LIBADD = -lxcb -lxcb-dri3 \ $(top_builddir)/src/mesa/drivers/dri/i965/libi965_compiler.la +# Libvulkan with dummy gem. Used for unit tests. + +libvulkan_test_la_SOURCES = \ + $(VULKAN_SOURCES) \ + anv_gem_stubs.c + +libvulkan_test_la_CFLAGS = $(libvulkan_la_CFLAGS) +libvulkan_test_la_CXXFLAGS = $(libvulkan_la_CXXFLAGS) +libvulkan_test_la_LIBADD = $(libvulkan_la_LIBADD) + include $(top_srcdir)/install-lib-links.mk diff --git a/src/vulkan/anv_gem_stubs.c b/src/vulkan/anv_gem_stubs.c new file mode 100644 index 00000000000..d036314c446 --- /dev/null +++ b/src/vulkan/anv_gem_stubs.c @@ -0,0 +1,136 @@ +/* + * Copyright © 2015 Intel 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 (including the next + * paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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. + */ + +#define _DEFAULT_SOURCE + +#include +#include +#include + +#include "anv_private.h" + +static inline int +memfd_create(const char *name, unsigned int flags) +{ + return syscall(SYS_memfd_create, name, flags); +} + +uint32_t +anv_gem_create(struct anv_device *device, size_t size) +{ + int fd = memfd_create("fake bo", MFD_CLOEXEC); + if (fd == -1) + return 0; + + assert(fd != 0); + + if (ftruncate(fd, size) == -1) + return 0; + + return fd; +} + +void +anv_gem_close(struct anv_device *device, int gem_handle) +{ + close(gem_handle); +} + +void* +anv_gem_mmap(struct anv_device *device, uint32_t gem_handle, + uint64_t offset, uint64_t size) +{ + return mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, + gem_handle, offset); +} + +/* This is just a wrapper around munmap, but it also notifies valgrind that + * this map is no longer valid. Pair this with anv_gem_mmap(). + */ +void +anv_gem_munmap(void *p, uint64_t size) +{ + munmap(p, size); +} + +int +anv_gem_userptr(struct anv_device *device, void *mem, size_t size) +{ + return -1; +} + +int +anv_gem_wait(struct anv_device *device, int gem_handle, int64_t *timeout_ns) +{ + return 0; +} + +int +anv_gem_execbuffer(struct anv_device *device, + struct drm_i915_gem_execbuffer2 *execbuf) +{ + return 0; +} + +int +anv_gem_set_tiling(struct anv_device *device, + int gem_handle, uint32_t stride, uint32_t tiling) +{ + return 0; +} + +int +anv_gem_get_param(int fd, uint32_t param) +{ + unreachable("Unused"); +} + +int +anv_gem_create_context(struct anv_device *device) +{ + unreachable("Unused"); +} + +int +anv_gem_destroy_context(struct anv_device *device, int context) +{ + unreachable("Unused"); +} + +int +anv_gem_get_aperture(int fd, uint64_t *size) +{ + unreachable("Unused"); +} + +int +anv_gem_handle_to_fd(struct anv_device *device, int gem_handle) +{ + unreachable("Unused"); +} + +int +anv_gem_fd_to_handle(struct anv_device *device, int fd) +{ + unreachable("Unused"); +}