Skip to content

Commit 07067b1

Browse files
corporatesharkmeta-codesync[bot]
authored andcommitted
igl | vulkan | Use C++20 designated initializers in VulkanImage.cpp
Reviewed By: pixelperfect3 Differential Revision: D94307122 fbshipit-source-id: d0c7054fcc850235f9508e5c136484cbdcb2d03e
1 parent 066f6be commit 07067b1

1 file changed

Lines changed: 111 additions & 70 deletions

File tree

src/igl/vulkan/VulkanImage.cpp

Lines changed: 111 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -150,15 +150,20 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
150150

151151
const bool isDisjoint = (createFlags & VK_IMAGE_CREATE_DISJOINT_BIT) != 0;
152152

153-
const VkImageCreateInfo ci = ivkGetImageCreateInfo(type,
154-
imageFormat_,
155-
tiling,
156-
usageFlags,
157-
extent_,
158-
mipLevels_,
159-
arrayLayers_,
160-
createFlags,
161-
samples);
153+
const VkImageCreateInfo ci = {
154+
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
155+
.flags = createFlags,
156+
.imageType = type,
157+
.format = imageFormat_,
158+
.extent = extent_,
159+
.mipLevels = mipLevels_,
160+
.arrayLayers = arrayLayers_,
161+
.samples = samples,
162+
.tiling = tiling,
163+
.usage = usageFlags,
164+
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
165+
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
166+
};
162167

163168
if (IGL_VULKAN_USE_VMA && !isDisjoint) {
164169
const VmaAllocationCreateInfo ciAlloc = {
@@ -240,18 +245,24 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
240245
IGL_DEBUG_ASSERT(numPlanes > 0 && numPlanes <= kMaxImagePlanes);
241246
// NOLINTNEXTLINE(modernize-avoid-c-arrays)
242247
const VkImagePlaneMemoryRequirementsInfo planes[kMaxImagePlanes] = {
243-
ivkGetImagePlaneMemoryRequirementsInfo(VK_IMAGE_ASPECT_PLANE_0_BIT),
244-
ivkGetImagePlaneMemoryRequirementsInfo(VK_IMAGE_ASPECT_PLANE_1_BIT),
245-
ivkGetImagePlaneMemoryRequirementsInfo(VK_IMAGE_ASPECT_PLANE_2_BIT),
248+
{.sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
249+
.planeAspect = VK_IMAGE_ASPECT_PLANE_0_BIT},
250+
{.sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
251+
.planeAspect = VK_IMAGE_ASPECT_PLANE_1_BIT},
252+
{.sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
253+
.planeAspect = VK_IMAGE_ASPECT_PLANE_2_BIT},
246254
};
247255
// NOLINTNEXTLINE(modernize-avoid-c-arrays)
248256
const VkImageMemoryRequirementsInfo2 imgRequirements[kMaxImagePlanes] = {
249-
ivkGetImageMemoryRequirementsInfo2(isDisjoint && numPlanes > 0 ? &planes[0] : nullptr,
250-
vkImage_),
251-
ivkGetImageMemoryRequirementsInfo2(isDisjoint && numPlanes > 1 ? &planes[1] : nullptr,
252-
vkImage_),
253-
ivkGetImageMemoryRequirementsInfo2(isDisjoint && numPlanes > 2 ? &planes[2] : nullptr,
254-
vkImage_),
257+
{.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
258+
.pNext = isDisjoint && numPlanes > 0 ? &planes[0] : nullptr,
259+
.image = vkImage_},
260+
{.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
261+
.pNext = isDisjoint && numPlanes > 1 ? &planes[1] : nullptr,
262+
.image = vkImage_},
263+
{.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
264+
.pNext = isDisjoint && numPlanes > 2 ? &planes[2] : nullptr,
265+
.image = vkImage_},
255266
};
256267
for (uint32_t p = 0; p != numPlanes; p++) {
257268
ctx_->vf_.vkGetImageMemoryRequirements2(device_, &imgRequirements[p], &memRequirements[p]);
@@ -280,10 +291,18 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
280291
};
281292
// NOLINTNEXTLINE(modernize-avoid-c-arrays)
282293
const VkBindImageMemoryInfo bindInfo[kMaxImagePlanes] = {
283-
ivkGetBindImageMemoryInfo(
284-
isDisjoint ? &bindImagePlaneMemoryInfo[0] : nullptr, vkImage_, vkMemory_[0]),
285-
ivkGetBindImageMemoryInfo(&bindImagePlaneMemoryInfo[1], vkImage_, vkMemory_[1]),
286-
ivkGetBindImageMemoryInfo(&bindImagePlaneMemoryInfo[2], vkImage_, vkMemory_[2]),
294+
{.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
295+
.pNext = isDisjoint ? &bindImagePlaneMemoryInfo[0] : nullptr,
296+
.image = vkImage_,
297+
.memory = vkMemory_[0]},
298+
{.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
299+
.pNext = &bindImagePlaneMemoryInfo[1],
300+
.image = vkImage_,
301+
.memory = vkMemory_[1]},
302+
{.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
303+
.pNext = &bindImagePlaneMemoryInfo[2],
304+
.image = vkImage_,
305+
.memory = vkMemory_[2]},
287306
};
288307
VK_ASSERT(ctx_->vf_.vkBindImageMemory2(device_, numPlanes, bindInfo));
289308

@@ -349,21 +368,25 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
349368

350369
setName(debugName);
351370

352-
VkImageCreateInfo ci = ivkGetImageCreateInfo(type,
353-
imageFormat_,
354-
tiling,
355-
usageFlags,
356-
extent_,
357-
mipLevels_,
358-
arrayLayers_,
359-
createFlags,
360-
samples);
361-
362371
const VkExternalMemoryImageCreateInfo extImgMem = {
363372
.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
364373
.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID};
365374

366-
ci.pNext = &extImgMem;
375+
const VkImageCreateInfo ci = {
376+
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
377+
.pNext = &extImgMem,
378+
.flags = createFlags,
379+
.imageType = type,
380+
.format = imageFormat_,
381+
.extent = extent_,
382+
.mipLevels = mipLevels_,
383+
.arrayLayers = arrayLayers_,
384+
.samples = samples,
385+
.tiling = tiling,
386+
.usage = usageFlags,
387+
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
388+
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
389+
};
367390

368391
VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));
369392
VK_ASSERT(ivkSetDebugObjectName(
@@ -450,22 +473,26 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
450473

451474
setName(debugName);
452475

453-
VkImageCreateInfo ci = ivkGetImageCreateInfo(type,
454-
imageFormat_,
455-
tiling,
456-
usageFlags,
457-
extent_,
458-
mipLevels_,
459-
arrayLayers_,
460-
createFlags,
461-
samples);
462-
463476
VkExternalMemoryImageCreateInfo extImgMem = {
464477
.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
465478
.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
466479
};
467480

468-
ci.pNext = &extImgMem;
481+
const VkImageCreateInfo ci = {
482+
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
483+
.pNext = &extImgMem,
484+
.flags = createFlags,
485+
.imageType = type,
486+
.format = imageFormat_,
487+
.extent = extent_,
488+
.mipLevels = mipLevels_,
489+
.arrayLayers = arrayLayers_,
490+
.samples = samples,
491+
.tiling = tiling,
492+
.usage = usageFlags,
493+
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
494+
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
495+
};
469496

470497
// create image.. importing external memory cannot use VMA
471498
VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));
@@ -579,22 +606,26 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
579606
IGL_DEBUG_ASSERT(imageFormat_ != VK_FORMAT_UNDEFINED, "Invalid VkFormat value");
580607
IGL_DEBUG_ASSERT(samples_ > 0, "The image must contain at least one sample");
581608

