Skip to content

Commit 5d310bf

Browse files
committed
Carried changes over to all chapters.
1 parent 399bade commit 5d310bf

30 files changed

+957
-710
lines changed

attachments/06_swap_chain_creation.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -245,19 +245,20 @@ class HelloTriangleApplication {
245245
}
246246

247247
void createSwapChain() {
248-
auto surfaceCapabilities = physicalDevice.getSurfaceCapabilitiesKHR( surface );
248+
swapChainImageFormat = chooseSwapSurfaceFormat( physicalDevice.getSurfaceFormatsKHR( surface ) );
249+
auto surfaceCapabilities = physicalDevice.getSurfaceCapabilitiesKHR( surface );
249250
vk::SwapchainCreateInfoKHR swapChainCreateInfo{ .surface = surface,
250-
.minImageCount = chooseSwapMinImageCount( surfaceCapabilities ),
251-
.imageFormat = chooseSwapSurfaceFormat( physicalDevice.getSurfaceFormatsKHR( surface ) ),
252-
.imageColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear,
253-
.imageExtent = chooseSwapExtent( surfaceCapabilities ),
254-
.imageArrayLayers = 1,
255-
.imageUsage = vk::ImageUsageFlagBits::eColorAttachment,
256-
.imageSharingMode = vk::SharingMode::eExclusive,
257-
.preTransform = surfaceCapabilities.currentTransform,
258-
.compositeAlpha = vk::CompositeAlphaFlagBitsKHR::eOpaque,
259-
.presentMode = chooseSwapPresentMode( physicalDevice.getSurfacePresentModesKHR( surface ) ),
260-
.clipped = true };
251+
.minImageCount = chooseSwapMinImageCount( surfaceCapabilities ),
252+
.imageFormat = swapChainImageFormat,
253+
.imageColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear,
254+
.imageExtent = chooseSwapExtent( surfaceCapabilities ),
255+
.imageArrayLayers = 1,
256+
.imageUsage = vk::ImageUsageFlagBits::eColorAttachment,
257+
.imageSharingMode = vk::SharingMode::eExclusive,
258+
.preTransform = surfaceCapabilities.currentTransform,
259+
.compositeAlpha = vk::CompositeAlphaFlagBitsKHR::eOpaque,
260+
.presentMode = chooseSwapPresentMode( physicalDevice.getSurfacePresentModesKHR( surface ) ),
261+
.clipped = true };
261262

262263
swapChain = vk::raii::SwapchainKHR( device, swapChainCreateInfo );
263264
swapChainImages = swapChain.getImages();

attachments/07_image_views.cpp

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <memory>
77
#include <algorithm>
88
#include <limits>
9+
#include <assert.h>
910

