base_widget.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #ifndef VKW_BASE_WIDGET_H
  2. #define VKW_BASE_WIDGET_H
  3. #include <set>
  4. #include <string>
  5. #include <vector>
  6. #include <algorithm>
  7. #include "vulkan_include.h"
  8. namespace vkw
  9. {
  10. class BaseWidget
  11. {
  12. public:
  13. /**
  14. * @brief getSupportedExtensions
  15. * @return
  16. *
  17. * Return a set of all the extensions currently supported
  18. * but your vulkan library.
  19. */
  20. static std::set<std::string> getSupportedInstanceExtensions()
  21. {
  22. uint32_t count;
  23. vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr); //get number of extensions
  24. std::vector<VkExtensionProperties> extensions(count);
  25. vkEnumerateInstanceExtensionProperties(nullptr, &count, extensions.data()); //populate buffer
  26. std::set<std::string> results;
  27. for (auto & extension : extensions) {
  28. results.insert(extension.extensionName);
  29. }
  30. return results;
  31. }
  32. static std::set<std::string> getSupportedLayers()
  33. {
  34. uint32_t count;
  35. vkEnumerateInstanceLayerProperties(&count, nullptr); //get number of extensions
  36. std::vector<VkLayerProperties> extensions(count);
  37. vkEnumerateInstanceLayerProperties(&count, extensions.data()); //populate buffer
  38. std::set<std::string> results;
  39. for (auto & extension : extensions) {
  40. results.insert(extension.layerName);
  41. }
  42. return results;
  43. }
  44. static std::set<std::string> getSupportedDeviceExtensions(VkPhysicalDevice physicalDevice)
  45. {
  46. uint32_t count;
  47. vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &count, nullptr);
  48. std::vector<VkExtensionProperties> extensions(count);
  49. vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &count, extensions.data()); //populate buffer
  50. std::set<std::string> results;
  51. for (auto & extension : extensions) {
  52. results.insert(extension.extensionName);
  53. }
  54. return results;
  55. };
  56. static std::set<std::string> getSupportedDeviceExtensions(VkPhysicalDevice physicalDevice, char const* layer)
  57. {
  58. uint32_t count;
  59. vkEnumerateDeviceExtensionProperties(physicalDevice, layer, &count, nullptr);
  60. //vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr); //get number of extensions
  61. std::vector<VkExtensionProperties> extensions(count);
  62. vkEnumerateDeviceExtensionProperties(physicalDevice, layer, &count, extensions.data()); //populate buffer
  63. std::set<std::string> results;
  64. for (auto & extension : extensions) {
  65. results.insert(extension.extensionName);
  66. }
  67. return results;
  68. };
  69. template<typename T>
  70. static void vectorAppend( std::vector<T> & A, std::vector<T> const &B )
  71. {
  72. A.insert(A.end(), B.begin(), B.end());
  73. }
  74. template<typename T>
  75. static void vectorUnique( std::vector<T> & A)
  76. {
  77. std::sort(A.begin(), A.end());
  78. A.erase(std::unique( A.begin(), A.end()), A.end());
  79. }
  80. };
  81. }
  82. #endif