Commit Graph

178 Commits

Author SHA1 Message Date
Charles Giessen
3ebe53bdfe Add full_error() function to Result for easier printing of errors
Comment the various error functions in Result
2021-02-18 13:26:43 -07:00
Charles Giessen
4120362762 Use uint32_t in Queues everywhere, add QUEUE_INDEX_MAX_VALUE as sentinel
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.
2021-02-18 13:26:43 -07:00
Charles Giessen
daf244d180 Make SwapchainBuilder constructor take allocation callbacks from device 2021-02-18 13:26:43 -07:00
Charles Giessen
bfc0f06de0 Run clang format on src/VkBootstrap.h 2021-02-18 13:26:43 -07:00
Charles Giessen
bcc8e6f664 Add defaults in comments for SwapchainBuilder 2021-02-18 13:26:43 -07:00
Charles Giessen
c71a5b5fd8 Guard NOMINMAX
mingw64 defines it by default, this prevents multiple definition warnings/errors
2021-02-18 13:26:43 -07:00
Charles Giessen
c02642843c Fix crash due to vector initialization using wrong constructor
Because VkImageView is a uint64_t, not a strong type, the constructor
thinks the .size() is a value to initialize with, not a size.
2020-12-17 01:43:39 -07:00
Charles Giessen
af5409fcea Fix errors which caused win32 builds to fail
The debug_callback_messenger didn't use the VK_API macros and there
were a few places that compared VkHandles to nullptr which weren't liked.
2020-12-17 00:46:08 -07:00
Charles Giessen
325cdff399 Correct macOS surface extension.
The extension name is VK_EXT_metal_surface, not KHR
2020-11-20 16:33:22 -07:00
Charles Giessen
988c0ea4e4 Make swapchain builder find queues if none were provided 2020-10-26 13:17:52 -06:00
Charles Giessen
d314069e1a Fix linux surface extension bug, make destroy_debug_utils_messenger public
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.
2020-10-21 15:32:10 -06:00
Charles Giessen
6e50441f41 Re-added swapchain constructors from individual handles.
Allows people to use Swapchain Builder withtout holding onto the vkb::Device
handle. Also made patch levels optional since they generally don't matter.
2020-10-21 13:25:48 -06:00
Charles Giessen
6657593fa3 Fixed static initialization of VulkanFunctions 2020-09-26 12:15:40 -06:00
Charles Giessen
812ce2cf0a Dynamically load vulkan instead of statically link.
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.
2020-08-10 23:38:26 -06:00
Charles Giessen
511cac8db4 Fix license, add it to source, fix readme.
Delete .gitmodules, update readme to mention that enabling testing
automatically gets the dependencies, no more git submodules.
Add license to top of source files.
2020-06-10 13:39:14 -06:00
Charles Giessen
bbe3971a04 Document proper swapchain recreation practice
Make the example not leak the old swapchain handle upon recreation.
vkb::destroy_swapchain doesn't null out the old handle.
2020-06-08 17:03:36 -06:00
Charles Giessen
d169f3e32d Updated docs to include device and swapchain deletion.
Fix example triangle to properly exit if swapchain recreation fails.
2020-06-08 15:40:33 -06:00
Charles Giessen
8a053cadc3 Polished SwapchainBuilder. Redid swapchain recreation.
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.
2020-06-08 14:28:32 -06:00
Charles Giessen
e2c65e7ec1 Add some SwapchainBuilder options.
Now able to set the image usage flags, the array layer count, and whether
to clip the swapchain or not.
2020-05-26 13:33:40 -06:00
Charles Giessen
698be4e09b Fixed linux wsi extensions being added erroneously
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
2020-05-19 10:44:40 -06:00
Charles Giessen
3bbc4831f5 Updated docs for error_code usage
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.
2020-05-18 23:50:24 -06:00
Lesley Lai
df53490ede Error handling with std::error_code 2020-05-17 09:19:12 -06:00
Charles Giessen
c79482c0b1 Updated the default image formats for the swapchain
Used to use UNORM, now uses SRGB.
2020-05-09 17:22:45 -06:00
Charles Giessen
5e5b446d41 Renamed swapchain error for missing surface.
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.
2020-04-21 12:14:25 -06:00
Charles Giessen
d99c378eea Added new constructor to SwapchainBuilder
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
2020-04-19 17:59:32 -06:00
Charles Giessen
ace1ccf854 Explicit swapchain constructor no longer uses queue indexes
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)
2020-04-19 02:03:15 -06:00
Charles Giessen
959979b07a Fixed missing setup for deferred surface init
It needed to add the surface extension and not check for present
support.
2020-04-19 00:52:31 -06:00
Charles Giessen
1f462b42f3 Added many tests and fixed up api as a consequence
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
2020-04-18 21:24:59 -06:00
Lesley Lai
4483a5ee90 Migrate to Catch2 & CMake file structural change 2020-03-26 10:40:47 -06:00
Charles Giessen
a727a05635 Fixed EnumerateInstaceVersion using the wrong variable 2020-03-22 13:47:05 -06:00
Charles Giessen
c467c6c228 Fixed InstanceBuilder::request_validation_layers checking for extensions 2020-03-22 13:25:35 -06:00
Charles Giessen
b330527d65 Fixed default_debug_callback warning over unused formal paramter 2020-03-14 19:57:40 -06:00
Charles Giessen
505f9d91f9 Fixed msvc warnings 2020-03-11 21:26:41 -06:00
Charles Giessen
dde974d912 Fixed bugs in check_device_extension_support 2020-03-11 21:19:31 -06:00
Charles Giessen
bfcc4c6bfa Touched up many components due to integration experience 2020-03-09 22:15:08 -06:00
Charles Giessen
4c91df1c12 Added a desired_api_version to InstanceBuilder and cleaned up the triangle example error handling.
Fixed several bugs in the PhysicalDeviceSelector code, causing erroneous failures.
2020-03-09 15:17:18 -06:00
Charles Giessen
1160b19a5c Rename set_api_version to required_api_version and make the PhysicalDeviceSelector use the provided value as the required minimum for devices 2020-03-08 00:59:58 -07:00
Charles Giessen
bb312e8c92 InstanceBuilder now validates the apiVersion passed in and returns and error if the version is unsupported 2020-03-08 00:14:36 -07:00
Charles Giessen
40488fc7cd Added defer_surface_initialization which allows skipping checking if a device and surface work together 2020-03-07 23:26:46 -07:00
Charles Giessen
3097f46074 Enabled warnings and fixes the warnings gcc/clang showed. Formatted CMakeLists.txt 2020-03-07 22:58:23 -07:00
Charles Giessen
10d9c2ee1b Added const to builder functions and many other functions 2020-03-07 22:21:27 -07:00
Charles Giessen
5ae586b559 Created vk function pointer loading helper function 2020-03-07 21:57:49 -07:00
Charles Giessen
f389114811 Documented that features & extensions are propagated to DeviceBuilder 2020-03-07 17:36:55 -07:00
Charles Giessen
f74ee5e9fc Ammended readme and moved around code for better readability 2020-03-07 17:19:58 -07:00
Charles Giessen
1014c836cb Refactor of queue selection and getting 2020-03-07 17:02:01 -07:00
Charles Giessen
83fd58348b Rename distinct queue functions and variables to seperate 2020-03-07 16:02:18 -07:00
Charles Giessen
6043129631 Renamed allow_fallback_gpu_type to allow_any_type and refactored implementation to be simpler 2020-03-07 15:48:52 -07:00
Charles Giessen
8a18c5a7ba Added allocation callbacks 2020-03-07 15:33:17 -07:00
Charles Giessen
d29d8d0daf Fixed several bugs in SystemInfo constructor 2020-03-07 15:08:00 -07:00
Charles Giessen
d58b099da8 Removed check_and_add functions for instance layers and extensions 2020-03-07 02:53:54 -07:00
Charles Giessen
9561e30373 added to_string helper functions for the error enums 2020-03-07 02:41:52 -07:00
Charles Giessen
0ed5ac8435 Replaced C style cast with reinterpret_cast 2020-03-07 02:14:59 -07:00
Charles Giessen
b183c05f45 Updated to_string_message_type to handle more than one category 2020-03-07 02:11:32 -07:00
Charles Giessen
e33cc3479b Change function allow_fallback_gpu to allow_fallback_gpu_type 2020-03-07 02:06:11 -07:00
Charles Giessen
a4ab8e099d Renamed many InstanceBuilder functions, added SystemInfo struct.
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.
2020-03-07 01:46:25 -07:00
Charles Giessen
6933882f63 Got vk-bootstrap compiling on Windows and fixed class/struct inconsistency 2020-02-27 20:58:38 -07:00
Charles Giessen
6f0184bdbe Made compute and transfer queues have distinct and dedicated options. This means you can choose between
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.
2020-02-18 19:45:22 -07:00
Charles Giessen
37656d311a Added documentation to InstanBuilder and PhysicalDevice Selector
Updated readme's example code and included better build instructions
2020-02-18 19:17:08 -07:00
Charles Giessen
7de79b81b1 Implemented missing instance functions, deleted surface in tests. 2020-02-18 17:21:22 -07:00
Charles Giessen
b171ced11e Fixed pNext chain setup function and added validation flags/enables to run_tests 2020-02-17 14:09:40 -07:00
Charles Giessen
38076c4f53 Made transfer & compute queues not be requested by default 2020-02-17 13:31:06 -07:00
Charles Giessen
bb4a752d2d Fixed CustomQueueDescription lacking a constructor 2020-02-17 13:29:22 -07:00
Charles Giessen
4a4078d276 Fixed lack of nullptr check for app and engine name in InstanceBuilder 2020-02-17 13:22:49 -07:00
Charles Giessen
14541f447c removed dependency on std::min & std::max 2020-02-17 13:22:31 -07:00
Charles Giessen
83d58fc6d4 Fixed example in readme, made transfer/compute queue selection find a distinct queue,
removed uncessary private members in vkb::Instance, and removed superfluous comment headers
2020-02-17 13:13:09 -07:00
Charles Giessen
cf8411ae78 Replaced std::string with const char *
Now checks extensions being valid on the instance.
2020-02-11 17:51:03 -07:00
Charles Giessen
2b711f30d5 Finished basic rewrite of queue handling logic
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.
2020-02-10 18:01:58 -07:00
Charles Giessen
3e7e283e3f Revised error handling to be sensible and consistent.
While more error values need to be fleshed out (one for every possible vulkan error)
it has all of the major issues handled.
2020-02-10 11:29:09 -07:00
Charles Giessen
5375504bb3 WIP queue rewrite 2020-02-07 17:34:05 -07:00
Charles Giessen
4a464a61aa Made it possible to specify the desired queue priorities.
If none are provided, it will use 1.0f for everything.
2020-02-06 16:56:50 -07:00
Charles Giessen
8b33c46bf9 Moved some functions to .cpp, modified preferred physical device.
Also adjusted the .clang-format for better legibility of code
2020-02-06 15:46:14 -07:00
Charles Giessen
c30782a106 Removed allocators and added new swapchainbuilder constructor
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
2020-02-06 14:20:39 -07:00
Charles Giessen
4851a5bec9 Fixed issue with queue priorities
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
2020-02-04 10:26:46 -07:00
Charles Giessen
8734ed18e0 moved triangle.cpp to its own folder, updated readme & license 2020-02-03 20:34:46 -07:00
Charles Giessen
39a3c37465 Fixed up swapchain, added an example based on vulkan-tutorial
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.
2020-02-03 16:23:47 -07:00
Charles Giessen
37bc741658 Moved all source code into 2 files
This will make it easier to include in other projects.

Revamped how pNext chains work to no longer cause crashes.
2020-01-31 15:23:22 -07:00
Charles Giessen
155677ec0f Added glfw as git submodule + Catch2
Made the physical device, device, and swapchain builders take the required
parameters as constructor arugments.

Made tests optional using a cmake bool
2020-01-30 01:47:41 -07:00
Charles Giessen
d9ca075c86 First commit of Vk-Bootstrap
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
2020-01-30 01:20:18 -07:00