aboutsummaryrefslogtreecommitdiffstats
path: root/include/compute-renderpass.hpp
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2022-02-07 21:53:14 +0100
committerladevieq <ladevie.quentin@gmail.com>2022-02-07 21:53:14 +0100
commit4ae9a520d97dcaf69f4a0cd044a4fc3fe689924d (patch)
treeb2bdcef4ff0bda3dca80b11da42c597ccc596a0b /include/compute-renderpass.hpp
parentab39ab82b4dc60e4a181140dc91ee046e5daa6ea (diff)
Compute shader render pass api
Diffstat (limited to 'include/compute-renderpass.hpp')
-rw-r--r--include/compute-renderpass.hpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/include/compute-renderpass.hpp b/include/compute-renderpass.hpp
new file mode 100644
index 0000000..5393032
--- /dev/null
+++ b/include/compute-renderpass.hpp
@@ -0,0 +1,57 @@
+#pragma once
+
+#include "vk-api.hpp"
+#include <array>
+
+class Texture;
+class Renderpass {
+ public:
+
+ Renderpass(vkapi& api)
+ :api(api)
+ {};
+
+ virtual ~Renderpass() {
+ api.destroy_pipeline(pipeline);
+ }
+
+ void set_pipeline(pipeline pipeline) {
+ this->pipeline = pipeline;
+ }
+
+ // TODO: Do not use vulkan api type
+ virtual void execute(VkCommandBuffer command_buffer) = 0;
+
+ protected:
+ vkapi &api;
+
+ pipeline pipeline;
+};
+
+class ComputeRenderpass : public Renderpass {
+ public:
+
+ ComputeRenderpass(vkapi& api)
+ : Renderpass(api)
+ {}
+
+ void set_dispatch_size(size_t count_x, size_t count_y, size_t count_z);
+
+ void set_ouput_texture(Texture* ouput_texture);
+
+ void set_constant(off_t offset, uint64_t* constant);
+ void set_constant(off_t offset, Texture* texture);
+
+ // TODO: Do not use vulkan api type
+ void execute(VkCommandBuffer command_buffer) override final;
+
+ Texture* output_texture;
+
+ private:
+
+ std::array<uint8_t, 64> constants;
+
+ size_t group_count_x;
+ size_t group_count_y;
+ size_t group_count_z;
+};