aboutsummaryrefslogtreecommitdiffstats
path: root/include/api-test/vk-device.hpp
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2023-02-07 23:53:55 +0100
committerladevieq <ladevie.quentin@gmail.com>2023-02-07 23:53:55 +0100
commit74a223d1a9d23369c6c20457424b34cf17da95ab (patch)
tree18ccf56b8ddc6274410150e7ad4b986e6cb7dbc5 /include/api-test/vk-device.hpp
parent9286a3db4f529f435ea4270ffc2ca7a7a1da922d (diff)
Remove presentation stuff from device class
Device instance is no more a pointer Remove desc member in device structs
Diffstat (limited to 'include/api-test/vk-device.hpp')
-rw-r--r--include/api-test/vk-device.hpp123
1 files changed, 62 insertions, 61 deletions
diff --git a/include/api-test/vk-device.hpp b/include/api-test/vk-device.hpp
index 5b71529..fd69d60 100644
--- a/include/api-test/vk-device.hpp
+++ b/include/api-test/vk-device.hpp
@@ -15,11 +15,6 @@ using VmaAllocator = struct VmaAllocator_T*;
class window;
-struct vksemaphore {
- VkSemaphore vk_semaphore = nullptr;
- uint64_t value = 0U;
-};
-
class vkdevice {
struct queue {
VkQueue vk_queue;
@@ -29,49 +24,63 @@ class vkdevice {
};
public:
- static vkdevice* init_device(const window& window);
+ void init();
- static void free_device();
-
- static inline vkdevice* get_render_device() {
+ static inline vkdevice& get_render_device() {
return render_device;
}
- handle<device_texture> create_texture(const texture_desc& desc);
+ handle<device_texture> create_texture(const texture_desc& desc);
+
+ handle<device_buffer> create_buffer(const buffer_desc& desc);
- handle<device_buffer> create_buffer(const buffer_desc& desc);
+ handle<device_pipeline> create_pipeline(const pipeline_desc& desc);
- handle<device_pipeline> create_pipeline(const pipeline_desc& desc);
+ handle<device_surface> create_surface(const surface_desc& desc);
- vksemaphore create_semaphore();
+ handle<device_semaphore> create_semaphore(const semaphore_desc& desc);
- void destroy_texture(const device_texture& texture);
- void destroy_texture(handle<device_texture> handle);
+ void destroy_texture(const device_texture& texture);
+ void destroy_texture(handle<device_texture> handle);
- void destroy_buffer(const device_buffer& buffer);
- void destroy_buffer(handle<device_buffer> handle);
+ void destroy_buffer(const device_buffer& buffer);
+ void destroy_buffer(handle<device_buffer> handle);
- void destroy_pipeline(const device_pipeline& pipeline);
- void destroy_pipeline(handle<device_pipeline> handle);
+ void destroy_pipeline(const device_pipeline& pipeline);
+ void destroy_pipeline(handle<device_pipeline> handle);
+
+ void destroy_semaphore(const device_semaphore& semaphore);
+ void destroy_semaphore(handle<device_semaphore> handle);
+
+ void destroy_surface(const device_surface& surface);
+ void destroy_surface(handle<device_surface> handle);
template<typename cmd_buf_type>
void allocate_command_buffers(cmd_buf_type* buffers, size_t count, QueueType queue_type) {
allocate_command_buffers(static_cast<command_buffer*>(buffers), count, queue_type);
}
- inline device_texture& get_texture(handle<device_texture> handle) {
+ [[nodiscard]] inline device_texture& get_texture(handle<device_texture> handle) {
return textures[handle.id];
}
- inline const device_buffer& get_buffer(handle<device_buffer> handle) {
+ [[nodiscard]] inline const device_buffer& get_buffer(handle<device_buffer> handle) const {
return buffers[handle.id];
}
- inline const device_pipeline& get_pipeline(handle<device_pipeline> handle) {
+ [[nodiscard]] inline const device_pipeline& get_pipeline(handle<device_pipeline> handle) const {
return pipelines[handle.id];
}
- inline const bindless_model& get_bindingmodel() {
+ [[nodiscard]] inline const device_surface& get_surface(handle<device_surface> handle) const {
+ return surfaces[handle.id];
+ }
+
+ [[nodiscard]] inline device_semaphore& get_semaphore(handle<device_semaphore> handle) {
+ return semaphores[handle.id];
+ }
+
+ [[nodiscard]] inline const bindless_model& get_bindingmodel() const {
return bindless;
}
@@ -79,70 +88,62 @@ class vkdevice {
return device;
}
- void wait(vksemaphore& semaphore);
+ void wait(handle<device_semaphore> semaphore_handle);
- void submit(std::span<command_buffer> buffers, vksemaphore* wait, vksemaphore* signal);
+ void submit(std::span<command_buffer> buffers, handle<device_semaphore> wait_handle, handle<device_semaphore> signal_handle);
- void present(device_surface& surface, const vksemaphore& semaphore);
+ void present(handle<device_surface> surface_handle, handle<device_semaphore> semaphore_handle);
private:
- vkdevice(const window& window);
+ vkdevice() = default;
~vkdevice();
void allocate_command_buffers(command_buffer* buffers, size_t count, QueueType type);
- void create_views(device_texture& texture);
+ VkShaderModule create_shader_module(const std::span<uint8_t>& shader_code);
- // Presentation stuff
- void create_surface(const window& window);
+ void create_views(const texture_desc& desc, device_texture& texture);
- void create_swapchain();
-
- void create_virtual_frames();
-
- VkSurfaceKHR surface = nullptr;
- VkSwapchainKHR swapchain = nullptr;
+ void create_swapchain(const surface_desc& desc, device_surface& surface);
// TODO: Wrap in a struct called adapter ?
- void create_instance();
-
- void create_device();
+ void create_instance();
- void create_memory_allocator();
+ void create_device();
- void create_command_pools();
+ void create_memory_allocator();
- void pick_physical_device();
+ void create_command_pools();
- static bool device_support_features(VkPhysicalDevice physical_dev);
+ void pick_physical_device();
- void create_debug_layer_callback();
+ static bool device_support_features(VkPhysicalDevice physical_dev);
- // Virtual frames resources
- static constexpr uint32_t virtual_frames_count = 3U;
- VkSemaphore semaphores[virtual_frames_count];
+ void create_debug_layer_callback();
- queue queues[static_cast<uint32_t>(QueueType::MAX)];
+ queue queues[static_cast<uint32_t>(QueueType::MAX)];
- VkInstance instance;
- VkPhysicalDevice physical_device;
- VkDevice device;
+ VkInstance instance;
+ VkPhysicalDevice physical_device;
+ VkDevice device;
- VmaAllocator gpu_allocator;
+ VmaAllocator gpu_allocator;
- bindless_model bindless;
+ bindless_model bindless;
- static constexpr size_t max_allocable_command_buffers = 16;
- static constexpr size_t max_submitable_command_buffers = 16;
+ static constexpr size_t max_allocable_command_buffers = 16;
+ static constexpr size_t max_submitable_command_buffers = 16;
- freelist<device_texture*> storage_indices;
- freelist<device_texture*> sampled_indices;
+ freelist<device_texture*> storage_indices;
+ freelist<device_texture*> sampled_indices;
- freelist<device_texture> textures;
- freelist<device_buffer> buffers;
- freelist<device_pipeline> pipelines;
+ freelist<device_texture> textures;
+ freelist<device_buffer> buffers;
+ freelist<device_pipeline> pipelines;
+ freelist<device_surface> surfaces;
+ freelist<device_semaphore> semaphores;
- static vkdevice* render_device;
+ static vkdevice render_device;
#ifdef _DEBUG
VkDebugUtilsMessengerEXT debug_messenger;