From c29105b461135f3909cca0308fb05715cee45763 Mon Sep 17 00:00:00 2001 From: Quentin LADEVIE Date: Sun, 26 Jan 2025 22:27:10 +0100 Subject: DX12 command buffers and resources --- include/api-test/vk-command-buffer.hpp | 103 +++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 include/api-test/vk-command-buffer.hpp (limited to 'include/api-test/vk-command-buffer.hpp') diff --git a/include/api-test/vk-command-buffer.hpp b/include/api-test/vk-command-buffer.hpp new file mode 100644 index 0000000..08652fd --- /dev/null +++ b/include/api-test/vk-command-buffer.hpp @@ -0,0 +1,103 @@ +#pragma once + +#include +#include + +#include + +#include "handle.hpp" + +#include "vec3.hpp" + +#include "vk-device-types.hpp" + +struct device_texture; +struct device_buffer; +struct device_pipeline; + +struct dispatch_params { + enum class PARAM_BINDING : uint32_t { + PARAM1, + PARAM2, + PARAM3, + PARAM4, + PARAM5, + PARAM6, + PARAM7, + PARAM8, + MAX + }; + + handle pipeline; + vec3u group_size; + vec3u local_group_size; + uint64_t params[static_cast(PARAM_BINDING::MAX)]; +}; + +struct renderpass_params { +private: + struct rect { + int32_t x; + int32_t y; + uint32_t width; + uint32_t height; + }; + +public: + rect render_area; + std::span> color_attachments; +}; + +struct draw_params { + handle pipeline; + handle index_buffer; + uint32_t vertex_count; + uint32_t vertex_offset; + uint32_t instance_count; + uint64_t globals_address = 0U; // TODO: This is probably stupid and should be set elsewhere once ??? + uint64_t instances_address = 0U; + uint64_t uniforms_address = 0U; + uint64_t vertex_address = 0U; +}; + +struct draw_indexed_params { + handle pipeline; + handle index_buffer; + uint32_t vertex_count; + uint32_t vertex_offset; + uint32_t index_offset; + uint32_t instance_count; + uint64_t globals_address = 0U; // TODO: This is probably stupid and should be set elsewhere once ??? + uint64_t instances_address = 0U; + uint64_t uniforms_address = 0U; + uint64_t vertex_address = 0U; +}; + +struct command_buffer { + void start() const; + void stop() const; + + void barrier(handle texture_handle, VkPipelineStageFlags2 stage, VkAccessFlags2 access, VkImageLayout layout) const; + + void copy(handle buffer_handle, handle texture_handle, uint64_t offset = 0) const; + + VkCommandBuffer vk_command_buffer; + QueueType queue_type; +}; + +// General purpose queue +struct graphics_command_buffer: public command_buffer { + void dispatch(const dispatch_params& params) const; + + void begin_renderpass(const renderpass_params& params) const; + void draw(const draw_params& params) const; + void draw_indexed(const draw_indexed_params& params) const; + void end_renderpass() const; +}; + +struct compute_command_buffer: public command_buffer { + void dispatch(const dispatch_params& params); +}; + +struct transfer_command_buffer: public command_buffer { +}; -- cgit v1.3