úÎ#8ð-&§      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN O P Q R S T U V W XYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦None."#$%&',-./145689;=>?FHIMPSUVX_`dghklmq)Æ vulkan-utils‹Create an expression which checks the function pointers for all the Vulkan commands depended upon by the specified list of function names.YIt returns a list of function names corresponding to those functions with null pointers.‹Your program can use this function to fail early if a command couldn't be loaded for some reason (missing extension or layer for example).!One can create a function called  checkCommands with the following: M [d| checkCommands = $(checkCommandsExp ['withInstance, 'cmdDraw, ...]) |] It has the type 'IsString a => Instance -> Device -> [a]It looks basically like ôinst dev -> [ name | True <- [ nullFunPtr == pVkCreateDevice inst , nullFunPtr == pVkCreateFence dev .. ] | name <- [ "vkCreateDevice" , "vkCreateFence" .. ] ] § vulkan-utilsqGiven instance and device accessors and a function, find the function pointer accessor names which it depends onZcommandNames ['pVkCreateDevice, 'pVkDestroyDevice] ['pVkCreateFence] (mkName "withDevice")X[InstanceCmd Vulkan.Dynamic.pVkCreateDevice,InstanceCmd Vulkan.Dynamic.pVkDestroyDevice]¨ vulkan-utilsGet the C name of a function6commandString (DeviceCmd (mkName "pVkCreateInstance"))"vkCreateInstance"© vulkan-utilsgA list of potential sets of vulkan commands this name depends on, not all of them will be valid names.commandCandidates "withDevice"J["pVkAllocateDevice","pVkFreeDevice","pVkCreateDevice","pVkDestroyDevice"]&commandCandidates "waitSemaphoresSafe"["pVkWaitSemaphores"] commandCandidates "useCmdBuffer"'["pVkBeginCmdBuffer","pVkEndCmdBuffer"]!commandCandidates "withSemaphore"V["pVkAllocateSemaphore","pVkFreeSemaphore","pVkCreateSemaphore","pVkDestroySemaphore"]ª vulkan-utils"Get the record accessors of a type.$(lift . fmap show =<< accessorNames ''Device)I["Vulkan.Core10.Handles.deviceHandle","Vulkan.Core10.Handles.deviceCmds"] vulkan-utils The names of functions from the vulkan' package. Unknown commands are ignoredNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq0· 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 «, note that the VK_EXT_debug_utils extension must be enabled.None+"#$%&',-./145689;=>?FHIMPSUVX_dghklmq3ì vulkan-utils%Convert an OpenGL format enum into a ¬internalFormat 0x8051Just FORMAT_R8G8B8_UNORMNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq5z­®¯°None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqJE 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-utilsThe list of bits which are set  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-utilsqAll the required elements and as many optional elements as possible, as well as the missing optional elements.  None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqp( 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 ³‹ 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 q = MyQueues { computeQueue :: q , graphicsAndPresentQueue :: q , transferQueue :: q } 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 device¹ 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]]º 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 » s to pass to ¼$A function to extract the requested ² s from the ´ created with the »s½* if it wasn't possible to satisfy all the s¹ vulkan-utilsHow many of each ¾ are available vulkan-utilsWhich ¾s can each element use vulkan-utilsYA list of assignments, each element in this list has the length of the requirements list  None-"#$%&',-./145689;=>?FHIMPSUVX_dghklmq”]¿ vulkan-utilsMEnough information to focus on any structure within a Vulkan structure chain.À vulkan-utils\If the given structure can be found within a chain, return a lens to it. Otherwise, return ½.Á vulkan-utilsIs this chain empty?% vulkan-utils The minimum value to be accepted& vulkan-utilsThe value we got, less than unsatisfiedMinumum( vulkan-utilsAll the requirements were met) vulkan-utils_Didn't attempt this check because it required getPhysicalDeviceProperties2 which wasn't loaded* vulkan-utils]Didn't attempt this check because it required getPhysicalDeviceFeatures2 which wasn't loaded+ vulkan-utilsA Layer was not found, vulkan-utils2A device version didn't meet the minimum requested- vulkan-utils6The instance version didn't meet the minimum requested. vulkan-utils1A layer version didn't meet the minimum requested/ vulkan-utilsA feature was missing0 vulkan-utils&A propery was not an appropriate value1 vulkan-utilsA device extension was missing2 vulkan-utilsEA device extension was found but the version didn't meet requirements3 vulkan-utils!An instance extension was missing4 vulkan-utilsHAn instance extension was found but the version didn't meet requirements vulkan-utilsPInsert the settings of the requirements in to the provided instance create infoà vulkan-utils Generate Ä from some requirements.KThe returned struct chain will enable all required features and extensions.7 vulkan-utilsbGenerate a string describing which requirements were not met, if everything was satisfied return ½.Å vulkan-utils/Make a lookup function for extensions in layersÆ vulkan-utils#There is no Semigroup instance for Ç in base5 vulkan-utilsRequired requests vulkan-utilsOptional requests vulkan-utilsAn ÈC, this will be returned appropriately modified by the requirements6 vulkan-utilsRequired requests vulkan-utilsOptional requests vulkan-utilsnA deviceCreateInfo with no extensions. If you need elements in the struct chain you can add them later with ÉÊ vulkan-utilsLookup an extension vulkan-utilsThe requirement to test vulkan-utils The resultÅ vulkan-utilsPass ½ for Ë: extensions, pass a PhysicalDevice for device extensions.#$%&'(-.+43,)/*021567856'(-.+43,)/*021#$%&78None+ "#$%&',-./145689;=>?FHIMPSUVX_dghklmq°îB vulkan-utilsLike C: 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.C vulkan-utils+Create an 'Instance from some requirements.€Will throw an 'IOError in the case of unsatisfied non-optional requirements. Unsatisfied requirements will be listed on stderr.D vulkan-utils Create a ´ from some requirements.€Will throw an 'IOError in the case of unsatisfied non-optional requirements. Unsatisfied requirements will be listed on stderr.E vulkan-utils Get a single ³! deciding with a scoring functionÅPass 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 suitable devices.–As an example, the suitability function could return a tuple of device memory and the compute queue family index, and the scoring function could be ÌC to select devices based on their memory capacity. Consider using : to find your desired queues in the suitability function.%Pehaps also use the functionality in  and return the Ä too.)If no devices are deemed suitable then a  NoSuchThing Í is thrown.F vulkan-utilsExtract the name of a ³ with ÎB vulkan-utilsRequired vulkan-utilsOptionalC vulkan-utilsRequired vulkan-utilsOptionalD vulkan-utilsRequired vulkan-utilsOptionalE vulkan-utilsA suitability funcion for a ³, ½ if it is not to be chosen. vulkan-utils$Scoring function to rate this result vulkan-utilsThe score and the deviceBCDEFCBDEFNone-"#$%&',-./145689;=>?FHIMPSUVX_dghklmqÕëG vulkan-utils/Parse a requirement and produce an appropriate ÏDeviceVersionRequirement s are specified by in the form  major. minor[. patch]DeviceFeatureRequirements are specified in the form  typename.<member name> and produce a Ð% which checks and sets this feature.DevicePropertyRequirementvs are specified like feature requirements except with an additional description of the constraint. This may be any of myFunctioNameO: To check with an in-scope function taking the property type and returning Ñ> 1234: To indicate a minimum bound on a integral property>= 123?: To indicate an inclusive minimum bound on a integral property& SOMETHING_BITL: To indicate that the specified bit must be present in the bitmask valueDeviceExtensionRequirements are specified in the form  extensionname optionalversion.  extensionname must start with VK_,. The version will be compared against the  specVersion field of the ExtensionProperties record.Names may be qualified.8The separator between the type and member can be any of . :: : -> or any amount of spaceMlet r = [req|PhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline|] featureName r@"PhysicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline"7let r = [req|PhysicalDeviceVulkan11Features.multiview|] featureName r*"PhysicalDeviceVulkan11Features.multiview"8let r = [req|PhysicalDeviceMultiviewFeatures.multiview|] featureName r+"PhysicalDeviceMultiviewFeatures.multiview"H vulkan-utilsLike HB except that this parses a list of newline separated requirements It ignores Blank linesLines beginning with -- or #Ò vulkan-utilsparse ""Nothingparse "Foo->bar"Just (Feature ["Foo"] "bar")parse "V.Foo.bar" Just (Feature ["V","Foo"] "bar")parse "V.E.Foo bar"$Just (Feature ["V","E","Foo"] "bar") parse "1.2"Just (Version 4202496) parse "1 2 1"Just (Version 4202497)parse "Foo.bar >= 10"&Just (Property ["Foo"] "bar" (GTE 10))parse "V.Foo.bar & A.B.C_BIT"<Just (Property ["V","Foo"] "bar" (AndBit ["A","B","C_BIT"]))parse "V.Foo.bar even"0Just (Property ["V","Foo"] "bar" (Fun ["even"]))parse "V.Foo.bar Prelude.even":Just (Property ["V","Foo"] "bar" (Fun ["Prelude","even"]))Ó vulkan-utils3Filters blank or commented lines, remove duplicatesGHGH None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq×NOPONP None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqÛ†Q vulkan-utils tool name vulkan-utilswarning vulkan-utilserror vulkan-utils'Spir-V bytecode with warnings or errors vulkan-utilsSpir-V bytecodeQQ None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqÝRSTSRT None-"#$%&',-./145689;=>?FHIMPSUVX_dghklmqðšU vulkan-utilsU< performs very simple interpolation of Haskell values into Ôs.)Interpolated variables are prefixed with $3They can optionally be surrounded with braces like ${foo}5Interpolated variables are converted to strings with Õ 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"Ö 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 "$"]UU None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqüV vulkan-utilsV9 is a QuasiQuoter which produces HLSL source code with a #line“ directive 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 Õ To escape a $ use \$An explicit example ( interactive is from doctest):6let foo = 450 :: Int in [hlsl|const float foo = $foo|]3"#line 77 \"<interactive>\"\nconst float foo = 450"`Note that line number will be thrown off if any of the interpolated variables contain newlines.VWVWNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq HX vulkan-utilsX7 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 Õ To escape a $ use \$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 72 \"<interactive>\"\n"`Note that line number will be thrown off if any of the interpolated variables contain newlines.XYXYNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq ÞZ[\Z[\None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqt_ vulkan-utilsKCompile a GLSL/HLSL shader to SPIR-V using glslc (from the shaderc project)RMessages are converted to GHC warnings or errors depending on compilation success.` vulkan-utils0Compile a GLSL/HLSL shader to spir-v using glslc_ vulkan-utils"Argument to pass to `--target-spv` vulkan-utils,Argument to specify between glsl/hlsl shader vulkan-utilsstage vulkan-utils6Argument to specify entry-point function name for hlsl vulkan-utilsglsl or hlsl shader code vulkan-utilsSpir-V bytecode` vulkan-utilsSource location vulkan-utils"Argument to pass to `--target-spv` vulkan-utils,Argument to specify between glsl/hlsl shader vulkan-utilsstage vulkan-utils6Argument to specify entry-point function name for hlsl vulkan-utilsglsl or hlsl shader code vulkan-utils'Spir-V bytecode with warnings or errors_`_`None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqZa vulkan-utilsa9 is a QuasiQuoter which produces HLSL source code with a #line“ directive 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 Õ To escape a $ use \$*It is intended to be used in concert with p like so îmyConstant = 3.141 -- Note that this will have to be in a different module myFragmentShader = $(compileShaderQ Nothing "frag" Nothing [hlsl| static const float myConstant = ${myConstant}; float main (){ return myConstant; } |]) An explicit example ( interactive is from doctest):6let foo = 450 :: Int in [hlsl|const float foo = $foo|]3"#line 57 \"<interactive>\"\nconst float foo = 450"`Note that line number will be thrown off if any of the interpolated variables contain newlines.b vulkan-utils*QuasiQuoter for creating a compute shader.Equivalent to calling 4$(compileShaderQ Nothing "comp" Nothing [hlsl|...|]) without interpolation support.c vulkan-utils+QuasiQuoter for creating a fragment shader.Equivalent to calling 4$(compileShaderQ Nothing "frag" Nothing [hlsl|...|]) without interpolation support.d vulkan-utils+QuasiQuoter for creating a geometry shader.Equivalent to calling 4$(compileShaderQ Nothing "geom" Nothing [hlsl|...|]) without interpolation support.e vulkan-utils7QuasiQuoter for creating a tessellation control shader.Equivalent to calling 4$(compileShaderQ Nothing "tesc" Nothing [hlsl|...|]) without interpolation support.f vulkan-utils:QuasiQuoter for creating a tessellation evaluation shader.Equivalent to calling 4$(compileShaderQ Nothing "tese" Nothing [hlsl|...|]) without interpolation support.g vulkan-utils)QuasiQuoter for creating a vertex shader.Equivalent to calling 4$(compileShaderQ Nothing "vert" Nothing [hlsl|...|]) without interpolation support.h vulkan-utils1QuasiQuoter for creating a ray generation shader.Equivalent to calling <$(compileShaderQ (Just "spv1.4") "rgen" Nothing [hlsl|...|]) without interpolation support.i vulkan-utils0QuasiQuoter for creating an intersection shader.Equivalent to calling <$(compileShaderQ (Just "spv1.4") "rint" Nothing [hlsl|...|]) without interpolation support.j vulkan-utils+QuasiQuoter for creating an any-hit shader.Equivalent to calling =$(compileShaderQ (Just "spv1.4") "rahit" Nothing [hlsl|...|]) without interpolation support.k vulkan-utils.QuasiQuoter for creating a closest hit shader.Equivalent to calling =$(compileShaderQ (Just "spv1.4") "rchit" Nothing [hlsl|...|]) without interpolation support.l vulkan-utils'QuasiQuoter for creating a miss shader.Equivalent to calling =$(compileShaderQ (Just "spv1.4") "rmiss" Nothing [hlsl|...|]) without interpolation support.m vulkan-utils+QuasiQuoter for creating a callable shader.Equivalent to calling =$(compileShaderQ (Just "spv1.4") "rcall" Nothing [hlsl|...|]) without interpolation support.n vulkan-utils'QuasiQuoter for creating a task shader.Equivalent to calling 4$(compileShaderQ Nothing "task" Nothing [hlsl|...|]) without interpolation support.o vulkan-utils'QuasiQuoter for creating a mesh shader.Equivalent to calling 4$(compileShaderQ Nothing "mesh" Nothing [hlsl|...|]) without interpolation support.p vulkan-utils,Compile a HLSL shader to spir-v using glslc.RMessages are converted to GHC warnings or errors depending on compilation success.q vulkan-utils,Compile a HLSL shader to spir-v using glslc.p vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsIArgument to pass to `-fentry-point=` to specify entry-point function name vulkan-utilshlsl shader code vulkan-utilsSpir-V bytecodeq vulkan-utilsSource location vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsIArgument to pass to `-fentry-point=` to specify entry-point function name vulkan-utilshlsl shader code vulkan-utils'Spir-V bytecode with warnings or errorsabcdefghijklmnopqabcdefghijklmnopqNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq—Êr vulkan-utilsr7 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 Õ 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 Nothing "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 52 \"<interactive>\"\n"`Note that line number will be thrown off if any of the interpolated variables contain newlines.s vulkan-utils*QuasiQuoter for creating a compute shader.Equivalent to calling ,$(compileShaderQ Nothing "comp" [glsl|...|]) without interpolation support.t vulkan-utils+QuasiQuoter for creating a fragment shader.Equivalent to calling ,$(compileShaderQ Nothing "frag" [glsl|...|]) without interpolation support.u vulkan-utils+QuasiQuoter for creating a geometry shader.Equivalent to calling ,$(compileShaderQ Nothing "geom" [glsl|...|]) without interpolation support.v vulkan-utils7QuasiQuoter for creating a tessellation control shader.Equivalent to calling ,$(compileShaderQ Nothing "tesc" [glsl|...|]) without interpolation support.w vulkan-utils:QuasiQuoter for creating a tessellation evaluation shader.Equivalent to calling ,$(compileShaderQ Nothing "tese" [glsl|...|]) without interpolation support.x vulkan-utils)QuasiQuoter for creating a vertex shader.Equivalent to calling ,$(compileShaderQ Nothing "vert" [glsl|...|]) without interpolation support.y vulkan-utils1QuasiQuoter for creating a ray generation shader.Equivalent to calling 4$(compileShaderQ (Just "spv1.4") "rgen" [glsl|...|]) without interpolation support.z vulkan-utils0QuasiQuoter for creating an intersection shader.Equivalent to calling 4$(compileShaderQ (Just "spv1.4") "rint" [glsl|...|]) without interpolation support.{ vulkan-utils+QuasiQuoter for creating an any-hit shader.Equivalent to calling 5$(compileShaderQ (Just "spv1.4") "rahit" [glsl|...|]) without interpolation support.| vulkan-utils.QuasiQuoter for creating a closest hit shader.Equivalent to calling 5$(compileShaderQ (Just "spv1.4") "rchit" [glsl|...|]) without interpolation support.} vulkan-utils'QuasiQuoter for creating a miss shader.Equivalent to calling 5$(compileShaderQ (Just "spv1.4") "rmiss" [glsl|...|]) without interpolation support.~ vulkan-utils+QuasiQuoter for creating a callable shader.Equivalent to calling 5$(compileShaderQ (Just "spv1.4") "rcall" [glsl|...|]) without interpolation support. vulkan-utils'QuasiQuoter for creating a task shader.Equivalent to calling ,$(compileShaderQ Nothing "task" [glsl|...|]) without interpolation support.€ vulkan-utils'QuasiQuoter for creating a mesh shader.Equivalent to calling ,$(compileShaderQ Nothing "mesh" [glsl|...|]) without interpolation support. vulkan-utils,Compile a GLSL shader to spir-v using glslc.RMessages are converted to GHC warnings or errors depending on compilation success.‚ vulkan-utils,Compile a GLSL shader to spir-v using glslc. vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsglsl shader code vulkan-utilsSpir-V bytecode‚ vulkan-utilsSource location vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsglsl shader code vulkan-utils'Spir-V bytecode with warnings or errorsrstuvwxyz{|}~€‚rstuvwxyz{|}~€‚None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq¦xƒ vulkan-utils<Compile a GLSL/HLSL shader to spir-v using glslangValidator.RMessages are converted to GHC warnings or errors depending on compilation success.„ vulkan-utils;Compile a GLSL/HLSL shader to spir-v using glslangValidatorƒ vulkan-utils"Argument to pass to `--target-env` vulkan-utils,Argument to specify between glsl/hlsl shader vulkan-utilsstage vulkan-utils-Argument to specify entry-point function name vulkan-utilsglsl or hlsl shader code vulkan-utilsSpir-V bytecode„ vulkan-utilsSource location vulkan-utils"Argument to pass to `--target-env` vulkan-utils,Argument to specify between glsl/hlsl shader vulkan-utilsstage vulkan-utils-Argument to specify entry-point function name vulkan-utilsglsl or hlsl shader code vulkan-utils'Spir-V bytecode with warnings or errorsƒ„ƒ„None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqée… vulkan-utils…9 is a QuasiQuoter which produces HLSL source code with a #line“ directive 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 Õ 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 Nothing "frag" (Just "main") [hlsl| static const float myConstant = ${myConstant}; float main (){ return myConstant; } |]) An explicit example ( interactive is from doctest):6let foo = 450 :: Int in [hlsl|const float foo = $foo|]3"#line 37 \"<interactive>\"\nconst float foo = 450"`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 Nothing "comp" (Just "main") [hlsl|...|]) without interpolation support.‡ vulkan-utils+QuasiQuoter for creating a fragment shader.Equivalent to calling :$(compileShaderQ Nothing "frag" (Just "main") [hlsl|...|]) without interpolation support.ˆ vulkan-utils+QuasiQuoter for creating a geometry shader.Equivalent to calling :$(compileShaderQ Nothing "geom" (Just "main") [hlsl|...|]) without interpolation support.‰ vulkan-utils7QuasiQuoter for creating a tessellation control shader.Equivalent to calling :$(compileShaderQ Nothing "tesc" (Just "main") [hlsl|...|]) without interpolation support.Š vulkan-utils:QuasiQuoter for creating a tessellation evaluation shader.Equivalent to calling :$(compileShaderQ Nothing "tese" (Just "main") [hlsl|...|]) without interpolation support.‹ vulkan-utils)QuasiQuoter for creating a vertex shader.Equivalent to calling :$(compileShaderQ Nothing "vert" (Just "main") [hlsl|...|]) without interpolation support.Œ vulkan-utils1QuasiQuoter for creating a ray generation shader.Equivalent to calling D$(compileShaderQ (Just "spirv1.4") "rgen" (Just "main") [hlsl|...|]) without interpolation support. vulkan-utils0QuasiQuoter for creating an intersection shader.Equivalent to calling D$(compileShaderQ (Just "spirv1.4") "rint" (Just "main") [hlsl|...|]) without interpolation support.Ž vulkan-utils+QuasiQuoter for creating an any-hit shader.Equivalent to calling E$(compileShaderQ (Just "spirv1.4") "rahit" (Just "main") [hlsl|...|]) without interpolation support. vulkan-utils.QuasiQuoter for creating a closest hit shader.Equivalent to calling E$(compileShaderQ (Just "spirv1.4") "rchit" (Just "main") [hlsl|...|]) without interpolation support. vulkan-utils'QuasiQuoter for creating a miss shader.Equivalent to calling E$(compileShaderQ (Just "spirv1.4") "rmiss" (Just "main") [hlsl|...|]) without interpolation support.‘ vulkan-utils+QuasiQuoter for creating a callable shader.Equivalent to calling E$(compileShaderQ (Just "spirv1.4") "rcall" (Just "main") [hlsl|...|]) without interpolation support.’ vulkan-utils'QuasiQuoter for creating a task shader.Equivalent to calling :$(compileShaderQ Nothing "task" (Just "main") [hlsl|...|]) without interpolation support.“ vulkan-utils'QuasiQuoter for creating a mesh shader.Equivalent to calling :$(compileShaderQ Nothing "mesh" (Just "main") [hlsl|...|]) without interpolation support.” vulkan-utils7Compile a HLSL shader to spir-v using glslangValidator.RMessages are converted to GHC warnings or errors depending on compilation success.• vulkan-utils7Compile a HLSL shader to spir-v using glslangValidator.” vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsGArgument name to pass to `-e name` to specify entry-point function name vulkan-utilshlsl shader code vulkan-utilsSpir-V bytecode• vulkan-utilsSource location vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsGArgument name to pass to `-e name` to specify entry-point function name vulkan-utilshlsl shader code vulkan-utils'Spir-V bytecode with warnings or errors…†‡ˆ‰Š‹ŒŽ‘’“”•…†‡ˆ‰Š‹ŒŽ‘’“”•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 Õ 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 Nothing "frag" Nothing [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 4$(compileShaderQ Nothing "comp" Nothing [glsl|...|]) without interpolation support.˜ vulkan-utils+QuasiQuoter for creating a fragment shader.Equivalent to calling 4$(compileShaderQ Nothing "frag" Nothing [glsl|...|]) without interpolation support.™ vulkan-utils+QuasiQuoter for creating a geometry shader.Equivalent to calling 4$(compileShaderQ Nothing "geom" Nothing [glsl|...|]) without interpolation support.š vulkan-utils7QuasiQuoter for creating a tessellation control shader.Equivalent to calling 4$(compileShaderQ Nothing "tesc" Nothing [glsl|...|]) without interpolation support.› vulkan-utils:QuasiQuoter for creating a tessellation evaluation shader.Equivalent to calling 4$(compileShaderQ Nothing "tese" Nothing [glsl|...|]) without interpolation support.œ vulkan-utils)QuasiQuoter for creating a vertex shader.Equivalent to calling 4$(compileShaderQ Nothing "vert" Nothing [glsl|...|]) without interpolation support. vulkan-utils1QuasiQuoter for creating a ray generation shader.Equivalent to calling >$(compileShaderQ (Just "spirv1.4") "rgen" Nothing [glsl|...|]) without interpolation support.ž vulkan-utils0QuasiQuoter for creating an intersection shader.Equivalent to calling >$(compileShaderQ (Just "spirv1.4") "rint" Nothing [glsl|...|]) without interpolation support.Ÿ vulkan-utils+QuasiQuoter for creating an any-hit shader.Equivalent to calling ?$(compileShaderQ (Just "spirv1.4") "rahit" Nothing [glsl|...|]) without interpolation support.  vulkan-utils.QuasiQuoter for creating a closest hit shader.Equivalent to calling ?$(compileShaderQ (Just "spirv1.4") "rchit" Nothing [glsl|...|]) without interpolation support.¡ vulkan-utils'QuasiQuoter for creating a miss shader.Equivalent to calling ?$(compileShaderQ (Just "spirv1.4") "rmiss" Nothing [glsl|...|]) without interpolation support.¢ vulkan-utils+QuasiQuoter for creating a callable shader.Equivalent to calling ?$(compileShaderQ (Just "spirv1.4") "rcall" Nothing [glsl|...|]) without interpolation support.£ vulkan-utils'QuasiQuoter for creating a task shader.Equivalent to calling 4$(compileShaderQ Nothing "task" Nothing [glsl|...|]) without interpolation support.¤ vulkan-utils'QuasiQuoter for creating a mesh shader.Equivalent to calling 4$(compileShaderQ Nothing "mesh" Nothing [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.¦ vulkan-utils7Compile a GLSL shader to spir-v using glslangValidator.¥ vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsaArgument name to pass to `-e name --source-entry-point main` to specify entry-point function name vulkan-utilsglsl shader code vulkan-utilsSpir-V bytecode¦ vulkan-utilsSource location vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsaArgument name to pass to `-e name --source-entry-point main` to specify entry-point function name vulkan-utilsglsl shader code vulkan-utils'Spir-V bytecode with warnings or errors–—˜™š›œžŸ ¡¢£¤¥¦–—˜™š›œžŸ ¡¢£¤¥¦× !"#$%%&''())*+,-./01234567899:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab c d e f g h i j k lmlnopqrstkuvwxyz{|}~€‚stmuvwxyz{|}~€‚ststkuvwxyz{|}~€‚stmuvwxyz{|}~€‚stƒ„…†‡ˆ‰‡Š‹ŒŽ‡‘’‡‘“‡‘”•–—‡˜™‡˜š‡˜›œ‡žŸ‡ž •¡¢‡£¤¥¦§¨©‡žª«¬•­®‡¯°‡±²³‡‘´•µ¶•·¸‡¯¹‡º»‡º¼½¾¿ÀÁ•ÂÕÄÅ ÀÆ)vulkan-utils-0.5.0-7w5hKnlz5IqLaBDPARtYdkVulkan.Utils.CommandCheckVulkan.Utils.DebugVulkan.Utils.FromGLVulkan.Utils.MiscVulkan.Utils.QueueAssignmentVulkan.Utils.RequirementsVulkan.Utils.InitializationVulkan.Utils.Requirements.TH%Vulkan.Utils.ShaderQQ.Backend.Glslang&Vulkan.Utils.ShaderQQ.Backend.Internal%Vulkan.Utils.ShaderQQ.Backend.Shaderc!Vulkan.Utils.ShaderQQ.InterpolateVulkan.Utils.ShaderQQ.HLSLVulkan.Utils.ShaderQQ.GLSL Vulkan.Utils.ShaderQQ.ShaderType.Vulkan.Utils.ShaderQQ.Backend.Shaderc.Internal"Vulkan.Utils.ShaderQQ.HLSL.Shaderc"Vulkan.Utils.ShaderQQ.GLSL.Shaderc.Vulkan.Utils.ShaderQQ.Backend.Glslang.Internal"Vulkan.Utils.ShaderQQ.HLSL.Glslang"Vulkan.Utils.ShaderQQ.GLSL.GlslangVulkan.Utils.Internal assignQueues Vulkan.Utils RequirementscheckCommandsExp$fEqDeviceOrInstanceCommand$fShowDeviceOrInstanceCommanddebugCallbackFatalPtrdebugCallbackPtr nameObjectinternalFormatpartitionOptReqpartitionOptReqIOshowBits.&&. QueueIndex$sel:unQueueIndex:QueueIndexQueueFamilyIndex($sel:unQueueFamilyIndex:QueueFamilyIndex QueueSpec%$sel:queueSpecQueuePriority:QueueSpec'$sel:queueSpecFamilyPredicate:QueueSpecisComputeQueueFamilyisGraphicsQueueFamilyisTransferQueueFamilyisTransferOnlyQueueFamilyisPresentQueueFamily$fEqQueueFamilyIndex$fOrdQueueFamilyIndex$fEnumQueueFamilyIndex$fShowQueueFamilyIndex$fEqQueueIndex$fOrdQueueIndex$fEnumQueueIndex$fShowQueueIndex Unsatisfied#$sel:unsatisfiedMinimum:Unsatisfied"$sel:unsatisfiedActual:UnsatisfiedRequirementResult SatisfiedUnattemptedPropertiesUnattemptedFeatures MissingLayerUnsatisfiedDeviceVersionUnsatisfiedInstanceVersionUnsatisfiedLayerVersionUnsatisfiedFeatureUnsatisfiedPropertyUnsatisfiedDeviceExtension!UnsatisfiedDeviceExtensionVersionUnsatisfiedInstanceExtension#UnsatisfiedInstanceExtensionVersioncheckInstanceRequirementscheckDeviceRequirementsrequirementReportprettyRequirementResult $fKnownChain:$fKnownChain[]$fDeviceFeatureChaines$fDevicePropertyChaines$fSemigroupHas$fEqUnsatisfied$fOrdUnsatisfied$fEqRequirementResult$fOrdRequirementResult#createDebugInstanceFromRequirementscreateInstanceFromRequirementscreateDeviceFromRequirementspickPhysicalDevicephysicalDeviceNamereqreqs$fShowConstraint$fFunctorConstraint$fFoldableConstraint$fTraversableConstraint $fShowRequestGlslangWarning GlslangErrorprocessGlslangMessagesmessageProcessShadercWarning ShadercErrorprocessShadercMessages interpExphlslinsertLineDirectiveglsl ShaderTypeGLSLHLSL$fShowShaderType$fIsStringShaderTypecompileShaderQ compileShadercompfraggeomtesctesevertrgenrintrahitrchitrmissrcalltaskmesh commandNames commandStringcommandCandidates accessorNames"vulkan-3.10-EJB4VI3DLYQ6Eh1XvTX6ZZ$Vulkan.Extensions.VK_EXT_debug_utilssetDebugUtilsObjectNameEXTVulkan.Core10.Enums.FormatFormatunsatisfiedConstraints noSuchThingsayErrbadQQsetBitsVulkan.Core10.HandlesQueuePhysicalDeviceDevicebaseData.Traversable Traversable!Vulkan.Core10.Enums.QueueFlagBitsQUEUE_TRANSFER_BITQUEUE_COMPUTE_BITQUEUE_GRAPHICS_BITassignselectVulkan.Core10.DeviceDeviceQueueCreateInfo createDevice GHC.MaybeNothingVulkan.Core10.ImageView$sel:a:ComponentMapping KnownChainhasknownChainNullmakeInstanceCreateInfomakeDeviceCreateInfoDeviceCreateInfogetLookupExtension catProductsData.Functor.ProductProduct"Vulkan.Core10.DeviceInitializationInstanceCreateInfoVulkan.CStruct.ExtendsextendSomeStructcheckDeviceRequestInstance Data.TuplefstGHC.IO.ExceptionIOErrorgetPhysicalDevicePropertiesVulkan.RequirementDeviceRequirementRequireDeviceFeatureghc-prim GHC.TypesBoolparsefilterCommentsGHC.BaseStringGHC.Showshow