| // Copyright 2019 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_LIB_COMPUTE_SPINEL_PLATFORMS_VK_DEVICE_H_ |
| #define SRC_GRAPHICS_LIB_COMPUTE_SPINEL_PLATFORMS_VK_DEVICE_H_ |
| |
| // |
| // |
| // |
| |
| #include <vulkan/vulkan_core.h> |
| |
| #include "allocator.h" |
| #include "block_pool.h" |
| #include "context.h" |
| #include "deps.h" |
| #include "handle_pool.h" |
| #include "queue_pool.h" |
| #include "radix_sort/platforms/vk/radix_sort_vk.h" |
| #include "spinel/platforms/vk/spinel_vk.h" |
| #include "target_instance.h" |
| |
| // |
| // |
| // |
| struct spinel_device_vk |
| { |
| VkPhysicalDevice pd; |
| VkDevice d; |
| VkPipelineCache pc; |
| VkAllocationCallbacks const * ac; |
| |
| // |
| // Queues |
| // |
| struct |
| { |
| struct spinel_queue_pool compute; |
| } q; |
| |
| // |
| // Limits |
| // |
| struct |
| { |
| VkDeviceSize noncoherent_atom_size; |
| } limits; |
| |
| // |
| // Workarounds |
| // |
| struct |
| { |
| bool mesa_21_anv; |
| } workarounds; |
| }; |
| |
| // |
| // |
| // |
| struct spinel_device |
| { |
| // |
| // Spinel abstract interface |
| // |
| struct spinel_context * context; |
| |
| // |
| // Vulkan |
| // |
| struct spinel_device_vk vk; |
| |
| // |
| // Device-specific Spinel target instance |
| // |
| struct spinel_target_instance ti; |
| |
| // |
| // Allocators |
| // |
| struct |
| { |
| struct |
| { |
| struct |
| { |
| struct spinel_allocator drw; // no host access / device read-write |
| struct spinel_allocator hw_dr; // host write / device read once |
| struct spinel_allocator hrw_dr; // host read-write / device read once |
| struct spinel_allocator drw_shared; // device read-write on 1 or 2 queue families |
| } perm; |
| } device; |
| } allocator; |
| |
| // |
| // Subsystems |
| // |
| struct spinel_deps * deps; |
| struct spinel_handle_pool * handle_pool; |
| struct spinel_block_pool block_pool; |
| }; |
| |
| // |
| // Disable device because of a fatal error |
| // |
| void |
| spinel_device_lost(struct spinel_device * device); |
| |
| // |
| // |
| // |
| spinel_result_t |
| spinel_device_wait_all(struct spinel_device * device, bool wait_all, char const * label_name); |
| |
| spinel_result_t |
| spinel_device_wait(struct spinel_device * device, char const * label_name); |
| |
| // |
| // |
| // |
| void |
| spinel_debug_utils_cmd_begin(VkCommandBuffer cb, char const * label_name); |
| |
| void |
| spinel_debug_utils_cmd_end(VkCommandBuffer cb); |
| |
| // |
| // |
| // |
| |
| #endif // SRC_GRAPHICS_LIB_COMPUTE_SPINEL_PLATFORMS_VK_DEVICE_H_ |