Skip to content

Commit 1aab168

Browse files
authored
Add MoltenVK compat to vulkan example (#200)
1 parent 10cca44 commit 1aab168

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

dear-imgui.cabal

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ library
233233
other-modules:
234234
DearImGui.Vulkan.Types
235235
build-depends:
236-
vulkan
236+
vulkan >= 3.20
237237
, unliftio
238238
cxx-sources:
239239
imgui/backends/imgui_impl_vulkan.cpp
@@ -415,7 +415,7 @@ executable vulkan
415415
, vector
416416
>= 0.12.1.2 && < 0.14
417417
, vulkan
418-
>= 3.12
418+
>= 3.20
419419
, vulkan-utils
420420
>= 0.5
421421
, VulkanMemoryAllocator

examples/vulkan/Backend.hs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
{-# LANGUAGE MonoLocalBinds #-}
1010
{-# LANGUAGE NamedFieldPuns #-}
1111
{-# LANGUAGE OverloadedStrings #-}
12+
{-# LANGUAGE PatternSynonyms #-}
1213
{-# LANGUAGE RecordWildCards #-}
1314
{-# LANGUAGE ScopedTypeVariables #-}
1415
{-# LANGUAGE TypeApplications #-}
@@ -99,6 +100,7 @@ import qualified Data.Vector as Boxed.Vector
99100

100101
-- vulkan
101102
import qualified Vulkan
103+
import Vulkan.Core10.DeviceInitialization (pattern INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR)
102104
import qualified Vulkan.CStruct.Extends as Vulkan
103105
import qualified Vulkan.Requirement as Vulkan
104106
import qualified Vulkan.Zero as Vulkan
@@ -156,9 +158,10 @@ data InstanceType
156158

157159
data VulkanRequirements =
158160
VulkanRequirements
159-
{ instanceRequirements :: [ Vulkan.InstanceRequirement ]
160-
, deviceRequirements :: [ Vulkan.DeviceRequirement ]
161-
, queueFlags :: Vulkan.QueueFlags
161+
{ instanceRequirements :: [ Vulkan.InstanceRequirement ]
162+
, instanceRequirementsOpt :: [ Vulkan.InstanceRequirement ]
163+
, deviceRequirements :: [ Vulkan.DeviceRequirement ]
164+
, queueFlags :: Vulkan.QueueFlags
162165
}
163166

164167
data ValidationLayerName
@@ -167,12 +170,12 @@ data ValidationLayerName
167170
deriving stock ( Eq, Show )
168171

169172
initialiseVulkanContext :: MonadVulkan m => InstanceType -> ByteString -> VulkanRequirements -> m VulkanContext
170-
initialiseVulkanContext instanceType appName ( VulkanRequirements { instanceRequirements, deviceRequirements, queueFlags } ) = do
173+
initialiseVulkanContext instanceType appName ( VulkanRequirements { instanceRequirements, instanceRequirementsOpt, deviceRequirements, queueFlags } ) = do
171174
logDebug "Creating Vulkan instance"
172175
instanceInfo <- vulkanInstanceInfo appName
173176
instance' <- case instanceType of
174-
NormalInstance -> Vulkan.Utils.createInstanceFromRequirements instanceRequirements [] instanceInfo
175-
DebugInstance -> Vulkan.Utils.createDebugInstanceFromRequirements instanceRequirements [] instanceInfo
177+
NormalInstance -> Vulkan.Utils.createInstanceFromRequirements instanceRequirements instanceRequirementsOpt instanceInfo
178+
DebugInstance -> Vulkan.Utils.createDebugInstanceFromRequirements instanceRequirements instanceRequirementsOpt instanceInfo
176179
physicalDevice <- logDebug "Creating physical device" *> createPhysicalDevice instance'
177180
queueFamily <- logDebug "Finding suitable queue family" *> findQueueFamilyIndex physicalDevice queueFlags
178181
let
@@ -236,7 +239,7 @@ vulkanInstanceInfo appName = do
236239
createInfo =
237240
Vulkan.InstanceCreateInfo
238241
{ Vulkan.next = ()
239-
, Vulkan.flags = Vulkan.zero
242+
, Vulkan.flags = INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR
240243
, Vulkan.applicationInfo = Just appInfo
241244
, Vulkan.enabledLayerNames = Boxed.Vector.fromList enabledLayers
242245
, Vulkan.enabledExtensionNames = mempty

examples/vulkan/Main.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,14 @@ app = do
148148
, mouseMode = SDL.AbsoluteLocation
149149
}
150150
let
151+
compatExtensions =
152+
[ Vulkan.KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME
153+
]
151154
vulkanReqs :: VulkanRequirements
152155
vulkanReqs =
153156
VulkanRequirements
154157
{ instanceRequirements = instanceExtensions windowExtensions
158+
, instanceRequirementsOpt = instanceExtensions compatExtensions
155159
, deviceRequirements = []
156160
, queueFlags = Vulkan.QUEUE_GRAPHICS_BIT
157161
}

0 commit comments

Comments
 (0)