VulkanImage Class — pytorch Architecture
Architecture documentation for the VulkanImage class in Resource.h from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/native/vulkan/api/Resource.h lines 252–397
class VulkanImage final {
public:
struct ImageProperties final {
VkImageType image_type;
VkFormat image_format;
VkExtent3D image_extents;
VkImageUsageFlags image_usage;
};
struct ViewProperties final {
VkImageViewType view_type;
VkFormat view_format;
};
using SamplerProperties = ImageSampler::Properties;
struct Handles final {
VkImage image;
VkImageView image_view;
VkSampler sampler;
};
explicit VulkanImage();
explicit VulkanImage(
const VmaAllocator,
const VmaAllocationCreateInfo&,
const ImageProperties&,
const ViewProperties&,
const SamplerProperties&,
const VkImageLayout layout,
VkSampler,
const bool allocate_memory = true);
VulkanImage(const VulkanImage&) = delete;
VulkanImage& operator=(const VulkanImage&) = delete;
VulkanImage(VulkanImage&&) noexcept;
VulkanImage& operator=(VulkanImage&&) noexcept;
~VulkanImage();
struct Package final {
VkImage handle;
VkImageLayout image_layout;
VkImageView image_view;
VkSampler image_sampler;
};
friend struct ImageMemoryBarrier;
private:
ImageProperties image_properties_;
ViewProperties view_properties_;
SamplerProperties sampler_properties_;
// The allocator object this was allocated from
VmaAllocator allocator_;
// Handles to the allocated memory
MemoryAllocation memory_;
// Indicates whether the underlying memory is owned by this resource
bool owns_memory_;
Handles handles_;
// Layout
VkImageLayout layout_;
public:
void create_image_view();
inline VkDevice device() const {
VmaAllocatorInfo allocator_info{};
vmaGetAllocatorInfo(allocator_, &allocator_info);
return allocator_info.device;
}
inline VmaAllocator vma_allocator() const {
return allocator_;
}
inline VmaAllocation allocation() const {
return memory_.allocation;
}
inline VmaAllocationCreateInfo allocation_create_info() const {
return VmaAllocationCreateInfo(memory_.create_info);
}
inline VkFormat format() const {
return image_properties_.image_format;
}
inline VkExtent3D extents() const {
return image_properties_.image_extents;
}
inline VkImage handle() const {
return handles_.image;
}
inline VkImageView image_view() const {
return handles_.image_view;
}
inline VkSampler sampler() const {
return handles_.sampler;
}
Package package() const {
return {
handles_.image,
layout_,
handles_.image_view,
handles_.sampler,
};
}
inline VkImageLayout layout() const {
return layout_;
}
inline void set_layout(const VkImageLayout layout) {
layout_ = layout;
}
inline bool has_memory() const {
return (memory_.allocation != VK_NULL_HANDLE);
}
inline bool owns_memory() const {
return owns_memory_;
}
inline operator bool() const {
return (handles_.image != VK_NULL_HANDLE);
}
inline void bind_allocation(const MemoryAllocation& memory) {
VK_CHECK_COND(!memory_, "Cannot bind an already bound allocation!");
VK_CHECK(vmaBindImageMemory(allocator_, memory.allocation, handles_.image));
memory_.allocation = memory.allocation;
// Only create the image view if the image has been bound to memory
create_image_view();
}
VkMemoryRequirements get_memory_requirements() const;
};
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free