diff --git a/flake.nix b/flake.nix index 8e2f259..5bdf3c5 100644 --- a/flake.nix +++ b/flake.nix @@ -35,8 +35,13 @@ cabal-install ]) ++ (with pkgs; [ shaderc + vulkan-loader + vulkan-validation-layers ]); - SDL_VULKAN_LIBRARY = "${pkgs.vulkan-loader}/lib/libvulkan.so"; + shellHook = '' + export VK_LAYER_PATH="${pkgs.vulkan-validation-layers}/share/vulkan/explicit_layer.d"; + export SDL_VULKAN_LIBRARY="${pkgs.vulkan-loader}/lib/libvulkan.so"; + ''; }; #devShell = pkgs.mkShell { # buildInputs = with haskellPackages; [ diff --git a/src/Init.hs b/src/Init.hs index b56edd0..a179fea 100644 --- a/src/Init.hs +++ b/src/Init.hs @@ -38,7 +38,7 @@ initEngine initEngine = do -- initialize SDL2 with all subsystems void $ allocate_ - (SDL.initialize [ SDL.InitVideo ]) + SDL.initializeAll (do putStrLn "This is the end!" SDL.quit diff --git a/src/Instance.hs b/src/Instance.hs index f1fe94b..8694c3c 100644 --- a/src/Instance.hs +++ b/src/Instance.hs @@ -10,67 +10,28 @@ import qualified Data.Vector as V import qualified SDL hiding (V2) import qualified SDL.Video.Vulkan as SDL import qualified Vulkan as Vk -import qualified Vulkan.Requirement as Vk import qualified Vulkan.Zero as Vk -import qualified Vulkan.Utils.Initialization as VkU createInstance :: MonadResource m => SDL.Window -> m Vk.Instance createInstance window = do - windowExtensions <- - (++) - -- [ Vk.KHR_PUSH_DESCRIPTOR_EXTENSION_NAME - -- , Vk.EXT_DEBUG_UTILS_EXTENSION_NAME - -- ] - [ Vk.EXT_DEBUG_UTILS_EXTENSION_NAME - ] - <$> - ((liftIO . mapM BS.packCString) =<< SDL.vkGetInstanceExtensions window) - -- liftIO $ do - -- putStrLn "activating followinfg extensions:" - -- print windowExtensions + windowExtensions <- liftIO $ fmap ( + [ Vk.EXT_DEBUG_UTILS_EXTENSION_NAME + ] ++) $ + traverse BS.packCString =<< SDL.vkGetInstanceExtensions window + liftIO $ do + putStrLn "activating following extensions:" + print windowExtensions let createInfo = Vk.zero { Vk.applicationInfo = Just Vk.zero { Vk.applicationName = Just "Haskell ❤️ Vulkan" - , Vk.apiVersion = Vk.API_VERSION_1_2 + , Vk.apiVersion = Vk.API_VERSION_1_3 } -- enable debug util extension for debugging purposes , Vk.enabledExtensionNames = V.fromList windowExtensions -- enable validation layer for debugging purposes - , Vk.enabledLayerNames = V.fromList - [ "VK_LAYER_KHRONOS_validation" - ] + , Vk.enabledLayerNames = V.singleton "VK_LAYER_KHRONOS_validation" } - requirements = - [ Vk.RequireInstanceExtension - { Vk.instanceExtensionLayerName = Nothing - , Vk.instanceExtensionName = Vk.KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME - , Vk.instanceExtensionMinVersion = Vk.KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION - } - , Vk.RequireInstanceExtension - { Vk.instanceExtensionLayerName = Nothing - , Vk.instanceExtensionName = Vk.KHR_XLIB_SURFACE_EXTENSION_NAME - , Vk.instanceExtensionMinVersion = Vk.KHR_XLIB_SURFACE_SPEC_VERSION - } - , Vk.RequireInstanceExtension - { Vk.instanceExtensionLayerName = Nothing - , Vk.instanceExtensionName = Vk.KHR_DISPLAY_EXTENSION_NAME - , Vk.instanceExtensionMinVersion = Vk.KHR_DISPLAY_SPEC_VERSION - } - , Vk.RequireInstanceExtension - { Vk.instanceExtensionLayerName = Nothing - , Vk.instanceExtensionName = Vk.KHR_SURFACE_EXTENSION_NAME - , Vk.instanceExtensionMinVersion = Vk.KHR_SURFACE_SPEC_VERSION - } - , Vk.RequireInstanceExtension - { Vk.instanceExtensionLayerName = Nothing - , Vk.instanceExtensionName = Vk.KHR_PUSH_DESCRIPTOR_EXTENSION_NAME - , Vk.instanceExtensionMinVersion = Vk.KHR_PUSH_DESCRIPTOR_SPEC_VERSION - } - ] - SDL.vkLoadLibrary Nothing - - -- VkU.createDebugInstanceFromRequirements requirements [] createInfo (_, inst) <- allocate (Vk.createInstance createInfo Nothing) (\inst -> do