| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_GRAPHICS_TESTS_VKREADBACK_VKREADBACK_H_ |
| #define SRC_GRAPHICS_TESTS_VKREADBACK_VKREADBACK_H_ |
| |
| #include <stdint.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <zircon/syscalls.h> |
| |
| #include <vector> |
| |
| #include <gtest/gtest.h> |
| #include <vulkan/vulkan.h> |
| |
| // Supports Fuchsia external memory extension. |
| class VkReadbackTest { |
| public: |
| static constexpr uint32_t kWidth = 64; |
| static constexpr uint32_t kHeight = 64; |
| |
| enum Extension { NONE, VK_FUCHSIA_EXTERNAL_MEMORY }; |
| |
| explicit VkReadbackTest(Extension ext = NONE) : ext_(ext) {} |
| virtual ~VkReadbackTest(); |
| |
| bool Initialize(); |
| bool Exec(VkFence fence = VK_NULL_HANDLE); |
| bool Submit(VkFence fence); |
| void Wait(); |
| bool Readback(); |
| |
| uint32_t get_device_memory_handle() const { return device_memory_handle_; } |
| void set_device_memory_handle(uint32_t handle) { device_memory_handle_ = handle; } |
| |
| const VkDevice& vulkan_device() { return vk_device_; } |
| |
| private: |
| bool InitVulkan(); |
| bool InitImage(); |
| |
| Extension ext_; |
| bool is_initialized_ = false; |
| bool image_initialized_ = false; |
| VkInstance vk_instance_; |
| VkPhysicalDevice vk_physical_device_; |
| VkDevice vk_device_; |
| VkQueue vk_queue_; |
| VkImage vk_image_; |
| VkDeviceMemory vk_device_memory_ = VK_NULL_HANDLE; |
| |
| // Import/export |
| VkDeviceMemory vk_imported_device_memory_ = VK_NULL_HANDLE; |
| uint32_t device_memory_handle_ = 0; |
| PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA_{}; |
| PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA_{}; |
| |
| VkCommandPool vk_command_pool_; |
| VkCommandBuffer vk_command_buffer_; |
| uint64_t bind_offset_; |
| }; |
| |
| #endif // SRC_GRAPHICS_TESTS_VKREADBACK_VKREADBACK_H_ |