#7,F      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v wxyz{|}~None."#$%&',-./145689;=>?FHIMPSUVX_`dghklmq) vulkan-utilsCreate 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_dghklmq36 vulkan-utils%Convert an OpenGL format enum into a internalFormat 0x8051Just FORMAT_R8G8B8_UNORMNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq4None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqI 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_dghklmqor 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_dghklmq8B 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 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 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_dghklmq5G 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_dghklmqNOPONPNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq vulkan-utils tool name vulkan-utilswarning vulkan-utilserror vulkan-utils'Spir-V bytecode with warnings or errors vulkan-utilsSpir-V bytecode None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq[QRSRQS None-"#$%&',-./145689;=>?FHIMPSUVX_dghklmqT vulkan-utilsT< 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 "$"]TTNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq vulkan-utils9 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.None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq vulkan-utils7 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.None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq 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_dghklmqYU vulkan-utilsU9 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 d 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.V vulkan-utils*QuasiQuoter for creating a compute shader.Equivalent to calling 4$(compileShaderQ Nothing "comp" Nothing [hlsl|...|]) without interpolation support.W vulkan-utils+QuasiQuoter for creating a fragment shader.Equivalent to calling 4$(compileShaderQ Nothing "frag" Nothing [hlsl|...|]) without interpolation support.X vulkan-utils+QuasiQuoter for creating a geometry shader.Equivalent to calling 4$(compileShaderQ Nothing "geom" Nothing [hlsl|...|]) without interpolation support.Y vulkan-utils7QuasiQuoter for creating a tessellation control shader.Equivalent to calling 4$(compileShaderQ Nothing "tesc" Nothing [hlsl|...|]) without interpolation support.Z vulkan-utils:QuasiQuoter for creating a tessellation evaluation shader.Equivalent to calling 4$(compileShaderQ Nothing "tese" Nothing [hlsl|...|]) without interpolation support.[ vulkan-utils)QuasiQuoter for creating a vertex shader.Equivalent to calling 4$(compileShaderQ Nothing "vert" Nothing [hlsl|...|]) without interpolation support.\ vulkan-utils1QuasiQuoter for creating a ray generation shader.Equivalent to calling <$(compileShaderQ (Just "spv1.4") "rgen" Nothing [hlsl|...|]) without interpolation support.] vulkan-utils0QuasiQuoter for creating an intersection shader.Equivalent to calling <$(compileShaderQ (Just "spv1.4") "rint" Nothing [hlsl|...|]) without interpolation support.^ vulkan-utils+QuasiQuoter for creating an any-hit shader.Equivalent to calling =$(compileShaderQ (Just "spv1.4") "rahit" Nothing [hlsl|...|]) without interpolation support._ vulkan-utils.QuasiQuoter for creating a closest hit shader.Equivalent to calling =$(compileShaderQ (Just "spv1.4") "rchit" Nothing [hlsl|...|]) without interpolation support.` vulkan-utils'QuasiQuoter for creating a miss shader.Equivalent to calling =$(compileShaderQ (Just "spv1.4") "rmiss" Nothing [hlsl|...|]) without interpolation support.a vulkan-utils+QuasiQuoter for creating a callable shader.Equivalent to calling =$(compileShaderQ (Just "spv1.4") "rcall" Nothing [hlsl|...|]) without interpolation support.b vulkan-utils'QuasiQuoter for creating a task shader.Equivalent to calling 4$(compileShaderQ Nothing "task" Nothing [hlsl|...|]) without interpolation support.c vulkan-utils'QuasiQuoter for creating a mesh shader.Equivalent to calling 4$(compileShaderQ Nothing "mesh" Nothing [hlsl|...|]) without interpolation support.d vulkan-utils,Compile a HLSL shader to spir-v using glslc.RMessages are converted to GHC warnings or errors depending on compilation success.e vulkan-utils,Compile a HLSL shader to spir-v using glslc.d 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 bytecodee 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 errorsUVWXYZ[\]^_`abcdeUVWXYZ[\]^_`abcde None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqf vulkan-utilsf7 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 u 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.g vulkan-utils*QuasiQuoter for creating a compute shader.Equivalent to calling ,$(compileShaderQ Nothing "comp" [glsl|...|]) without interpolation support.h vulkan-utils+QuasiQuoter for creating a fragment shader.Equivalent to calling ,$(compileShaderQ Nothing "frag" [glsl|...|]) without interpolation support.i vulkan-utils+QuasiQuoter for creating a geometry shader.Equivalent to calling ,$(compileShaderQ Nothing "geom" [glsl|...|]) without interpolation support.j vulkan-utils7QuasiQuoter for creating a tessellation control shader.Equivalent to calling ,$(compileShaderQ Nothing "tesc" [glsl|...|]) without interpolation support.k vulkan-utils:QuasiQuoter for creating a tessellation evaluation shader.Equivalent to calling ,$(compileShaderQ Nothing "tese" [glsl|...|]) without interpolation support.l vulkan-utils)QuasiQuoter for creating a vertex shader.Equivalent to calling ,$(compileShaderQ Nothing "vert" [glsl|...|]) without interpolation support.m vulkan-utils1QuasiQuoter for creating a ray generation shader.Equivalent to calling 4$(compileShaderQ (Just "spv1.4") "rgen" [glsl|...|]) without interpolation support.n vulkan-utils0QuasiQuoter for creating an intersection shader.Equivalent to calling 4$(compileShaderQ (Just "spv1.4") "rint" [glsl|...|]) without interpolation support.o vulkan-utils+QuasiQuoter for creating an any-hit shader.Equivalent to calling 5$(compileShaderQ (Just "spv1.4") "rahit" [glsl|...|]) without interpolation support.p vulkan-utils.QuasiQuoter for creating a closest hit shader.Equivalent to calling 5$(compileShaderQ (Just "spv1.4") "rchit" [glsl|...|]) without interpolation support.q vulkan-utils'QuasiQuoter for creating a miss shader.Equivalent to calling 5$(compileShaderQ (Just "spv1.4") "rmiss" [glsl|...|]) without interpolation support.r vulkan-utils+QuasiQuoter for creating a callable shader.Equivalent to calling 5$(compileShaderQ (Just "spv1.4") "rcall" [glsl|...|]) without interpolation support.s vulkan-utils'QuasiQuoter for creating a task shader.Equivalent to calling ,$(compileShaderQ Nothing "task" [glsl|...|]) without interpolation support.t vulkan-utils'QuasiQuoter for creating a mesh shader.Equivalent to calling ,$(compileShaderQ Nothing "mesh" [glsl|...|]) without interpolation support.u vulkan-utils,Compile a GLSL shader to spir-v using glslc.RMessages are converted to GHC warnings or errors depending on compilation success.v vulkan-utils,Compile a GLSL shader to spir-v using glslc.u vulkan-utils"Argument to pass to `--target-env` vulkan-utilsstage vulkan-utilsglsl shader code vulkan-utilsSpir-V bytecodev 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 errorsfghijklmnopqrstuvfghijklmnopqrstuvNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq 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 errorsNone*"#$%&',-./145689;=>?FHIMPSUVX_dghklmqw vulkan-utilsw9 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.x vulkan-utils*QuasiQuoter for creating a compute shader.Equivalent to calling :$(compileShaderQ Nothing "comp" (Just "main") [hlsl|...|]) without interpolation support.y vulkan-utils+QuasiQuoter for creating a fragment shader.Equivalent to calling :$(compileShaderQ Nothing "frag" (Just "main") [hlsl|...|]) without interpolation support.z 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 errorswxyz{|}~wxyz{|}~None*"#$%&',-./145689;=>?FHIMPSUVX_dghklmq+ vulkan-utils7 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 l m n o p q r s t u v w x y z { k l m n o p q r s t u v w x y zjklmnopqrstuvwxyz{klmnopqrstuvwxyz|}~ j{yzyz+vulkan-utils-0.5.0.1-Gc2XKL6UTDTGnhQgXmtyOcVulkan.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.Shaderc!Vulkan.Utils.ShaderQQ.Interpolate"Vulkan.Utils.ShaderQQ.HLSL.Shaderc"Vulkan.Utils.ShaderQQ.GLSL.Shaderc"Vulkan.Utils.ShaderQQ.HLSL.Glslang"Vulkan.Utils.ShaderQQ.GLSL.GlslangVulkan.Utils.Internal assignQueues Vulkan.Utils Requirements&Vulkan.Utils.ShaderQQ.Backend.InternalVulkan.Utils.ShaderQQ.HLSLVulkan.Utils.ShaderQQ.GLSL Vulkan.Utils.ShaderQQ.ShaderType.Vulkan.Utils.ShaderQQ.Backend.Shaderc.Internal.Vulkan.Utils.ShaderQQ.Backend.Glslang.InternalcheckCommandsExp$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 GlslangErrorprocessGlslangMessagesShadercWarning ShadercErrorprocessShadercMessages interpExphlslcompfraggeomtesctesevertrgenrintrahitrchitrmissrcalltaskmeshcompileShaderQ compileShaderglsl commandNames commandStringcommandCandidates accessorNames$vulkan-3.10.3-LTmHBDZYrtM8qF6SDVsBpo$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.TypesBoolparsefilterCommentsmessageProcessGHC.BaseStringGHC.ShowshowinsertLineDirective ShaderTypeGLSLHLSL