#~2      !"#$%&'()*+,-./01None("#%&'-./145689;=>?FHIMPSUVX_dghklmq o vulkan-utilsA debug callback the same as  except it will call abort when -VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT is set. vulkan-utilsRA debug callback which prints the message prefixed with "Validation: " to stderr. vulkan-utils Assign a name to a handle using 2, note that the VK_EXT_debug_utils extension must be enabled.None)"#%&'-./145689;=>?FHIMPSUVX_dghklmq  vulkan-utils%Convert an OpenGL format enum into a 3internalFormat 0x8051Just FORMAT_R8G8B8_UNORMNone("#%&'-./145689;=>?FHIMPSUVX_dghklmq vulkan-utils]From a list of things, take all the required things and as many optional things as possible. vulkan-utilsLike .lWill throw an 'IOError in the case of missing things. Details on missing things will be reported in stderr.5This is useful in dealing with layers and extensions. vulkan-utils/Show valies as a union of their individual bitsshowBits @Int 5 "1 .|. 4"showBits @Int 0 "zeroBits"(import Vulkan.Core10.Enums.QueueFlagBits3showBits (QUEUE_COMPUTE_BIT .|. QUEUE_GRAPHICS_BIT)*"QUEUE_GRAPHICS_BIT .|. QUEUE_COMPUTE_BIT" vulkan-utils-Check if the intersection of bits is non-zero vulkan-utilsWhat do we have available vulkan-utilsOptional desired elements vulkan-utilsRequired desired elements vulkan-utils(Missing optional elements, Either (missing required elements) or (all required elements and as many optional elements as possible) vulkan-utils.What are we sorting (Used for a debug message) vulkan-utilsWhat do we have available vulkan-utilsOptional desired elements vulkan-utilsRequired desired elements vulkan-utilsCAll the required elements and as many optional elements as possibleNone) "#%&'-./145689;=>?FHIMPSUVX_dghklmq= vulkan-utilsLike  : except it will create a debug utils messenger (from the VK_EXT_debug_utils extension).If the VK_EXT_validation_features extension (from the VK_LAYER_KHRONOS_validationP layer) is available is it will be enabled and best practices messages enabled.  vulkan-utils Create an 4[ with some layers and extensions, the layers and extensions will be added to the provided 5.Will throw an 'IOError in the case of missing layers or extensions. Details on missing layers and extensions will be reported in stderr.  vulkan-utils Get a single 6! deciding with a scoring functionPass a function which will extract any required values from a device in the spirit of parse-don't validate. Also provide a function to compare these results for sorting multiple devices.For example the result function could return a tuple of device memory and the compute queue family index, and the scoring function could be 73 to select devices based on their memory capacity.*If no devices are deemed suitable then an 8 is thrown.  vulkan-utilsExtract the name of a 6 with 9  vulkan-utils Create a :E with some extensions, the extensions will be added to the provided ;.gWill throw an 'IOError in the case of missing extensions. Missing extensions will be listed on stderr. vulkan-utilsRequired layers vulkan-utilsOptional layers vulkan-utilsRequired extensions vulkan-utilsOptional extensions  vulkan-utilsRequired layers vulkan-utilsOptional layers vulkan-utilsRequired extensions vulkan-utilsOptional extensions  vulkan-utilsDSome result for a PhysicalDevice, Nothing if it is not to be chosen. vulkan-utils$Scoring function to rate this result vulkan-utilsThe score and the device  vulkan-utilsRequired extensions vulkan-utilsOptional extensions  None("#%&'-./145689;=>?FHIMPSUVX_dghklmqcs vulkan-utilsRequirements for a < to be assigned a family by .+To assign to a specific queue family index f: )queueSpecFamilyPredicate = i _ -> i == f @To assign to any queue family which supports compute operations: wlet isComputeQueue q = QUEUE_COMPUTE_BIT .&&. queueFlags q in QueueSpec priority (_index q -> pure (isComputeQueue q))  vulkan-utilsGiven a 6 and a set of requirements for queues, calculate an assignment of queues to queue families and return information with which to create a :. and also a function to extract the requested <s from the device.,You may want to create a custom type with a =% instance to store your queues like: data MyQueues a = MyQueues { computeQueue :: a , graphicsAndPresentQueue :: a , transferQueue :: a } myQueueSpecs :: MyQueues QueueSpec myQueueSpecs = MyQueues { computeQueue = QueueSpec 0.5 isComputeQueueFamily , graphicsAndPresentQueue = QueueSpec 1 isPresentQueueFamily , transferQueue = QueueSpec 1 isTransferOnlyQueueFamily } rNote, this doesn't permit differentiating queue family assignment based on whether or not the queue is protected. vulkan-utilsDoes this queue have > set and not ? or @ vulkan-utils<Can this queue family present to this surface on this deviceA vulkan-utils6Find all possible valid assignments for elements of a = with some limited resources.assign @[] @_ @() [("a", 1)] [][[]]Iassign @[] [("hi", 1), ("foo", 3)] [Just, Just . reverse, Just . take 1 ]G[["hi","oof","f"],["foo","ih","f"],["foo","oof","h"],["foo","oof","f"]]assign @[] [("a", 1), ("b", 2)] [\case {"a" -> Just 1; "b" -> Just 2; _ -> Nothing}, \case {"b" -> Just 3; _ -> Nothing}, \case {"a" -> Just 4; _ -> Nothing}] [[2,3,4]]B vulkan-utilsvSelect an element from the list according to some predicate, and return that element along with the decremented list. vulkan-utilsA set of requirements for <s to be created vulkan-utils A set of C s to pass to D$A function to extract the requested < s from the : created with the CsE* if it wasn't possible to satisfy all the sA vulkan-utilsHow many of each F are available vulkan-utilsWhich Fs can each element use vulkan-utilsYA list of assignments, each element in this list has the length of the requirements list  None+"#%&'-./145689;=>?FHIMPSUVX_dghklmqwQ% vulkan-utils%< performs very simple interpolation of Haskell values into Gs.)Interpolated variables are prefixed with $3They can optionally be surrounded with braces like ${foo}5Interpolated variables are converted to strings with H To escape a $ use \$+let foo = 123 in $(interpExp "hello, $foo") "hello, 123"1let foo = "world" in $(interpExp "hello, \\$foo") "hello, $foo"4let foo = "world" in $(interpExp "hello\r\n\rworld")"hello\r\n\rworld"I vulkan-utils=Extract variables and literals from string to be interpolatedparse ""[]parse "hello $world"[Right "hello ",Left "world"]parse "$hello$world"eft "hello",Left "world"] parse "$" [Right "$"] parse "hi" [Right "hi"] parse "h$hi"[Right "h",Left "hi"] parse "$$hi"[Right "$",Left "hi"] parse "$1" [Right "$1"] parse "$$$" [Right "$$$"] parse "\\" [Right "\\"] parse "\\$" [Right "$"] parse "\\$hi" [Right "$hi"]parse "\\\\$hi"[Right "\\$hi"] parse "\\hi"[Right "\\hi"]parse "$hi\\$foo"[Left "hi",Right "$foo"]parse "hello, \\$foo"[Right "hello, $foo"]parse "${fo'o}bar"[Left "fo'o",Right "bar"] parse "\\" [Right "\\"] parse "\\\\$" [Right "\\$"] parse "$" [Right "$"]%%None("#%&'-./145689;=>?FHIMPSUVX_dghklmq ( vulkan-utils(7 is a QuasiQuoter which produces GLSL source code with #line directives inserted so that error locations point to the correct location in the Haskell source file. It also permits basic string interpolation.)Interpolated variables are prefixed with $3They can optionally be surrounded with braces like ${foo}5Interpolated variables are converted to strings with H To escape a $ use \$*It is intended to be used in concert with / like so myConstant = 3.141 -- Note that this will have to be in a different module myFragmentShader = $(compileShaderQ "frag" [glsl| #version 450 const float myConstant = ${myConstant}; main (){ } |]) An explicit example ( interactive is from doctest):5let version = 450 :: Int in [glsl|#version $version|]d"#version 450\n#extension GL_GOOGLE_cpp_style_line_directive : enable\n#line 32 \"<interactive>\"\n"`Note that line number will be thrown off if any of the interpolated variables contain newlines.) vulkan-utils*QuasiQuoter for creating a compute shader.Equivalent to calling $$(compileShaderQ "comp" [glsl|...|]) without interpolation support.* vulkan-utils+QuasiQuoter for creating a fragment shader.Equivalent to calling $$(compileShaderQ "frag" [glsl|...|]) without interpolation support.+ vulkan-utils+QuasiQuoter for creating a geometry shader.Equivalent to calling $$(compileShaderQ "geom" [glsl|...|]) without interpolation support., vulkan-utils7QuasiQuoter for creating a tessellation control shader.Equivalent to calling $$(compileShaderQ "tesc" [glsl|...|]) without interpolation support.- vulkan-utils:QuasiQuoter for creating a tessellation evaluation shader.Equivalent to calling $$(compileShaderQ "tese" [glsl|...|]) without interpolation support.. vulkan-utils)QuasiQuoter for creating a vertex shader.Equivalent to calling $$(compileShaderQ "vert" [glsl|...|]) without interpolation support./ vulkan-utils7Compile a glsl shader to spir-v using glslangValidator.RMessages are converted to GHC warnings or errors depending on compilation success.0 vulkan-utils6Compile a glsl shader to spir-v using glslangValidator/ vulkan-utilsstage vulkan-utils glsl code vulkan-utilsSpir-V bytecode0 vulkan-utilsSource location vulkan-utilsstage vulkan-utils glsl code vulkan-utils'Spir-V bytecode with warnings or errors &'()*+,-./01 ()*+,-.'&/01J      !"#$%&'()*+,-./01234567897:;7<=7>?7<@ABCADE7>F7<G7HI7<JAKL7MN7MO7MPQR7HS7HTAUV7WXAYZA[\]^'vulkan-utils-0.2-5U0DuVSfzKaAnKoiS7oHkmVulkan.Utils.DebugVulkan.Utils.FromGLVulkan.Utils.MiscVulkan.Utils.InitializationVulkan.Utils.QueueAssignment!Vulkan.Utils.ShaderQQ.InterpolateVulkan.Utils.ShaderQQdebugCallbackFatalPtrdebugCallbackPtr nameObjectinternalFormatpartitionOptReqpartitionOptReqIOshowBits.&&.!createDebugInstanceWithExtensionscreateInstanceWithExtensionspickPhysicalDevicephysicalDeviceNamecreateDeviceWithExtensions QueueIndex$sel:unQueueIndex:QueueIndexQueueFamilyIndex($sel:unQueueFamilyIndex:QueueFamilyIndex QueueSpec%$sel:queueSpecQueuePriority:QueueSpec'$sel:queueSpecFamilyPredicate:QueueSpec assignQueuesisComputeQueueFamilyisGraphicsQueueFamilyisTransferQueueFamilyisTransferOnlyQueueFamilyisPresentQueue$fEqQueueFamilyIndex$fOrdQueueFamilyIndex$fEnumQueueFamilyIndex$fShowQueueFamilyIndex$fEqQueueIndex$fOrdQueueIndex$fEnumQueueIndex$fShowQueueIndex interpExp GLSLWarning GLSLErrorglslcompfraggeomtesctesevertcompileShaderQ compileShaderprocessValidatorMessages$vulkan-3.6.14-DEHCEhnpX0s28w6HS0MKxh$Vulkan.Extensions.VK_EXT_debug_utilssetDebugUtilsObjectNameEXTVulkan.Core10.Enums.FormatFormatVulkan.Core10.HandlesInstance"Vulkan.Core10.DeviceInitializationInstanceCreateInfoPhysicalDevicebase Data.TuplefstGHC.IO.ExceptionIOErrorgetPhysicalDevicePropertiesDeviceVulkan.Core10.DeviceDeviceCreateInfoQueueData.Traversable Traversable!Vulkan.Core10.Enums.QueueFlagBitsQUEUE_TRANSFER_BITQUEUE_COMPUTE_BITQUEUE_GRAPHICS_BITassignselectDeviceQueueCreateInfo createDevice GHC.MaybeNothingVulkan.Core10.ImageView$sel:a:ComponentMappingGHC.BaseStringGHC.Showshowparse