1011
#ifdef __INTELLISENSE__
1112
#include <vulkan/vulkan_raii.hpp>
@@ -49,11 +50,10 @@ class HelloTriangleApplication {
4950
vk::raii::PhysicalDevice physicalDevice = nullptr;
5051
vk::raii::Device device = nullptr;
5152
vk::raii::Queue queue = nullptr;
52-
53-
vk::raii::SwapchainKHR swapChain = nullptr;
54-
std::vector<vk::Image> swapChainImages;
55-
vk::Format swapChainImageFormat = vk::Format::eUndefined;
56-
vk::Extent2D swapChainExtent;
53+
vk::raii::SwapchainKHR swapChain = nullptr;
54+
std::vector<vk::Image> swapChainImages;
55+
vk::Format swapChainImageFormat = vk::Format::eUndefined;
56+
vk::Extent2D swapChainExtent;
5757
std::vector<vk::raii::ImageView> swapChainImageViews;
5858

5959
std::vector<const char*> requiredDeviceExtension = {
@@ -246,19 +246,20 @@ class HelloTriangleApplication {
246246
}
247247

248248
void createSwapChain() {
249+
swapChainImageFormat = chooseSwapSurfaceFormat( physicalDevice.getSurfaceFormatsKHR( surface ) );
249250
auto surfaceCapabilities = physicalDevice.getSurfaceCapabilitiesKHR( surface );
250-
swapChainImageFormat = chooseSwapSurfaceFormat(physicalDevice.getSurfaceFormatsKHR( surface ));
251-
swapChainExtent = chooseSwapExtent(surfaceCapabilities);
252-
auto minImageCount = std::max( 3u, surfaceCapabilities.minImageCount );
253-
minImageCount = ( surfaceCapabilities.maxImageCount > 0 && minImageCount > surfaceCapabilities.maxImageCount ) ? surfaceCapabilities.maxImageCount : minImageCount;
254-
vk::SwapchainCreateInfoKHR swapChainCreateInfo{
255-
.surface = surface, .minImageCount = minImageCount,
256-
.imageFormat = swapChainImageFormat, .imageColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear,
257-
.imageExtent = swapChainExtent, .imageArrayLayers =1,
258-
.imageUsage = vk::ImageUsageFlagBits::eColorAttachment, .imageSharingMode = vk::SharingMode::eExclusive,
259-
.preTransform = surfaceCapabilities.currentTransform, .compositeAlpha = vk::CompositeAlphaFlagBitsKHR::eOpaque,
260-
.presentMode = chooseSwapPresentMode(physicalDevice.getSurfacePresentModesKHR( surface )),
261-
.clipped = true };
251+
vk::SwapchainCreateInfoKHR swapChainCreateInfo{ .surface = surface,
252+
.minImageCount = chooseSwapMinImageCount( surfaceCapabilities ),
253+
.imageFormat = swapChainImageFormat,
254+
.imageColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear,
255+
.imageExtent = chooseSwapExtent( surfaceCapabilities ),
256+
.imageArrayLayers = 1,
257+
.imageUsage = vk::ImageUsageFlagBits::eColorAttachment,
258+
.imageSharingMode = vk::SharingMode::eExclusive,
259+
.preTransform = surfaceCapabilities.currentTransform,
260+
.compositeAlpha = vk::CompositeAlphaFlagBitsKHR::eOpaque,
261+
.presentMode = chooseSwapPresentMode( physicalDevice.getSurfacePresentModesKHR( surface ) ),
262+
.clipped = true };
262263

263264
swapChain = vk::raii::SwapchainKHR( device, swapChainCreateInfo );
264265
swapChainImages = swapChain.getImages();
@@ -276,22 +277,30 @@ class HelloTriangleApplication {
276277
}
277278
}
278279

280+
static uint32_t chooseSwapMinImageCount(vk::SurfaceCapabilitiesKHR const & surfaceCapabilities) {
281+
auto minImageCount = std::max( 3u, surfaceCapabilities.minImageCount );
282+
if ((0 < surfaceCapabilities.maxImageCount) && (surfaceCapabilities.maxImageCount < minImageCount)) {
283+
minImageCount = surfaceCapabilities.maxImageCount;
284+
}
285+
return minImageCount;
286+
}
287+
279288
static vk::Format chooseSwapSurfaceFormat(const std::vector<vk::SurfaceFormatKHR>& availableFormats) {
280-
const auto formatIt = std::ranges::find_if(availableFormats,
281-
[](const auto& format) {
282-
return format.format == vk::Format::eB8G8R8A8Srgb &&
283-
format.colorSpace == vk::ColorSpaceKHR::eSrgbNonlinear;
284-
});
289+
assert(!availableFormats.empty());
290+
const auto formatIt = std::ranges::find_if(
291+
availableFormats,
292+
[]( const auto & format ) { return format.format == vk::Format::eB8G8R8A8Srgb && format.colorSpace == vk::ColorSpaceKHR::eSrgbNonlinear; } );
285293
return formatIt != availableFormats.end() ? formatIt->format : availableFormats[0].format;
286294
}
287295

288296
static vk::PresentModeKHR chooseSwapPresentMode(const std::vector<vk::PresentModeKHR>& availablePresentModes) {
297+
assert(std::ranges::any_of(availablePresentModes, [](auto presentMode){ return presentMode == vk::PresentMode::eFifo; }));
289298
return std::ranges::any_of(availablePresentModes,
290299
[](const vk::PresentModeKHR value) { return vk::PresentModeKHR::eMailbox == value; } ) ? vk::PresentModeKHR::eMailbox : vk::PresentModeKHR::eFifo;
291300
}
292301

293302
vk::Extent2D chooseSwapExtent(const vk::SurfaceCapabilitiesKHR& capabilities) {
294-
if (capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max()) {
303+
if (capabilities.currentExtent.width != 0xFFFFFFFF) {
295304
return capabilities.currentExtent;
296305
}
297306
int width, height;

attachments/08_graphics_pipeline.cpp

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <memory>
77
#include <algorithm>
88
#include <limits>
9+
#include <assert.h>
910

1011
#ifdef __INTELLISENSE__
1112
#include <vulkan/vulkan_raii.hpp>
@@ -49,11 +50,10 @@ class HelloTriangleApplication {
4950
vk::raii::PhysicalDevice physicalDevice = nullptr;
5051
vk::raii::Device device = nullptr;
5152
vk::raii::Queue queue = nullptr;
52-
53-
vk::raii::SwapchainKHR swapChain = nullptr;
54-
std::vector<vk::Image> swapChainImages;
55-
vk::Format swapChainImageFormat = vk::Format::eUndefined;
56-
vk::Extent2D swapChainExtent;
53+
vk::raii::SwapchainKHR swapChain = nullptr;
54+
std::vector<vk::Image> swapChainImages;
55+
vk::Format swapChainImageFormat = vk::Format::eUndefined;
56+
vk::Extent2D swapChainExtent;
5757
std::vector<vk::raii::ImageView> swapChainImageViews;
5858

5959
std::vector<const char*> requiredDeviceExtension = {
@@ -247,19 +247,20 @@ class HelloTriangleApplication {
247247
}
248248

249249
void createSwapChain() {
250+
swapChainImageFormat = chooseSwapSurfaceFormat( physicalDevice.getSurfaceFormatsKHR( surface ) );
250251
auto surfaceCapabilities = physicalDevice.getSurfaceCapabilitiesKHR( surface );
251-
swapChainImageFormat = chooseSwapSurfaceFormat(physicalDevice.getSurfaceFormatsKHR( surface ));
252-
swapChainExtent = chooseSwapExtent(surfaceCapabilities);
253-
auto minImageCount = std::max( 3u, surfaceCapabilities.minImageCount );
254-
minImageCount = ( surfaceCapabilities.maxImageCount > 0 && minImageCount > surfaceCapabilities.maxImageCount ) ? surfaceCapabilities.maxImageCount : minImageCount;
255-
vk::SwapchainCreateInfoKHR swapChainCreateInfo{
256-
.surface = surface, .minImageCount = minImageCount,
257-
.imageFormat = swapChainImageFormat, .imageColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear,
258-
.imageExtent = swapChainExtent, .imageArrayLayers =1,
259-
.imageUsage = vk::ImageUsageFlagBits::eColorAttachment, .imageSharingMode = vk::SharingMode::eExclusive,
260-
.preTransform = surfaceCapabilities.currentTransform, .compositeAlpha = vk::CompositeAlphaFlagBitsKHR::eOpaque,
261-
.presentMode = chooseSwapPresentMode(physicalDevice.getSurfacePresentModesKHR( surface )),
262-
.clipped = true };
252+
vk::SwapchainCreateInfoKHR swapChainCreateInfo{ .surface = surface,
253+
.minImageCount = chooseSwapMinImageCount( surfaceCapabilities ),
254+
.imageFormat = swapChainImageFormat,
255+
.imageColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear,
256+
.imageExtent = chooseSwapExtent( surfaceCapabilities ),
257+
.imageArrayLayers = 1,
258+
.imageUsage = vk::ImageUsageFlagBits::eColorAttachment,
259+
.imageSharingMode = vk::SharingMode::eExclusive,
260+
.preTransform = surfaceCapabilities.currentTransform,
261+
.compositeAlpha = vk::CompositeAlphaFlagBitsKHR::eOpaque,
262+
.presentMode = chooseSwapPresentMode( physicalDevice.getSurfacePresentModesKHR( surface ) ),
263+
.clipped = true };
263264

264265
swapChain = vk::raii::SwapchainKHR( device, swapChainCreateInfo );
265266
swapChainImages = swapChain.getImages();
@@ -281,22 +282,30 @@ class HelloTriangleApplication {
281282

282283
}
283284

285+
static uint32_t chooseSwapMinImageCount(vk::SurfaceCapabilitiesKHR const & surfaceCapabilities) {
286+
auto minImageCount = std::max( 3u, surfaceCapabilities.minImageCount );
287+
if ((0 < surfaceCapabilities.maxImageCount) && (surfaceCapabilities.maxImageCount < minImageCount)) {
288+
minImageCount = surfaceCapabilities.maxImageCount;
289+
}
290+
return minImageCount;
291+
}
292+
284293
static vk::Format chooseSwapSurfaceFormat(const std::vector<vk::SurfaceFormatKHR>& availableFormats) {
285-
const auto formatIt = std::ranges::find_if(availableFormats,
286-
[](const auto& format) {
287-
return format.format == vk::Format::eB8G8R8A8Srgb &&
288-
format.colorSpace == vk::ColorSpaceKHR::eSrgbNonlinear;
289-
});
294+
assert(!availableFormats.empty());
295+
const auto formatIt = std::ranges::find_if(
296+
availableFormats,
297+
[]( const auto & format ) { return format.format == vk::Format::eB8G8R8A8Srgb && format.colorSpace == vk::ColorSpaceKHR::eSrgbNonlinear; } );
290298
return formatIt != availableFormats.end() ? formatIt->format : availableFormats[0].format;
291299
}
292300

293301
static vk::PresentModeKHR chooseSwapPresentMode(const std::vector<vk::PresentModeKHR>& availablePresentModes) {
302+
assert(std::ranges::any_of(availablePresentModes, [](auto presentMode){ return presentMode == vk::PresentMode::eFifo; }));
294303
return std::ranges::any_of(availablePresentModes,
295304
[](const vk::PresentModeKHR value) { return vk::PresentModeKHR::eMailbox == value; } ) ? vk::PresentModeKHR::eMailbox : vk::PresentModeKHR::eFifo;
296305
}
297306

298307
vk::Extent2D chooseSwapExtent(const vk::SurfaceCapabilitiesKHR& capabilities) {
299-
if (capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max()) {
308+
if (capabilities.currentExtent.width != 0xFFFFFFFF) {
300309
return capabilities.currentExtent;
301310
}
302311
int width, height;

0 commit comments

Comments
 (0)