582-
VkImageCreateInfo ci = ivkGetImageCreateInfo(type,
583-
imageFormat_,
584-
tiling,
585-
usageFlags,
586-
extent_,
587-
mipLevels_,
588-
arrayLayers_,
589-
createFlags,
590-
samples);
591-
592609
const VkExternalMemoryImageCreateInfo extImgMem = {
593610
.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
594611
.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
595612
};
596613

597-
ci.pNext = &extImgMem;
614+
const VkImageCreateInfo ci = {
615+
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
616+
.pNext = &extImgMem,
617+
.flags = createFlags,
618+
.imageType = type,
619+
.format = imageFormat_,
620+
.extent = extent_,
621+
.mipLevels = mipLevels_,
622+
.arrayLayers = arrayLayers_,
623+
.samples = samples,
624+
.tiling = tiling,
625+
.usage = usageFlags,
626+
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
627+
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
628+
};
598629

599630
// create image. importing external memory cannot use VMA
600631
VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));
@@ -760,17 +791,21 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
760791
.handleTypes = compatibleHandleTypes,
761792
};
762793

763-
VkImageCreateInfo ci = ivkGetImageCreateInfo(type,
764-
imageFormat_,
765-
tiling,
766-
usageFlags,
767-
extent_,
768-
mipLevels_,
769-
arrayLayers_,
770-
createFlags,
771-
samples);
772-
773-
ci.pNext = &externalImageCreateInfo;
794+
const VkImageCreateInfo ci = {
795+
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
796+
.pNext = &externalImageCreateInfo,
797+
.flags = createFlags,
798+
.imageType = type,
799+
.format = imageFormat_,
800+
.extent = extent_,
801+
.mipLevels = mipLevels_,
802+
.arrayLayers = arrayLayers_,
803+
.samples = samples,
804+
.tiling = tiling,
805+
.usage = usageFlags,
806+
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
807+
.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,
808+
};
774809

775810
// create VkImage importing external memory cannot use VMA
776811
VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));
@@ -801,8 +836,10 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
801836
const uint32_t numPlanes = igl::vulkan::getNumImagePlanes(format);
802837
IGL_DEBUG_ASSERT(numPlanes > 0 && numPlanes <= kMaxImagePlanes);
803838
for (uint32_t p = 0; p != numPlanes; p++) {
804-
auto imagePlaneMemoryRequirementsInfo = ivkGetImagePlaneMemoryRequirementsInfo(
805-
(VkImageAspectFlagBits)(VK_IMAGE_ASPECT_PLANE_0_BIT << p));
839+
auto imagePlaneMemoryRequirementsInfo = VkImagePlaneMemoryRequirementsInfo{
840+
.sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,
841+
.planeAspect = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_PLANE_0_BIT << p),
842+
};
806843

807844
const VkImageMemoryRequirementsInfo2 imageMemoryRequirementInfo = {
808845
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
@@ -840,8 +877,12 @@ VulkanImage::VulkanImage(const VulkanContext& ctx,
840877
.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,
841878
.planeAspect = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_PLANE_0_BIT << p),
842879
};
843-
bindInfo[p] = ivkGetBindImageMemoryInfo(
844-
numPlanes > 1 ? &bindImagePlaneMemoryInfo[p] : nullptr, vkImage_, vkMemory_[p]);
880+
bindInfo[p] = VkBindImageMemoryInfo{
881+
.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,
882+
.pNext = numPlanes > 1 ? &bindImagePlaneMemoryInfo[p] : nullptr,
883+
.image = vkImage_,
884+
.memory = vkMemory_[p],
885+
};
845886
}
846887
VK_ASSERT(ctx_->vf_.vkBindImageMemory2(device_, numPlanes, bindInfo.data()));
847888

0 commit comments

Comments
 (0)