Vulkan-Hpp/snippets
Sharadh Rajaraman 6c1996f068
Add C++20 module interface file and tests (#1582)
* feat: exported vk::raii types in vulkan.ixx, with a small test

* feat: *almost* complete vulkan.ixx; missing functions in vulkan_funcs.hpp and constexpr auto defines

* Exported free functions in `vulkan_funcs.hpp` in `vulkan.ixx`

* Completed vulkan.ixx

Exported all types, structs, functions; need to handle anonymous namespace and getDispatchLoaderStatic()

* Moved `vk::anon-namespace::throwResultException` to `vk::detail::throwResultException` to solve linking errors

* Made `vk::getDispatchLoaderStatic` not `static`

`static`in namespace/global scope has to do with internal/external linkage, and not lifetime

* Fixed debug assert fail in `generateCppModuleStructUsings`

* Removed references to `.cppm`

* Formatting and versioning changes

- CMake version handling simplified
- vulkan.ixx includes new structs from new versions
- vulkan.hpp and vulkan_raii.hpp reformatted with clang-format 14

* Removed extraneous includes

- std::optional -> std::string::empty
- std::filesystem was unused

* Fixed constexpr function and value generation
- 'c' prefix removed
- Constants casing fixed
- Types for constants fixed
- Constants assigned to macros
- Ordering of constants and consteval functions fixed

* Moved constexprs to `vulkan.hpp`

- Added corresponding `using` statements to `vulkan.ixx`
- Changed `consteval auto(auto)` functions into templated SFINAE `constexpr` functions

* Formatting, signposting, misc fixes

- Added newlines around macro guards
- Added signposting comments for relevant groups of `using`-statements in `vulkan.ixx`
- Guarded createInstanceUnique with macro guard
- Use m_handles.at("").commands for Funcs

* Changed module file extension to `.cppm`

- It follows the rest of the project convention; `ixx` looks really weird next to `.hpp` and `.cpp`
- CMake transparently handles any extension anyway

* Added `VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE` to `vulkan.cppm`

* Added format traits and extension inspections

- Straightforward, since everything is hard-coded

* Added documentation about Vulkan-Hpp C++ module

- Compiler requirements
- CMake compilation
- Command-line examples

* Added vulkan_hash.hpp

- No need for `using`, since all declarations are template specialisations of existing `std` objects

* Documentation and comment fixes

- Removed extraneous CMake version comments
- Documentation about default dynamic dispatcher with the module
- Comment updates in the source code

* Moved constexpr defines and using statements 

- Moved to after resultUsings in both vulkan.hpp and vulkan.cppm
- Also split up constexprDefinesAndUsings
- Used const_cast for constexprDefines()

* Used std::string instead of std::stringstream

- Some changes also in previous commit
- Also removed overly-clever ranges algorithms

* Simplified protection generation

- Removed `generateNotProtection`
- Added optional `bool` parameter to `generateProtection` for `#if !defined( ... )`

* Simplified Cpp20Modules CMakeLists

- Made C++ standard and libraries into parameters
- Removed FindVulkan call; already done

* `constexpr` generation fixed

- Made all generating functions `const`
- Removed typos and extra comments
- Extracted out filtering functionality into separate functions

* Simplified defines partition generation

- Added `DefinesPartition` struct as a member variable
- Added non-const function to write to the above in `readTypeDefines`
- Removed previous implementation that made many copies

* Added `generateUsingsAndProtection` lambda to RAII name generation

* Moved around `partitionDefines` to make more sense

- called once at the end of the constructor
- edited comments

* Updated headers to 1.3.255

* Removed std::ranges and ranges view adaptors

- CI isn't passing with them

* Fixed constexpr functions for C++11 and C++14

- Removed `enable_if_t` and `is_integral_v` 
- Changed `auto` return type into `uint32_t`

---------

Co-authored-by: Sharadh Rajaraman <r.sharadh@yahoo.com.sg>
2023-06-28 14:10:51 +02:00
..
ArrayProxy.hpp Introduce helper class vk::StridedArrayProxy; use it on functions with parameters having the 'stride' attribute. 2022-09-12 16:53:44 +02:00
ArrayProxyNoTemporaries.hpp Extent support of functions returning some typed value 2022-11-14 10:06:49 +01:00
ArrayWrapper1D.hpp Refactor top-level function to generate vulkan.hpp 2022-08-01 16:40:15 +02:00
ArrayWrapper2D.hpp Refactor top-level function to generate vulkan.hpp 2022-08-01 16:40:15 +02:00
defines.hpp Fix defines in workflow files to enable compilation of tests and samples in CI. (#1595) 2023-06-20 14:43:35 +02:00
DispatchLoaderBase.hpp Refactor top-level function to generate vulkan.hpp 2022-08-01 16:40:15 +02:00
DispatchLoaderDefault.hpp Add C++20 module interface file and tests (#1582) 2023-06-28 14:10:51 +02:00
DynamicLoader.hpp Refactor top-level function to generate vulkan.hpp 2022-08-01 16:40:15 +02:00
Exceptions.hpp Refactor top-level function to generate vulkan.hpp 2022-08-01 16:40:15 +02:00
Flags.hpp Fix Flags<T>::operator~() 2022-11-07 11:28:15 +01:00
includes.hpp Adjust name of included vulkan header. (#1527) 2023-03-08 10:10:54 +01:00
ObjectDestroy.hpp Expose the dispatch member of deleters (#1569) 2023-05-03 12:03:28 +02:00
ObjectFree.hpp Expose the dispatch member of deleters (#1569) 2023-05-03 12:03:28 +02:00
ObjectRelease.hpp Expose the dispatch member of deleters (#1569) 2023-05-03 12:03:28 +02:00
Optional.hpp Refactor top-level function to generate vulkan.hpp 2022-08-01 16:40:15 +02:00
PoolFree.hpp Expose the dispatch member of deleters (#1569) 2023-05-03 12:03:28 +02:00
resultChecks.hpp Add C++20 module interface file and tests (#1582) 2023-06-28 14:10:51 +02:00
ResultValue.hpp Mark vk::ResultValue::asTuple() & as deprecated, introduce vk::ResultValue::asTuple() && (#1605) 2023-06-27 11:31:29 +02:00
StridedArrayProxy.hpp Introduce helper class vk::StridedArrayProxy; use it on functions with parameters having the 'stride' attribute. 2022-09-12 16:53:44 +02:00
StructureChain.hpp Add specializations of std::tuple_element and std::tuple_size for vk::StructureChain. (#1602) 2023-06-22 14:02:39 +02:00
UniqueHandle.hpp Refactor top-level function to generate vulkan.hpp 2022-08-01 16:40:15 +02:00