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);
203 bool upload_image_layer(
204 const std::shared_ptr<VKImage>&
image,
208 const std::shared_ptr<Buffers::VKBuffer>& staging =
nullptr,
209 bool deferred =
false);
217 [[nodiscard]]
bool supports_blit(
218 vk::Format src_format,
219 vk::Format dst_format,
220 vk::Filter filter = vk::Filter::eNearest)
const;
237 const std::shared_ptr<VKImage>&
src,
238 const std::shared_ptr<VKImage>&
dst,
239 const vk::ImageBlit& region,
241 bool deferred =
false);
255 vk::Filter filter = vk::Filter::eLinear,
256 vk::SamplerAddressMode address_mode = vk::SamplerAddressMode::eRepeat,
257 float max_anisotropy = 0.0F);
262 void destroy_sampler(vk::Sampler sampler);
274 uint32_t find_memory_type(uint32_t type_filter, vk::MemoryPropertyFlags properties)
const;
284 void execute_immediate_commands(
const std::function<
void(vk::CommandBuffer)>& recorder);
290 void record_deferred_commands(
const std::function<
void(vk::CommandBuffer)>& recorder);
296 vk::Semaphore flush_deferred_commands();
311 vk::Semaphore m_deferred_semaphore {};
313 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.