39inline Grindstone::GraphicsAPI::ImageUsageFlags operator|(Grindstone::GraphicsAPI::ImageUsageFlags a,
const Grindstone::GraphicsAPI::ImageUsageFlags b) {
51 static const uint64_t MAPPED_MEMORY_ENTIRE_BUFFER = UINT64_MAX;
54 const char* debugName;
58 uint32_t mipLevels = 1;
59 uint32_t arrayLayers = 1;
61 GraphicsAPI::Format format = GraphicsAPI::Format::Invalid;
62 GraphicsAPI::ImageDimension imageDimensions = GraphicsAPI::ImageDimension::Dimension2D;
63 GraphicsAPI::MemoryUsage memoryUsage = GraphicsAPI::MemoryUsage::GPUOnly;
66 const char* initialData =
nullptr;
67 uint64_t initialDataSize = 0;
73 uint64_t bufferOffset = 0;
74 uint32_t bufferRowLength = 0;
75 uint32_t bufferImageHeight = 0;
82 uint32_t mipLevel = 0;
83 uint32_t baseArrayLayer = 0;
84 uint32_t arrayLayerCount = 1;
88 Image(
const Image&) =
default;
89 Image(Image&&) noexcept = default;
90 Image& operator=(const Image&) = default;
91 Image& operator=(Image&&) noexcept = default;
99 uint64_t maxImageSize,
100 GraphicsAPI::ImageDimension imageDimension,
101 GraphicsAPI::Format format,
102 Grindstone::Containers::BitsetFlags<GraphicsAPI::ImageUsageFlags> imageUsage,
103 GraphicsAPI::MemoryUsage memoryUsage = GraphicsAPI::MemoryUsage::GPUOnly
107 mipLevels(mipLevels),
108 arrayLayers(arrayLayers),
109 maxImageSize(maxImageSize),
110 imageDimension(imageDimension),
112 imageUsage(imageUsage),
113 memoryUsage(memoryUsage) {}
115 bool IsCubemap()
const {
return imageUsage.Test(GraphicsAPI::ImageUsageFlags::Cubemap); }
116 uint32_t GetWidth()
const {
return width; }
117 uint32_t GetHeight()
const {
return height; }
118 uint32_t GetDepth()
const {
return depth; }
119 uint32_t GetMipLevels()
const {
return mipLevels; }
120 uint32_t GetArrayLayers()
const {
return arrayLayers; }
121 uint64_t GetMaxImageSize()
const {
return maxImageSize; }
122 GraphicsAPI::ImageDimension GetImageDimension()
const {
return imageDimension; }
123 GraphicsAPI::Format GetFormat()
const {
return format; }
124 Grindstone::Containers::BitsetFlags<GraphicsAPI::ImageUsageFlags> GetImageUsage()
const {
return imageUsage; }
125 GraphicsAPI::MemoryUsage GetMemoryUsage()
const {
return memoryUsage; }
128 virtual void Resize(uint32_t width, uint32_t height) = 0;
131 virtual void UploadData(
const char* data, uint64_t dataSize) = 0;
134 virtual void* MapMemory(uint64_t dataSize = MAPPED_MEMORY_ENTIRE_BUFFER, uint64_t dataOffset = 0) = 0;
137 virtual void UnmapMemory() = 0;
142 virtual void UploadDataRegions(
void* buffer,
size_t bufferSize,
ImageRegion* regions, uint32_t regionCount) = 0;
145 virtual Grindstone::Buffer ReadbackMemory() = 0;
153 uint32_t arrayLayers;
154 uint64_t maxImageSize;
155 GraphicsAPI::ImageDimension imageDimension;
156 GraphicsAPI::Format format;
157 Grindstone::Containers::BitsetFlags<GraphicsAPI::ImageUsageFlags> imageUsage;
158 GraphicsAPI::MemoryUsage memoryUsage = GraphicsAPI::MemoryUsage::GPUOnly;