summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_compute_pass.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_compute_pass.h')
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pass.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_compute_pass.h b/src/video_core/renderer_vulkan/vk_compute_pass.h
new file mode 100644
index 000000000..7057eb837
--- /dev/null
+++ b/src/video_core/renderer_vulkan/vk_compute_pass.h
@@ -0,0 +1,77 @@
+// Copyright 2019 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <optional>
+#include <utility>
+#include <vector>
+#include "common/common_types.h"
+#include "video_core/renderer_vulkan/declarations.h"
+#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
+
+namespace Vulkan {
+
+class VKDevice;
+class VKFence;
+class VKScheduler;
+class VKStagingBufferPool;
+class VKUpdateDescriptorQueue;
+
+class VKComputePass {
+public:
+ explicit VKComputePass(const VKDevice& device, VKDescriptorPool& descriptor_pool,
+ const std::vector<vk::DescriptorSetLayoutBinding>& bindings,
+ const std::vector<vk::DescriptorUpdateTemplateEntry>& templates,
+ const std::vector<vk::PushConstantRange> push_constants,
+ std::size_t code_size, const u8* code);
+ ~VKComputePass();
+
+protected:
+ vk::DescriptorSet CommitDescriptorSet(VKUpdateDescriptorQueue& update_descriptor_queue,
+ VKFence& fence);
+
+ UniqueDescriptorUpdateTemplate descriptor_template;
+ UniquePipelineLayout layout;
+ UniquePipeline pipeline;
+
+private:
+ UniqueDescriptorSetLayout descriptor_set_layout;
+ std::optional<DescriptorAllocator> descriptor_allocator;
+ UniqueShaderModule module;
+};
+
+class QuadArrayPass final : public VKComputePass {
+public:
+ explicit QuadArrayPass(const VKDevice& device, VKScheduler& scheduler,
+ VKDescriptorPool& descriptor_pool,
+ VKStagingBufferPool& staging_buffer_pool,
+ VKUpdateDescriptorQueue& update_descriptor_queue);
+ ~QuadArrayPass();
+
+ std::pair<const vk::Buffer&, vk::DeviceSize> Assemble(u32 num_vertices, u32 first);
+
+private:
+ VKScheduler& scheduler;
+ VKStagingBufferPool& staging_buffer_pool;
+ VKUpdateDescriptorQueue& update_descriptor_queue;
+};
+
+class Uint8Pass final : public VKComputePass {
+public:
+ explicit Uint8Pass(const VKDevice& device, VKScheduler& scheduler,
+ VKDescriptorPool& descriptor_pool, VKStagingBufferPool& staging_buffer_pool,
+ VKUpdateDescriptorQueue& update_descriptor_queue);
+ ~Uint8Pass();
+
+ std::pair<const vk::Buffer*, u64> Assemble(u32 num_vertices, vk::Buffer src_buffer,
+ u64 src_offset);
+
+private:
+ VKScheduler& scheduler;
+ VKStagingBufferPool& staging_buffer_pool;
+ VKUpdateDescriptorQueue& update_descriptor_queue;
+};
+
+} // namespace Vulkan