UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
vulkan_display_detail::TransferImageImpl Class Reference

#include <vulkan_transfer_image.hpp>

Collaboration diagram for vulkan_display_detail::TransferImageImpl:
Collaboration graph

Public Member Functions

 TransferImageImpl ()=default
 
 TransferImageImpl (vk::Device device, uint32_t id)
 
void destroy (vk::Device device)
 
Image2D & get_buffer ()
 
uint32_t get_id () const
 
vulkan_display::ImageDescription get_image_description () const
 
vk::ImageView get_image_view (vk::Device device, vk::SamplerYcbcrConversion conversion)
 
void init (vk::Device device, uint32_t id)
 
void preprocess ()
 
void recreate (VulkanContext &context, vulkan_display::ImageDescription description)
 

Public Attributes

vk::Fence is_available_fence
 

Static Public Attributes

static constexpr uint32_t NO_ID = UINT32_MAX
 

Private Types

using PreprocessFunction = std::function<void(vulkan_display::TransferImage& image)>
 

Private Attributes

Image2D buffer
 
uint32_t id = NO_ID
 
vulkan_display::ImageDescription image_description
 
PreprocessFunction preprocess_fun { nullptr }
 
unsigned char * ptr = nullptr
 
vk::DeviceSize row_pitch = 0
 

Friends

class vulkan_display::TransferImage
 

Detailed Description

Definition at line 168 of file vulkan_transfer_image.hpp.

Member Typedef Documentation

◆ PreprocessFunction

Constructor & Destructor Documentation

◆ TransferImageImpl() [1/2]

vulkan_display_detail::TransferImageImpl::TransferImageImpl ( )
default

◆ TransferImageImpl() [2/2]

vulkan_display_detail::TransferImageImpl::TransferImageImpl ( vk::Device device,
uint32_t id )
inline

Definition at line 210 of file vulkan_transfer_image.hpp.

210 {
211 init(device, id);
212 }
void init(vk::Device device, uint32_t id)

References init().

Here is the call graph for this function:

Member Function Documentation

◆ destroy()

void vulkan_display_detail::TransferImageImpl::destroy ( vk::Device device)

◆ get_buffer()

Image2D & vulkan_display_detail::TransferImageImpl::get_buffer ( )
inline

Definition at line 197 of file vulkan_transfer_image.hpp.

197 {
198 return buffer;
199 }

References buffer.

Referenced by vulkan_display::VulkanDisplay::record_graphics_commands().

◆ get_id()

uint32_t vulkan_display_detail::TransferImageImpl::get_id ( ) const
inline

◆ get_image_description()

vulkan_display::ImageDescription vulkan_display_detail::TransferImageImpl::get_image_description ( ) const
inline

◆ get_image_view()

vk::ImageView vulkan_display_detail::TransferImageImpl::get_image_view ( vk::Device device,
vk::SamplerYcbcrConversion conversion )
inline

Definition at line 201 of file vulkan_transfer_image.hpp.

201 {
202 return buffer.get_image_view(device, conversion);
203 }
vk::ImageView get_image_view(vk::Device device, vk::SamplerYcbcrConversion conversion)

References buffer, and vulkan_display_detail::Image2D::get_image_view().

Referenced by vulkan_display::VulkanDisplay::bind_transfer_image().

Here is the call graph for this function:

◆ init()

void vulkan_display_detail::TransferImageImpl::init ( vk::Device device,
uint32_t id )

Definition at line 97 of file vulkan_transfer_image.cpp.

97 {
98 this->id = id;
99 vk::FenceCreateInfo fence_info{};
100 is_available_fence = device.createFence(fence_info);
101}

References id, and is_available_fence.

Referenced by TransferImageImpl().

◆ preprocess()

void vulkan_display_detail::TransferImageImpl::preprocess ( )

Definition at line 233 of file vulkan_transfer_image.cpp.

233 {
234 if (preprocess_fun) {
236 preprocess_fun(img);
237 img.set_process_function(nullptr);
238 }
239}

References preprocess_fun.

Referenced by vulkan_display::VulkanDisplay::display_queued_image().

◆ recreate()

void vulkan_display_detail::TransferImageImpl::recreate ( VulkanContext & context,
vulkan_display::ImageDescription description )

Definition at line 189 of file vulkan_transfer_image.cpp.

189 {
190 assert(id != NO_ID);
191 buffer.destroy(context.get_device());
192
193 auto device = context.get_device();
194
195 buffer.init(context, get_buffer_size(description), description.format_info().buffer_format, vk::ImageUsageFlagBits::eSampled, vk::AccessFlagBits::eHostWrite,
197
198 void* void_ptr = device.mapMemory(buffer.memory, 0, buffer.byte_size);
199 if (void_ptr == nullptr) {
200 throw VulkanError{"Image memory cannot be mapped."};
201 }
202 ptr = reinterpret_cast<unsigned char*>(void_ptr);
203
204 vk::ImageSubresource subresource{ vk::ImageAspectFlagBits::eColor, 0, 0 };
205 row_pitch = device.getImageSubresourceLayout(buffer.image, subresource).rowPitch;
206
208}
void init(VulkanContext &context, vk::Extent2D size, vk::Format format, vk::ImageUsageFlags usage, vk::AccessFlags initial_access, InitialImageData preinitialised, MemoryLocation memory_location)
vk::Extent2D get_buffer_size(const vulkan_display::ImageDescription &description)
const char * description
Definition cineform.cpp:126

References buffer, vulkan_display_detail::Image2D::byte_size, description, vulkan_display_detail::Image2D::destroy(), vulkan_display_detail::get_buffer_size(), vulkan_display_detail::VulkanContext::get_device(), vulkan_display_detail::host_local, vulkan_display_detail::Image2D::image, image_description, vulkan_display_detail::Image2D::init(), vulkan_display_detail::Image2D::memory, NO_ID, vulkan_display_detail::preinitialised, ptr, and row_pitch.

Referenced by vulkan_display::VulkanDisplay::acquire_image().

Here is the call graph for this function:

Friends And Related Symbol Documentation

◆ vulkan_display::TransferImage

friend class vulkan_display::TransferImage
friend

Definition at line 181 of file vulkan_transfer_image.hpp.

Member Data Documentation

◆ buffer

Image2D vulkan_display_detail::TransferImageImpl::buffer
private

Definition at line 169 of file vulkan_transfer_image.hpp.

Referenced by destroy(), get_buffer(), get_image_view(), and recreate().

◆ id

uint32_t vulkan_display_detail::TransferImageImpl::id = NO_ID
private

◆ image_description

vulkan_display::ImageDescription vulkan_display_detail::TransferImageImpl::image_description
private

◆ is_available_fence

vk::Fence vulkan_display_detail::TransferImageImpl::is_available_fence

◆ NO_ID

uint32_t vulkan_display_detail::TransferImageImpl::NO_ID = UINT32_MAX
staticconstexpr

◆ preprocess_fun

PreprocessFunction vulkan_display_detail::TransferImageImpl::preprocess_fun { nullptr }
private

Definition at line 176 of file vulkan_transfer_image.hpp.

176{ nullptr };

Referenced by preprocess(), and vulkan_display::TransferImage::set_process_function().

◆ ptr

unsigned char* vulkan_display_detail::TransferImageImpl::ptr = nullptr
private

◆ row_pitch

vk::DeviceSize vulkan_display_detail::TransferImageImpl::row_pitch = 0
private

The documentation for this class was generated from the following files: