Skip to content

Commit

Permalink
Minor cleanup in classes vkb[::core::HPP]::Swapchain (#1041)
Browse files Browse the repository at this point in the history
  • Loading branch information
asuessenbach committed Jun 3, 2024
1 parent e8d111c commit 467630b
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 40 deletions.
29 changes: 12 additions & 17 deletions framework/core/hpp_swapchain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -292,41 +292,38 @@ HPPSwapchain::HPPSwapchain(HPPDevice &device,
this->present_mode_priority_list = present_mode_priority_list;
this->surface_format_priority_list = surface_format_priority_list;

surface_formats = device.get_gpu().get_handle().getSurfaceFormatsKHR(surface);
std::vector<vk::SurfaceFormatKHR> surface_formats = device.get_gpu().get_handle().getSurfaceFormatsKHR(surface);
LOGI("Surface supports the following surface formats:");
for (auto &surface_format : surface_formats)
{
LOGI(" \t{}", vk::to_string(surface_format.format) + ", " + vk::to_string(surface_format.colorSpace));
}

present_modes = device.get_gpu().get_handle().getSurfacePresentModesKHR(surface);
std::vector<vk::PresentModeKHR> present_modes = device.get_gpu().get_handle().getSurfacePresentModesKHR(surface);
LOGI("Surface supports the following present modes:");
for (auto &present_mode : present_modes)
{
LOGI(" \t{}", to_string(present_mode));
}

// Chose best properties based on surface capabilities
// Choose best properties based on surface capabilities
vk::SurfaceCapabilitiesKHR const surface_capabilities = device.get_gpu().get_handle().getSurfaceCapabilitiesKHR(surface);

properties.image_count = clamp(image_count,
surface_capabilities.minImageCount,
properties.old_swapchain = old_swapchain;
properties.image_count = clamp(image_count,
surface_capabilities.minImageCount,
surface_capabilities.maxImageCount ? surface_capabilities.maxImageCount : std::numeric_limits<uint32_t>::max());
properties.extent = choose_extent(extent, surface_capabilities.minImageExtent, surface_capabilities.maxImageExtent, surface_capabilities.currentExtent);
properties.array_layers = 1;
properties.surface_format = choose_surface_format(properties.surface_format, surface_formats, surface_format_priority_list);
properties.extent = choose_extent(extent, surface_capabilities.minImageExtent, surface_capabilities.maxImageExtent, surface_capabilities.currentExtent);
properties.surface_format = choose_surface_format(properties.surface_format, surface_formats, surface_format_priority_list);
properties.array_layers = 1;

vk::FormatProperties const format_properties = device.get_gpu().get_handle().getFormatProperties(properties.surface_format.format);
this->image_usage_flags = choose_image_usage(image_usage_flags, surface_capabilities.supportedUsageFlags, format_properties.optimalTilingFeatures);

properties.image_usage = composite_image_flags(this->image_usage_flags);
properties.pre_transform = choose_transform(transform, surface_capabilities.supportedTransforms, surface_capabilities.currentTransform);
properties.composite_alpha = choose_composite_alpha(vk::CompositeAlphaFlagBitsKHR::eInherit, surface_capabilities.supportedCompositeAlpha);

properties.old_swapchain = old_swapchain;
properties.present_mode = present_mode;

// Revalidate the present mode and surface format
properties.present_mode = choose_present_mode(properties.present_mode, present_modes, present_mode_priority_list);
properties.surface_format = choose_surface_format(properties.surface_format, surface_formats, surface_format_priority_list);
properties.present_mode = choose_present_mode(present_mode, present_modes, present_mode_priority_list);

vk::SwapchainCreateInfoKHR const create_info({},
surface,
Expand Down Expand Up @@ -362,8 +359,6 @@ HPPSwapchain::HPPSwapchain(HPPSwapchain &&other) :
surface{std::exchange(other.surface, nullptr)},
handle{std::exchange(other.handle, nullptr)},
images{std::exchange(other.images, {})},
surface_formats{std::exchange(other.surface_formats, {})},
present_modes{std::exchange(other.present_modes, {})},
properties{std::exchange(other.properties, {})},
present_mode_priority_list{std::exchange(other.present_mode_priority_list, {})},
surface_format_priority_list{std::exchange(other.surface_format_priority_list, {})},
Expand Down
6 changes: 1 addition & 5 deletions framework/core/hpp_swapchain.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2021-2023, NVIDIA CORPORATION. All rights reserved.
/* Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
Expand Down Expand Up @@ -122,10 +122,6 @@ class HPPSwapchain

std::vector<vk::Image> images;

std::vector<vk::SurfaceFormatKHR> surface_formats;

std::vector<vk::PresentModeKHR> present_modes;

HPPSwapchainProperties properties;

// A list of present modes in order of priority (vector[0] has high priority, vector[size-1] has low priority)
Expand Down
25 changes: 11 additions & 14 deletions framework/core/swapchain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,8 @@ Swapchain::Swapchain(Swapchain &old_swapchain,

uint32_t surface_format_count{0U};
VK_CHECK(vkGetPhysicalDeviceSurfaceFormatsKHR(this->device.get_gpu().get_handle(), surface, &surface_format_count, nullptr));
surface_formats.resize(surface_format_count);

std::vector<VkSurfaceFormatKHR> surface_formats(surface_format_count);
VK_CHECK(vkGetPhysicalDeviceSurfaceFormatsKHR(this->device.get_gpu().get_handle(), surface, &surface_format_count, surface_formats.data()));

LOGI("Surface supports the following surface formats:");
Expand All @@ -403,7 +404,8 @@ Swapchain::Swapchain(Swapchain &old_swapchain,

uint32_t present_mode_count{0U};
VK_CHECK(vkGetPhysicalDeviceSurfacePresentModesKHR(this->device.get_gpu().get_handle(), surface, &present_mode_count, nullptr));
present_modes.resize(present_mode_count);

std::vector<VkPresentModeKHR> present_modes(present_mode_count);
VK_CHECK(vkGetPhysicalDeviceSurfacePresentModesKHR(this->device.get_gpu().get_handle(), surface, &present_mode_count, present_modes.data()));

LOGI("Surface supports the following present modes:");
Expand All @@ -412,24 +414,21 @@ Swapchain::Swapchain(Swapchain &old_swapchain,
LOGI(" \t{}", to_string(pm));
}

// Chose best properties based on surface capabilities
// Choose best properties based on surface capabilities
properties.old_swapchain = old_swapchain.get_handle();
properties.image_count = choose_image_count(image_count, surface_capabilities.minImageCount, surface_capabilities.maxImageCount);
properties.extent = choose_extent(extent, surface_capabilities.minImageExtent, surface_capabilities.maxImageExtent, surface_capabilities.currentExtent);
properties.array_layers = choose_image_array_layers(1U, surface_capabilities.maxImageArrayLayers);
properties.surface_format = choose_surface_format(properties.surface_format, surface_formats, surface_format_priority_list);
properties.array_layers = choose_image_array_layers(1U, surface_capabilities.maxImageArrayLayers);

VkFormatProperties format_properties;
vkGetPhysicalDeviceFormatProperties(this->device.get_gpu().get_handle(), properties.surface_format.format, &format_properties);
this->image_usage_flags = choose_image_usage(image_usage_flags, surface_capabilities.supportedUsageFlags, format_properties.optimalTilingFeatures);
this->image_usage_flags = choose_image_usage(image_usage_flags, surface_capabilities.supportedUsageFlags, format_properties.optimalTilingFeatures);

properties.image_usage = composite_image_flags(this->image_usage_flags);
properties.pre_transform = choose_transform(transform, surface_capabilities.supportedTransforms, surface_capabilities.currentTransform);
properties.composite_alpha = choose_composite_alpha(VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR, surface_capabilities.supportedCompositeAlpha);

// Pass through defaults to the create function
properties.old_swapchain = old_swapchain.get_handle();
properties.present_mode = present_mode;

properties.present_mode = choose_present_mode(properties.present_mode, present_modes, present_mode_priority_list);
properties.surface_format = choose_surface_format(properties.surface_format, surface_formats, surface_format_priority_list);
properties.present_mode = choose_present_mode(present_mode, present_modes, present_mode_priority_list);

VkSwapchainCreateInfoKHR create_info{VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR};
create_info.minImageCount = properties.image_count;
Expand Down Expand Up @@ -527,8 +526,6 @@ Swapchain::Swapchain(Swapchain &&other) :
surface{std::exchange(other.surface, VK_NULL_HANDLE)},
handle{std::exchange(other.handle, VK_NULL_HANDLE)},
images{std::exchange(other.images, {})},
surface_formats{std::exchange(other.surface_formats, {})},
present_modes{std::exchange(other.present_modes, {})},
properties{std::exchange(other.properties, {})},
present_mode_priority_list{std::exchange(other.present_mode_priority_list, {})},
surface_format_priority_list{std::exchange(other.surface_format_priority_list, {})},
Expand Down
4 changes: 0 additions & 4 deletions framework/core/swapchain.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,10 +168,6 @@ class Swapchain

std::vector<VkImage> images;

std::vector<VkSurfaceFormatKHR> surface_formats{};

std::vector<VkPresentModeKHR> present_modes{};

SwapchainProperties properties;

// A list of present modes in order of priority (vector[0] has high priority, vector[size-1] has low priority)
Expand Down

0 comments on commit 467630b

Please sign in to comment.