Users can now ask for physical devices which support a specific 1.1 and 1.2
feature. VkBootstrap will then add the selected features to the enable list
in device creation.
This commit removes the many casts from int to uint and back, as -1 was used
as a sentinel value. Because thats confusing and leads to many casts
everywhere it was decided to add a sentinel value and compare everything
to that to determine if a queue index is valid or not.
Making the destroy_messenger public allows code to store the handle directly and
delete it themselves instead of having to hold onto a vkb::Instance, which requires
including the header.
Allows people to use Swapchain Builder withtout holding onto the vkb::Device
handle. Also made patch levels optional since they generally don't matter.
Make vk-bootstrap capable of loading the vulkan runtime and not need to
link against the library. This improves the usability of vk-bootstrap since
now you don't need the vulkan library on your system to build.
This commit also changes how SystemInfo works so as to allow the dynamic
vulkan loading.
Delete .gitmodules, update readme to mention that enabling testing
automatically gets the dependencies, no more git submodules.
Add license to top of source files.
To recreate a swapchain now requires making a new SwapchainBuilder or
keeping the old one around. Removed the recreate function since its
purpose was unclear. Introduced set_old_swapchain to allow recyling the
old swapchain. Updated documentation and getting started guide.
Previously, on linux all three windowing extensions would be added
(xcb, xlib, wayland) even if they weren't available.
Now, InstanceBuilder first makes sure they are present before
adding them.
Also added a new error code to represent the lack of wsi extensions
Updated the documentation for using the new <error_code> based errors.
Also fixed an issue where SystemInfo wouldn't check if layers had a
debug_utils extension.
Now its 'surface_handle_not_provided' instead of not_present.
More clear because you have to manually provide a surface handle, its
not implicitely created for you.
It is now possible to pass in a vkb::Device and a VkSurfaceKHR handle
into the swapchain builder, and it will correctly get the queue indexes
necessary to create a swapchain. This solved the 'delayed surface
initialization' problem
The second constructor for vkb::Swapchain now queries for the index of the
graphics and present queue by itself. This removes the need to users to
manually specify it and limits the strict dependency between swapchain
and the rest of the vkb structs (Instance & Device mainly)
Added device::get_queue_families() to facilitate custom queue setups
get_swapchain_images() renamed to get_image(), made member function to
swapchain.
get_swapchain_image_views() renamed to get_image_views(), also moved to
member function of swapchain
fixed bug with headless instance not being correct
Stopped Catch2 from polluting the buildable targets
SystemInfo will be the way for users to know what is and isn't available on their system.
Currently, it only has booleans for if validation layers and debug messenger are available,
but more could be added in the future.
whether you select a compute/transfer queue that can alias and one that cannot.
It is due to some hardware having dedicated compute or dedicated transfer but not both.
Also added some todo's for what to test.
Premise is to let the easy creation of a compute or transfer queue.
If the user supplies a custom list they want to use, defer to that.
Else, enable the basic requirements and be on your merry way.
Allocators only complicated the interface and likely aren't needed. They
are useful on other function calls, but none of the ones here mattered.
A constructor was added to swapchain that has all the handles it needs.
This way users don't have to pass in the vkb::Device struct to use the
swapchain builder
Before it only had 1 priority even if there were multiple queues.
Now it creates a vector of priorities so it shouldn't cause issues.
It also means logic to setup actual priority values can be put in place
in the future
Now there is a concise example of the library in use all the way to presenting.
Needs to be rewritten to remove exceptions, but for first pass its good enough.
Library contains barebones implementations for simplified
Instance creation
Physical Device selection
Device creation
Swapchain Creation/Recreation
Much of the repo is WIP, and there is little to no testing.
Also, while a single header file is desired for the future, currently
it is structured more like a normal project with .cpp files