55
66#include < iostream>
77
8- AllocatedImage createImageArray (VulkanDevice* device, VkExtent3D size, VkFormat format, VkImageUsageFlags usage, bool mipmapped, uint32_t arrayLayers) {
8+ AllocatedImage createImageArray (VulkanDevice* device, VkExtent3D size, VkFormat format, VkImageUsageFlags usage, bool mipmapped, uint32_t arrayLayers, VkSampleCountFlagBits samples ) {
99 AllocatedImage newImage{};
1010 newImage.device = device;
1111 newImage.imageFormat = format;
@@ -27,7 +27,7 @@ AllocatedImage createImageArray(VulkanDevice* device, VkExtent3D size, VkFormat
2727 imageInfo.extent = size;
2828 imageInfo.mipLevels = newImage.mipLevels ;
2929 imageInfo.arrayLayers = arrayLayers;
30- imageInfo.samples = VK_SAMPLE_COUNT_1_BIT ;
30+ imageInfo.samples = samples ;
3131 imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
3232 imageInfo.usage = usage;
3333 imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
@@ -87,7 +87,7 @@ AllocatedImage createImageArray(VulkanDevice* device, VkExtent3D size, VkFormat
8787 return newImage;
8888}
8989
90- AllocatedImage createImage (VulkanDevice* device, VkExtent3D size, VkFormat format, VkImageUsageFlags usage, bool mipmapped) {
90+ AllocatedImage createImage (VulkanDevice* device, VkExtent3D size, VkFormat format, VkImageUsageFlags usage, bool mipmapped, VkSampleCountFlagBits samples ) {
9191 AllocatedImage newImage{};
9292 newImage.device = device;
9393 newImage.imageFormat = format;
@@ -109,7 +109,7 @@ AllocatedImage createImage(VulkanDevice* device, VkExtent3D size, VkFormat forma
109109 imageInfo.extent = size;
110110 imageInfo.mipLevels = newImage.mipLevels ;
111111 imageInfo.arrayLayers = 1 ;
112- imageInfo.samples = VK_SAMPLE_COUNT_1_BIT ;
112+ imageInfo.samples = samples ;
113113 imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
114114 imageInfo.usage = usage;
115115 imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
@@ -170,14 +170,14 @@ AllocatedImage createImage(VulkanDevice* device, VkExtent3D size, VkFormat forma
170170}
171171
172172
173- AllocatedImage createImage (VulkanDevice* device, void * data, VkExtent3D size, VkFormat format, VkImageUsageFlags usage, bool mipmapped) {
173+ AllocatedImage createImage (VulkanDevice* device, void * data, VkExtent3D size, VkFormat format, VkImageUsageFlags usage, bool mipmapped, VkSampleCountFlagBits samples ) {
174174 // upload data to staging upload buffer
175175 size_t dataSize = size.depth * size.height * size.width * 4 ; // each pixel is 4 bytes (8bit channels RGBA)
176176 AllocatedBuffer uploadBuffer = createBuffer (device, dataSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT);
177177 vmaCopyMemoryToAllocation (device->getAllocator (), data, uploadBuffer.allocation , 0 , dataSize);
178178
179179 // create image
180- AllocatedImage newImage = createImage (device, size, format, usage | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT, mipmapped); // not exactly sure why we need transfer src but tutorial says so
180+ AllocatedImage newImage = createImage (device, size, format, usage | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT, mipmapped, samples ); // not exactly sure why we need transfer src but tutorial says so
181181
182182 // submit copy from staging to real
183183 device->immediateSubmit ([&](VkCommandBuffer cmd) {
0 commit comments