diff --git a/_sources/generated.nix b/_sources/generated.nix index f71bde3..f5030fa 100644 --- a/_sources/generated.nix +++ b/_sources/generated.nix @@ -1,6 +1,7 @@ # This file was generated by nvfetcher, please do not modify it manually. -{ fetchgit, fetchurl, fetchFromGitHub, dockerTools }: { + fetchFromGitHub, +}: { fmt = { pname = "fmt"; version = "11.0.2"; diff --git a/flake.nix b/flake.nix index fc72d71..a27d398 100644 --- a/flake.nix +++ b/flake.nix @@ -112,6 +112,10 @@ VULKAN_SDK = "${vulkan-headers}"; VK_LAYER_PATH = "${vulkan-validation-layers}/share/vulkan/explicit_layer.d"; + VK_ICD_FILENAMES = + if stdenv.isDarwin + then "${darwin.moltenvk}/share/vulkan/icd.d/MoltenVK_icd.json" + else ""; shellHook = '' export PATH="${llvmPackages_18.clang-tools.override {enableLibcxx = true;}}/bin:$PATH" diff --git a/src/main.cpp b/src/main.cpp index 485a090..9dc1879 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -101,6 +101,7 @@ class VulkanApp { // Enable the portability extension and set flags extensions.push_back("VK_KHR_portability_enumeration"); + extensions.push_back("VK_KHR_get_physical_device_properties2"); vk::InstanceCreateInfo createInfo { .flags = vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR, @@ -145,7 +146,6 @@ class VulkanApp { fn createSurface() -> void { VkSurfaceKHR surface = nullptr; - // FIXME: This is failing on macOS for some reason VkResult result = glfwCreateWindowSurface(mInstance.get(), mWindow, nullptr, &surface); if (result != VK_SUCCESS) @@ -200,15 +200,19 @@ class VulkanApp { vk::PhysicalDeviceFeatures deviceFeatures; + // Add the portability subset extension + std::vector deviceExtensions = { "VK_KHR_portability_subset" }; + vk::DeviceCreateInfo createInfo { .queueCreateInfoCount = static_cast(queueCreateInfos.size()), .pQueueCreateInfos = queueCreateInfos.data(), - .enabledExtensionCount = 0, - .ppEnabledExtensionNames = nullptr, + .enabledExtensionCount = static_cast(deviceExtensions.size()), + .ppEnabledExtensionNames = deviceExtensions.data(), .pEnabledFeatures = &deviceFeatures }; mDevice = mPhysicalDevice.createDeviceUnique(createInfo); mGraphicsQueue = mDevice->getQueue(indices.graphics_family.value(), 0); + mPresentQueue = mDevice->getQueue(indices.present_family.value(), 0); } fn isDeviceSuitable(vk::PhysicalDevice device) -> bool { diff --git a/src/util/magic_enum.hpp b/src/util/magic_enum.hpp index c728df6..c76ecb9 100644 --- a/src/util/magic_enum.hpp +++ b/src/util/magic_enum.hpp @@ -752,26 +752,27 @@ namespace magic_enum { #define MAGIC_ENUM_FOR_EACH_256(T) \ T(0) \ T(1) \ - T(2) T(3) T(4) T(5) T(6) T(7) T(8) T(9) T(10) T(11) T(12) T(13) T(14) T(15) T(16) T(17) T(18) T(19) T(20) \ - T(21) T(22) T(23) T(24) T(25) T(26) T(27) T(28) T(29) T(30) T(31) T(32) T(33) T(34) T(35) T(36) T(37) \ - T(38) T(39) T(40) T(41) T(42) T(43) T(44) T(45) T(46) T(47) T(48) T(49) T(50) T(51) T(52) T(53) T(54) \ - T(55) T(56) T(57) T(58) T(59) T(60) T(61) T(62) T(63) T(64) T(65) T(66) T(67) T(68) T(69) T(70) \ - T(71) T(72) T(73) T(74) T(75) T(76) T(77) T(78) T(79) T(80) T(81) T(82) T(83) T(84) T(85) T(86) \ - T(87) T(88) T(89) T(90) T(91) T(92) T(93) T(94) T(95) T(96) T(97) T(98) T(99) T(100) T(101) \ - T(102) T(103) T(104) T(105) T(106) T(107) T(108) T(109) T(110) T(111) T(112) T(113) T(114) \ - T(115) T(116) T(117) T(118) T(119) T(120) T(121) T(122) T(123) T(124) T(125) T(126) T(127) \ - T(128) T(129) T(130) T(131) T(132) T(133) T(134) T(135) T(136) T(137) T(138) T(139) T(140) \ - T(141) T(142) T(143) T(144) T(145) T(146) T(147) T(148) T(149) T(150) T(151) T(152) \ - T(153) T(154) T(155) T(156) T(157) T(158) T(159) T(160) T(161) T(162) T(163) T(164) \ - T(165) T(166) T(167) T(168) T(169) T(170) T(171) T(172) T(173) T(174) T(175) T(176) \ - T(177) T(178) T(179) T(180) T(181) T(182) T(183) T(184) T(185) T(186) T(187) \ - T(188) T(189) T(190) T(191) T(192) T(193) T(194) T(195) T(196) T(197) T(198) \ - T(199) T(200) T(201) T(202) T(203) T(204) T(205) T(206) T(207) T(208) T(209) \ - T(210) T(211) T(212) T(213) T(214) T(215) T(216) T(217) T(218) T(219) T(220) \ - T(221) T(222) T(223) T(224) T(225) T(226) T(227) T(228) T(229) T(230) \ - T(231) T(232) T(233) T(234) T(235) T(236) T(237) T(238) T(239) T(240) \ - T(241) T(242) T(243) T(244) T(245) T(246) T(247) T(248) T(249) T(250) \ - T(251) T(252) T(253) T(254) T(255) + T(2) \ + T(3) T(4) T(5) T(6) T(7) T(8) T(9) T(10) T(11) T(12) T(13) T(14) T(15) T(16) T(17) T(18) T(19) T(20) T(21) \ + T(22) T(23) T(24) T(25) T(26) T(27) T(28) T(29) T(30) T(31) T(32) T(33) T(34) T(35) T(36) T(37) T(38) \ + T(39) T(40) T(41) T(42) T(43) T(44) T(45) T(46) T(47) T(48) T(49) T(50) T(51) T(52) T(53) T(54) T(55) \ + T(56) T(57) T(58) T(59) T(60) T(61) T(62) T(63) T(64) T(65) T(66) T(67) T(68) T(69) T(70) T(71) \ + T(72) T(73) T(74) T(75) T(76) T(77) T(78) T(79) T(80) T(81) T(82) T(83) T(84) T(85) T(86) T(87) \ + T(88) T(89) T(90) T(91) T(92) T(93) T(94) T(95) T(96) T(97) T(98) T(99) T(100) T(101) T(102) \ + T(103) T(104) T(105) T(106) T(107) T(108) T(109) T(110) T(111) T(112) T(113) T(114) T(115) \ + T(116) T(117) T(118) T(119) T(120) T(121) T(122) T(123) T(124) T(125) T(126) T(127) T(128) \ + T(129) T(130) T(131) T(132) T(133) T(134) T(135) T(136) T(137) T(138) T(139) T(140) T(141) \ + T(142) T(143) T(144) T(145) T(146) T(147) T(148) T(149) T(150) T(151) T(152) T(153) \ + T(154) T(155) T(156) T(157) T(158) T(159) T(160) T(161) T(162) T(163) T(164) T(165) \ + T(166) T(167) T(168) T(169) T(170) T(171) T(172) T(173) T(174) T(175) T(176) T(177) \ + T(178) T(179) T(180) T(181) T(182) T(183) T(184) T(185) T(186) T(187) T(188) \ + T(189) T(190) T(191) T(192) T(193) T(194) T(195) T(196) T(197) T(198) T(199) \ + T(200) T(201) T(202) T(203) T(204) T(205) T(206) T(207) T(208) T(209) T(210) \ + T(211) T(212) T(213) T(214) T(215) T(216) T(217) T(218) T(219) T(220) T(221) \ + T(222) T(223) T(224) T(225) T(226) T(227) T(228) T(229) T(230) T(231) \ + T(232) T(233) T(234) T(235) T(236) T(237) T(238) T(239) T(240) T(241) \ + T(242) T(243) T(244) T(245) T(246) T(247) T(248) T(249) T(250) T(251) \ + T(252) T(253) T(254) T(255) template constexpr void valid_count(bool* valid, std::size_t& count) noexcept {