16 uint32_t array_layers,
24 , m_mip_levels(mip_levels)
25 , m_array_layers(array_layers)
26 , m_modality(modality)
39 vk::ImageUsageFlags flags = vk::ImageUsageFlagBits::eTransferSrc | vk::ImageUsageFlagBits::eTransferDst;
43 flags |= vk::ImageUsageFlagBits::eSampled;
47 flags |= vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eSampled;
51 flags |= vk::ImageUsageFlagBits::eDepthStencilAttachment | vk::ImageUsageFlagBits::eSampled;
55 flags |= vk::ImageUsageFlagBits::eStorage | vk::ImageUsageFlagBits::eSampled;
72 return vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent;
75 return vk::MemoryPropertyFlagBits::eDeviceLocal;
82 case vk::Format::eD16UnormS8Uint:
83 case vk::Format::eD24UnormS8Uint:
84 case vk::Format::eD32SfloatS8Uint:
85 return vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil;
87 case vk::Format::eD16Unorm:
88 case vk::Format::eD32Sfloat:
89 case vk::Format::eX8D24UnormPack32:
90 return vk::ImageAspectFlagBits::eDepth;
92 case vk::Format::eS8Uint:
93 return vk::ImageAspectFlagBits::eStencil;
96 return vk::ImageAspectFlagBits::eDepth;
100 return vk::ImageAspectFlagBits::eColor;
113 total +=
static_cast<size_t>(mip_w) * mip_h * mip_d * bpp;
114 mip_w = std::max(1U, mip_w / 2);
115 mip_h = std::max(1U, mip_h / 2);
116 mip_d = std::max(1U, mip_d / 2);
124 using namespace Kakshya;
142 m_dimensions.push_back(DataDimension::grouped(
"cubemap_faces", 6, 2));
147 uint32_t num_channels = 0;
149 case vk::Format::eR8Unorm:
150 case vk::Format::eR16Unorm:
151 case vk::Format::eR32Sfloat:
155 case vk::Format::eR8G8Unorm:
156 case vk::Format::eR16G16Unorm:
157 case vk::Format::eR32G32Sfloat:
161 case vk::Format::eR8G8B8Unorm:
162 case vk::Format::eB8G8R8Unorm:
166 case vk::Format::eR8G8B8A8Unorm:
167 case vk::Format::eB8G8R8A8Unorm:
168 case vk::Format::eR8G8B8A8Srgb:
169 case vk::Format::eR16G16B16A16Unorm:
170 case vk::Format::eR32G32B32A32Sfloat:
176 if (num_channels > 0) {
177 m_dimensions.push_back(DataDimension::channel(num_channels));
185 m_dimensions.push_back(DataDimension::grouped(
"cubemap_faces", 6, 2));
189 "VKImage dimensions inferred: {}x{}x{}, {} channels, {} mips, {} layers",
#define MF_DEBUG(comp, ctx,...)
vk::ImageAspectFlags get_aspect_flags() const
Get appropriate VkImageAspectFlags based on format.
vk::ImageUsageFlags get_usage_flags() const
Get appropriate VkImageUsageFlags based on Usage.
vk::MemoryPropertyFlags get_memory_properties() const
Get appropriate VkMemoryPropertyFlags based on Usage.
bool is_host_visible() const
Whether this image should be host-visible (staging images)
@ RENDER_TARGET
Color attachment for rendering.
@ STORAGE
Storage image (compute shader read/write)
@ TRANSFER_SRC
Transfer source.
@ TRANSFER_DST
Transfer destination.
@ STAGING
Host-visible staging image (rare)
@ TEXTURE_2D
Sampled texture (shader read)
@ DEPTH_STENCIL
Depth/stencil attachment.
size_t get_size_bytes() const
Get total size in bytes (for memory allocation)
void infer_dimensions_from_parameters()
Infer Kakshya::DataDimension entries from image parameters.
void set_modality(Kakshya::DataModality modality)
Update the semantic modality and re-infer dimensions.
std::vector< Kakshya::DataDimension > m_dimensions
Kakshya::DataModality m_modality
uint32_t vk_format_bytes_per_pixel(vk::Format fmt)
Byte width of a single pixel for a given Vulkan format.
@ GraphicsBackend
Graphics/visual rendering backend (Vulkan, OpenGL)
@ Core
Core engine, backend, subsystems.
DataModality
Data modality types for cross-modal analysis.