28 void setup_backend_service(
const std::shared_ptr<Registry::Service::BufferService>& buffer_service);
38 void initialize_buffer(
const std::shared_ptr<Buffers::VKBuffer>& buffer);
59 void allocate_raw_buffer(
61 vk::BufferUsageFlags usage,
62 vk::MemoryPropertyFlags memory_properties,
64 vk::Buffer& out_buffer,
65 vk::DeviceMemory& out_memory,
66 void*& out_mapped_ptr);
72 void cleanup_buffer(
const std::shared_ptr<Buffers::VKBuffer>& buffer);
79 [[nodiscard]] vk::DeviceAddress get_buffer_device_address(
80 const std::shared_ptr<Buffers::VKBuffer>& buffer)
const;
85 void flush_pending_buffer_operations();
102 void initialize_image(
const std::shared_ptr<VKImage>&
image);
108 void cleanup_image(
const std::shared_ptr<VKImage>&
image);
121 void transition_image_layout(
123 vk::ImageLayout old_layout,
124 vk::ImageLayout new_layout,
125 uint32_t mip_levels = 1,
126 uint32_t array_layers = 1,
127 vk::ImageAspectFlags aspect_flags = vk::ImageAspectFlagBits::eColor);
135 void upload_image_data(
136 std::shared_ptr<VKImage>
image,
151 void upload_image_data(
152 std::shared_ptr<VKImage>
image,
155 const std::shared_ptr<Buffers::VKBuffer>& staging,
bool deferred =
false);
179 void download_image_data(
180 std::shared_ptr<VKImage>
image,
183 const std::shared_ptr<Buffers::VKBuffer>& staging =
nullptr,
184 bool deferred =
false,
185 vk::ImageLayout restore_layout = vk::ImageLayout::eShaderReadOnlyOptimal,
186 vk::PipelineStageFlags restore_stage = vk::PipelineStageFlagBits::eFragmentShader);
200 vk::Filter filter = vk::Filter::eLinear,
201 vk::SamplerAddressMode address_mode = vk::SamplerAddressMode::eRepeat,
202 float max_anisotropy = 0.0F);
207 void destroy_sampler(vk::Sampler sampler);
219 uint32_t find_memory_type(uint32_t type_filter, vk::MemoryPropertyFlags properties)
const;
229 void execute_immediate_commands(
const std::function<
void(vk::CommandBuffer)>& recorder);
235 void record_deferred_commands(
const std::function<
void(vk::CommandBuffer)>& recorder);
241 vk::Semaphore flush_deferred_commands();
256 vk::Semaphore m_deferred_semaphore {};
258 size_t compute_sampler_hash(vk::Filter filter, vk::SamplerAddressMode address_mode,
float max_anisotropy)
const;
High-level wrapper for Vulkan instance and device.
std::shared_ptr< Kriya::SamplingPipeline > create_sampler(const std::string &filepath, uint32_t num_samples, bool truncate, uint32_t channel, uint64_t max_dur_ms)
Construct a built SamplingPipeline from an audio file.