blob: 9343a08d52537d71da3163c236bba5667085ef93 [file] [log] [blame]
// 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_