VulkanBenchmarks: refactor into Image class
Bug: b/176981107
Change-Id: Ifab91e61ceb74c5b6caf62b8f9f1abbd8fef9e01
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/45848
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
Commit-Queue: Nicolas Capens <nicolascapens@google.com>
diff --git a/tests/VulkanBenchmarks/VulkanBenchmarks.cpp b/tests/VulkanBenchmarks/VulkanBenchmarks.cpp
index 4afc421..6b47b77 100644
--- a/tests/VulkanBenchmarks/VulkanBenchmarks.cpp
+++ b/tests/VulkanBenchmarks/VulkanBenchmarks.cpp
@@ -394,8 +394,63 @@
std::vector<vk::ImageView> imageViews;
};
-struct Image
+class Image
{
+public:
+ Image(vk::Device device, uint32_t width, uint32_t height, vk::Format format, vk::SampleCountFlagBits sampleCount = vk::SampleCountFlagBits::e1)
+ : device(device)
+ {
+ vk::ImageCreateInfo imageInfo;
+ imageInfo.imageType = vk::ImageType::e2D;
+ imageInfo.format = format;
+ imageInfo.tiling = vk::ImageTiling::eOptimal;
+ imageInfo.initialLayout = vk::ImageLayout::eGeneral;
+ imageInfo.usage = vk::ImageUsageFlagBits::eColorAttachment;
+ imageInfo.samples = sampleCount;
+ imageInfo.extent = vk::Extent3D(width, height, 1);
+ imageInfo.mipLevels = 1;
+ imageInfo.arrayLayers = 1;
+
+ image = device.createImage(imageInfo);
+
+ vk::MemoryRequirements memoryRequirements = device.getImageMemoryRequirements(image);
+
+ vk::MemoryAllocateInfo allocateInfo;
+ allocateInfo.allocationSize = memoryRequirements.size;
+ allocateInfo.memoryTypeIndex = 0; //getMemoryTypeIndex(memoryRequirements.memoryTypeBits, vk::MemoryPropertyFlagBits::eDeviceLocal);
+
+ imageMemory = device.allocateMemory(allocateInfo);
+
+ device.bindImageMemory(image, imageMemory, 0);
+
+ vk::ImageViewCreateInfo imageViewInfo;
+ imageViewInfo.image = image;
+ imageViewInfo.viewType = vk::ImageViewType::e2D;
+ imageViewInfo.format = format;
+ imageViewInfo.subresourceRange.aspectMask = vk::ImageAspectFlagBits::eColor;
+ imageViewInfo.subresourceRange.baseMipLevel = 0;
+ imageViewInfo.subresourceRange.levelCount = 1;
+ imageViewInfo.subresourceRange.baseArrayLayer = 0;
+ imageViewInfo.subresourceRange.layerCount = 1;
+
+ imageView = device.createImageView(imageViewInfo);
+ }
+
+ ~Image()
+ {
+ device.destroyImage(image);
+ device.destroyImageView(imageView);
+ device.freeMemory(imageMemory);
+ }
+
+ vk::ImageView getImageView()
+ {
+ return imageView;
+ }
+
+private:
+ const vk::Device device;
+
vk::Image image;
vk::DeviceMemory imageMemory;
vk::ImageView imageView;
@@ -411,44 +466,10 @@
if(multisample)
{
- // Create multisample images
- vk::ImageCreateInfo imageInfo;
- imageInfo.imageType = vk::ImageType::e2D;
- imageInfo.format = colorFormat;
- imageInfo.tiling = vk::ImageTiling::eOptimal;
- imageInfo.initialLayout = vk::ImageLayout::eGeneral;
- imageInfo.usage = vk::ImageUsageFlagBits::eColorAttachment;
- imageInfo.samples = vk::SampleCountFlagBits::e4;
- imageInfo.extent = vk::Extent3D(width, height, 1);
- imageInfo.mipLevels = 1;
- imageInfo.arrayLayers = 1;
-
- multisampleImage.image = device.createImage(imageInfo);
-
- vk::MemoryRequirements memoryRequirements = device.getImageMemoryRequirements(multisampleImage.image);
-
- vk::MemoryAllocateInfo allocateInfo;
- allocateInfo.allocationSize = memoryRequirements.size;
- allocateInfo.memoryTypeIndex = 0; //getMemoryTypeIndex(memoryRequirements.memoryTypeBits, vk::MemoryPropertyFlagBits::eDeviceLocal);
-
- multisampleImage.imageMemory = device.allocateMemory(allocateInfo);
-
- device.bindImageMemory(multisampleImage.image, multisampleImage.imageMemory, 0);
-
- vk::ImageViewCreateInfo colorAttachmentView;
- colorAttachmentView.image = multisampleImage.image;
- colorAttachmentView.viewType = vk::ImageViewType::e2D;
- colorAttachmentView.format = colorFormat;
- colorAttachmentView.subresourceRange.aspectMask = vk::ImageAspectFlagBits::eColor;
- colorAttachmentView.subresourceRange.baseMipLevel = 0;
- colorAttachmentView.subresourceRange.levelCount = 1;
- colorAttachmentView.subresourceRange.baseArrayLayer = 0;
- colorAttachmentView.subresourceRange.layerCount = 1;
-
- multisampleImage.imageView = device.createImageView(colorAttachmentView);
+ multisampleImage = new Image(device, width, height, colorFormat, vk::SampleCountFlagBits::e4);
// We'll be rendering to attachment location 0
- attachments[0] = multisampleImage.imageView;
+ attachments[0] = multisampleImage->getImageView();
attachments[1] = attachment; // Resolve attachment
}
else
@@ -470,11 +491,9 @@
~Framebuffer()
{
- device.destroyFramebuffer(framebuffer, nullptr);
+ device.destroyFramebuffer(framebuffer);
- device.destroyImage(multisampleImage.image, nullptr);
- device.destroyImageView(multisampleImage.imageView, nullptr);
- device.freeMemory(multisampleImage.imageMemory, nullptr);
+ delete multisampleImage;
}
vk::Framebuffer getFramebuffer()
@@ -483,11 +502,11 @@
}
private:
- vk::Device device;
+ const vk::Device device;
vk::Framebuffer framebuffer;
- Image multisampleImage;
+ Image *multisampleImage = nullptr;
};
static std::vector<uint32_t> compileGLSLtoSPIRV(const char *glslSource, EShLanguage glslLanguage)