Commit Graph

283 Commits

Author SHA1 Message Date
Charles Giessen
6150e408ee Add SwapchainManager library
This library is a utility which tracks all the required details so that applications
can have a simplified interface to the swapchain.

* Creation - Pass a SwapchainBuilder to specify how the swapchain should be created.
* Recreation - Recreates the swapchain upon request.
* Semaphores - Handles creation and usage of them, a particularly thorny part of swapchain management.

Additional Libraries:
 - DelayedDeletionQueue; for easy deletion of objects currently in flight
 - ImagelessFramebufferBuilder; for easy creation of imageless framebuffers

The new code lives in VkSwapchainManager.h, so its easier to distinguish the core parts of vk-bootstrap
from the optional.
2022-10-08 18:38:54 -06:00
Charles Giessen
01de71738c Pass Image Usage flags into Swapchain
This allows the image views to be created with the same usage flags as
the swapchain. This necessitated passing in version information down
the object creation chain because to add the usage flags requires 1.1
to be enabled.
2022-10-08 13:12:02 -06:00
Charles Giessen
14e5a557f7 Format error to_string functions
Use CASE_TO_STRING macro to make the to_string functions simpler.
2022-10-08 13:12:02 -06:00
Charles Giessen
ab52ad97a8 Move Result & Error out of the detail namespace
Since its a part of the public interface, it means applications using vk-bootstrap
will inevitably need to use the types in error handling paths.
2022-10-08 13:12:02 -06:00
charles-lunarg
789a24edb7 Update to latest Vulkan-Headers 2022-10-04 21:19:32 -06:00
charles-lunarg
5b15f6e881 Update to latest Vulkan-Headers 2022-09-15 11:48:34 -06:00
Charles Giessen
4ae9513ff9 Dont enable tests if building standalone
Previously, tests would always be enabled if the repo was the top
level project, which isn't desireable for users. This alters the logic
to, by default, only enabling tests when its a top level project, but
still allowing users to *not* enable tests by setting VK_BOOTSTRAP_TEST
to off.
2022-08-30 10:42:35 -06:00
charles-lunarg
be26f7d464 Update to latest Vulkan-Headers 2022-08-30 10:19:25 -06:00
David Dubois
1fea63645a Properly handle forward-declared structs 2022-08-28 12:13:08 -06:00
Matthew Pohlmann
00cf404e7b Fix typo 2022-07-28 13:48:15 -06:00
Matthew Pohlmann
8d9aea9987 Swapchain stores the VkColorSpaceKHR actually used when creating swapchains so users can query the final value 2022-07-28 13:48:15 -06:00
charles-lunarg
f8573e117c Update to latest Vulkan-Headers 2022-07-28 13:47:43 -06:00
charles-lunarg
3b29e6423f Update to latest Vulkan-Headers 2022-07-21 14:00:38 -06:00
Charles Giessen
aeed599098 Fix desired extensions not being enabled
Regression caused desired extensions to not be added to the device create info structure,
resulting in desired extensions not being enabled.
2022-07-16 11:49:26 -06:00
charles-lunarg
d4dba53119 Update to latest Vulkan-Headers 2022-07-11 19:04:01 -06:00
Matthew Pohlmann
80396093b4 Remove unnecessary explicit check for the partition index being physical_devices.end() 2022-07-07 22:10:26 -06:00
Matthew Pohlmann
97734970f0 Fix removal of unsuitable devices when using only_fully_suitable selection 2022-07-07 22:10:26 -06:00
charles-lunarg
e78a1822c1 Update to latest Vulkan-Headers 2022-07-05 11:19:16 -06:00
charles-lunarg
bf1f48dc04 Update to latest Vulkan-Headers 2022-06-21 12:38:36 -06:00
Yoan Lecoq
8251bdbeee Apply suggested changes for PR #138 2022-06-21 12:38:26 -06:00
Yoan Lecoq
31408e0b9e Add SwapchainBuilder::set_required_min_image_count(), following suggestions from PR #138 2022-06-21 12:38:26 -06:00
Yoan Lecoq
78ee4e67cd SwapchainBuilder: Remove use_default_min_image_count(), introduce BufferMode enum 2022-06-21 12:38:26 -06:00
Yoan
f528fe33d6 SwapchainBuilder::use_default_min_image_count(): fix default parameter specified in function definition 2022-06-21 12:38:26 -06:00
Yoan Lecoq
5ac2b21dfe SwapchainBuilder: provide some control over minImageCount 2022-06-21 12:38:26 -06:00
Charles Giessen
f847ab8566 Add exclusion list for alias in generator code
Some alias types are not pure promotional types, and need to be excluded from the
code which replaces types with their alias.

This may be a stopgap solution for a larger underlying problem of not being able to
determine if an alias is promoted or not.
2022-06-20 12:11:46 -06:00
charles-lunarg
fc880eb598 Update to latest Vulkan-Headers 2022-06-20 07:59:48 -06:00
Aelarion
b01b2b1d8e Fix #129 with correct desired_flags test 2022-06-09 12:48:48 -06:00
charles-lunarg
bbf4e9a4f5 Update to latest Vulkan-Headers 2022-06-06 21:38:15 -06:00
charles-lunarg
33b230a784 Update to latest Vulkan-Headers 2022-05-25 10:28:11 -06:00
Yoan Lecoq
74cac40817 SwapchainBuilder: expose present_mode and requested_min_image_count in the resulting Swapchain 2022-05-17 10:34:01 -05:00
charles-lunarg
8f39b12431 Update to latest Vulkan-Headers 2022-05-17 10:32:56 -05:00
Nicholaus Clark
2912c74ebf Address review comments 2022-05-05 21:09:33 -06:00
Nicholaus Clark
adee12a0d9 Fix best practices warning when in VK 1.1 or higher 2022-05-05 21:09:33 -06:00
spnda
bf4e2f073b Fix: portability_enumeration flag was not available before 1.3.208 2022-05-02 12:08:56 -06:00
charles-lunarg
fafc735714 Update to latest Vulkan-Headers 2022-04-25 18:57:49 -06:00
Charles Giessen
c543dc104b Support VK_KHR_portability_enumeration
Also cleanup some warnings in the tests.
2022-04-25 18:34:44 -06:00
charles-lunarg
3480e74bf0 Update to latest Vulkan-Headers 2022-04-11 18:58:44 -06:00
charles-lunarg
908cf98920 Update to latest Vulkan-Headers 2022-04-04 19:08:32 -06:00
charles-lunarg
62c075c16b Update to latest Vulkan-Headers 2022-03-23 14:27:31 -06:00
Charles Giessen
2ca3a7b03b Fix autorun code-gen script 2022-03-23 14:26:53 -06:00
Charles Giessen
25eff41755 Fix autorun code-gen script 2022-03-23 12:21:17 -06:00
Nicholaus Clark
4a2984ad68 Added pNext chain support for swapchain::get_image_views 2022-03-19 12:24:57 -06:00
Charles Giessen
65071da181 Enable VK_KHR_portability_subset if available
Makes it easy to use vulkan on macOS since vk-bootstrap will auto-enable it if
the extension is available.

This can be disabled by calling `disable_portability_subset`.
2022-03-01 21:17:10 -07:00
Charles Giessen
d3170c0657 Refactor physical device extension code to use std::string
Makes it harder for lifetime issues to appear since the extension strings are
owned by the PhysicalDevice class rather than assuming they are correct.
2022-03-01 21:17:10 -07:00
Charles Giessen
5f45b1019a Allow apps to query devices based on the name
This lets applications see all the devices which meet a set of requirements
then pick whichever of these devices is most appropriate for them. The intent
is for applications that want to find all the suitable devices and let the
user of the application pick the physical device from a list.
2022-03-01 21:17:10 -07:00
Danderaion
f4d3f916f1 Fix desire_api_version broken by previous commit 2022-02-27 13:46:15 -07:00
Danderaion
f6c262c3ab Add set_minimum_instance_version
Also deprecates InstanceBuilder::desire_api_version
and PhysicalDeviceSelector::set_desired_version
2022-02-27 13:46:15 -07:00
Danderaion
b7c2ddd8e5 Forward required/desired API versions to PhysicalDeviceBuilder
Desired version is called max_api_version, since valid Vulkan
program is not allowed to use features from any higher version.
2022-02-27 13:46:15 -07:00
Danderaion
0fa1dd8e20 Allow desiring higher api versions
Allows applications to desire_api_version that is
higher than available instance version.
2022-02-27 13:46:15 -07:00
forenoonwatch
b1b121efe0 Fix version macro not selecting VK_MAKE_VERSION
The version macro selector was looking for the constant VK_API_VERSION instead of the correct macro VK_MAKE_VERSION. Replaced the preprocessors accordingly.
2022-02-19 11:06:47 -07:00