packages feed

gpu-vulkan-core-0.1.0.7: src/Gpu/Vulkan/PhysicalDevice/Struct/Core.hsc

-- This file is automatically generated by the tools/makeStruct.hs
--	% stack runghc --cwd tools/ makeStruct

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.PhysicalDevice.Struct.Core where

import Foreign.Ptr
import Foreign.Marshal.Array
import Foreign.Storable
import Foreign.C.Struct
import Foreign.C.Struct.TypeSynonyms
import Data.Word
import Data.Int

import Gpu.Vulkan.TypeSynonyms.Core

#include <vulkan/vulkan.h>

struct "Limits" #{size VkPhysicalDeviceLimits}
		#{alignment VkPhysicalDeviceLimits} [
	("maxImageDimension1D", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxImageDimension1D} |],
		[| #{poke VkPhysicalDeviceLimits, maxImageDimension1D} |]),
	("maxImageDimension2D", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxImageDimension2D} |],
		[| #{poke VkPhysicalDeviceLimits, maxImageDimension2D} |]),
	("maxImageDimension3D", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxImageDimension3D} |],
		[| #{poke VkPhysicalDeviceLimits, maxImageDimension3D} |]),
	("maxImageDimensionCube", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxImageDimensionCube} |],
		[| #{poke VkPhysicalDeviceLimits, maxImageDimensionCube} |]),
	("maxImageArrayLayers", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxImageArrayLayers} |],
		[| #{poke VkPhysicalDeviceLimits, maxImageArrayLayers} |]),
	("maxTexelBufferElements", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTexelBufferElements} |],
		[| #{poke VkPhysicalDeviceLimits, maxTexelBufferElements} |]),
	("maxUniformBufferRange", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxUniformBufferRange} |],
		[| #{poke VkPhysicalDeviceLimits, maxUniformBufferRange} |]),
	("maxStorageBufferRange", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxStorageBufferRange} |],
		[| #{poke VkPhysicalDeviceLimits, maxStorageBufferRange} |]),
	("maxPushConstantsSize", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxPushConstantsSize} |],
		[| #{poke VkPhysicalDeviceLimits, maxPushConstantsSize} |]),
	("maxMemoryAllocationCount", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxMemoryAllocationCount} |],
		[| #{poke VkPhysicalDeviceLimits, maxMemoryAllocationCount} |]),
	("maxSamplerAllocationCount", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxSamplerAllocationCount} |],
		[| #{poke VkPhysicalDeviceLimits, maxSamplerAllocationCount} |]),
	("bufferImageGranularity", ''#{type VkDeviceSize},
		[| #{peek VkPhysicalDeviceLimits, bufferImageGranularity} |],
		[| #{poke VkPhysicalDeviceLimits, bufferImageGranularity} |]),
	("sparseAddressSpaceSize", ''#{type VkDeviceSize},
		[| #{peek VkPhysicalDeviceLimits, sparseAddressSpaceSize} |],
		[| #{poke VkPhysicalDeviceLimits, sparseAddressSpaceSize} |]),
	("maxBoundDescriptorSets", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxBoundDescriptorSets} |],
		[| #{poke VkPhysicalDeviceLimits, maxBoundDescriptorSets} |]),
	("maxPerStageDescriptorSamplers", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxPerStageDescriptorSamplers} |],
		[| #{poke VkPhysicalDeviceLimits, maxPerStageDescriptorSamplers} |]),
	("maxPerStageDescriptorUniformBuffers", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxPerStageDescriptorUniformBuffers} |],
		[| #{poke VkPhysicalDeviceLimits, maxPerStageDescriptorUniformBuffers} |]),
	("maxPerStageDescriptorStorageBuffers", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxPerStageDescriptorStorageBuffers} |],
		[| #{poke VkPhysicalDeviceLimits, maxPerStageDescriptorStorageBuffers} |]),
	("maxPerStageDescriptorSampledImages", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxPerStageDescriptorSampledImages} |],
		[| #{poke VkPhysicalDeviceLimits, maxPerStageDescriptorSampledImages} |]),
	("maxPerStageDescriptorStorageImages", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxPerStageDescriptorStorageImages} |],
		[| #{poke VkPhysicalDeviceLimits, maxPerStageDescriptorStorageImages} |]),
	("maxPerStageDescriptorInputAttachments", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxPerStageDescriptorInputAttachments} |],
		[| #{poke VkPhysicalDeviceLimits, maxPerStageDescriptorInputAttachments} |]),
	("maxPerStageResources", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxPerStageResources} |],
		[| #{poke VkPhysicalDeviceLimits, maxPerStageResources} |]),
	("maxDescriptorSetSamplers", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDescriptorSetSamplers} |],
		[| #{poke VkPhysicalDeviceLimits, maxDescriptorSetSamplers} |]),
	("maxDescriptorSetUniformBuffers", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDescriptorSetUniformBuffers} |],
		[| #{poke VkPhysicalDeviceLimits, maxDescriptorSetUniformBuffers} |]),
	("maxDescriptorSetUniformBuffersDynamic", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDescriptorSetUniformBuffersDynamic} |],
		[| #{poke VkPhysicalDeviceLimits, maxDescriptorSetUniformBuffersDynamic} |]),
	("maxDescriptorSetStorageBuffers", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDescriptorSetStorageBuffers} |],
		[| #{poke VkPhysicalDeviceLimits, maxDescriptorSetStorageBuffers} |]),
	("maxDescriptorSetStorageBuffersDynamic", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDescriptorSetStorageBuffersDynamic} |],
		[| #{poke VkPhysicalDeviceLimits, maxDescriptorSetStorageBuffersDynamic} |]),
	("maxDescriptorSetSampledImages", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDescriptorSetSampledImages} |],
		[| #{poke VkPhysicalDeviceLimits, maxDescriptorSetSampledImages} |]),
	("maxDescriptorSetStorageImages", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDescriptorSetStorageImages} |],
		[| #{poke VkPhysicalDeviceLimits, maxDescriptorSetStorageImages} |]),
	("maxDescriptorSetInputAttachments", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDescriptorSetInputAttachments} |],
		[| #{poke VkPhysicalDeviceLimits, maxDescriptorSetInputAttachments} |]),
	("maxVertexInputAttributes", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxVertexInputAttributes} |],
		[| #{poke VkPhysicalDeviceLimits, maxVertexInputAttributes} |]),
	("maxVertexInputBindings", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxVertexInputBindings} |],
		[| #{poke VkPhysicalDeviceLimits, maxVertexInputBindings} |]),
	("maxVertexInputAttributeOffset", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxVertexInputAttributeOffset} |],
		[| #{poke VkPhysicalDeviceLimits, maxVertexInputAttributeOffset} |]),
	("maxVertexInputBindingStride", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxVertexInputBindingStride} |],
		[| #{poke VkPhysicalDeviceLimits, maxVertexInputBindingStride} |]),
	("maxVertexOutputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxVertexOutputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxVertexOutputComponents} |]),
	("maxTessellationGenerationLevel", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTessellationGenerationLevel} |],
		[| #{poke VkPhysicalDeviceLimits, maxTessellationGenerationLevel} |]),
	("maxTessellationPatchSize", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTessellationPatchSize} |],
		[| #{poke VkPhysicalDeviceLimits, maxTessellationPatchSize} |]),
	("maxTessellationControlPerVertexInputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTessellationControlPerVertexInputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxTessellationControlPerVertexInputComponents} |]),
	("maxTessellationControlPerVertexOutputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTessellationControlPerVertexOutputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxTessellationControlPerVertexOutputComponents} |]),
	("maxTessellationControlPerPatchOutputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTessellationControlPerPatchOutputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxTessellationControlPerPatchOutputComponents} |]),
	("maxTessellationControlTotalOutputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTessellationControlTotalOutputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxTessellationControlTotalOutputComponents} |]),
	("maxTessellationEvaluationInputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTessellationEvaluationInputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxTessellationEvaluationInputComponents} |]),
	("maxTessellationEvaluationOutputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTessellationEvaluationOutputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxTessellationEvaluationOutputComponents} |]),
	("maxGeometryShaderInvocations", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxGeometryShaderInvocations} |],
		[| #{poke VkPhysicalDeviceLimits, maxGeometryShaderInvocations} |]),
	("maxGeometryInputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxGeometryInputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxGeometryInputComponents} |]),
	("maxGeometryOutputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxGeometryOutputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxGeometryOutputComponents} |]),
	("maxGeometryOutputVertices", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxGeometryOutputVertices} |],
		[| #{poke VkPhysicalDeviceLimits, maxGeometryOutputVertices} |]),
	("maxGeometryTotalOutputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxGeometryTotalOutputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxGeometryTotalOutputComponents} |]),
	("maxFragmentInputComponents", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxFragmentInputComponents} |],
		[| #{poke VkPhysicalDeviceLimits, maxFragmentInputComponents} |]),
	("maxFragmentOutputAttachments", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxFragmentOutputAttachments} |],
		[| #{poke VkPhysicalDeviceLimits, maxFragmentOutputAttachments} |]),
	("maxFragmentDualSrcAttachments", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxFragmentDualSrcAttachments} |],
		[| #{poke VkPhysicalDeviceLimits, maxFragmentDualSrcAttachments} |]),
	("maxFragmentCombinedOutputResources", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxFragmentCombinedOutputResources} |],
		[| #{poke VkPhysicalDeviceLimits, maxFragmentCombinedOutputResources} |]),
	("maxComputeSharedMemorySize", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxComputeSharedMemorySize} |],
		[| #{poke VkPhysicalDeviceLimits, maxComputeSharedMemorySize} |]),
	("maxComputeWorkGroupCount", ''ListUint32T,
		[| peekArray 3 . #{ptr VkPhysicalDeviceLimits, maxComputeWorkGroupCount}|],
		[| pokeArray . #{ptr VkPhysicalDeviceLimits, maxComputeWorkGroupCount} |]),
	("maxComputeWorkGroupInvocations", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxComputeWorkGroupInvocations} |],
		[| #{poke VkPhysicalDeviceLimits, maxComputeWorkGroupInvocations} |]),
	("maxComputeWorkGroupSize", ''ListUint32T,
		[| peekArray 3 . #{ptr VkPhysicalDeviceLimits, maxComputeWorkGroupSize}|],
		[| pokeArray . #{ptr VkPhysicalDeviceLimits, maxComputeWorkGroupSize} |]),
	("subPixelPrecisionBits", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, subPixelPrecisionBits} |],
		[| #{poke VkPhysicalDeviceLimits, subPixelPrecisionBits} |]),
	("subTexelPrecisionBits", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, subTexelPrecisionBits} |],
		[| #{poke VkPhysicalDeviceLimits, subTexelPrecisionBits} |]),
	("mipmapPrecisionBits", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, mipmapPrecisionBits} |],
		[| #{poke VkPhysicalDeviceLimits, mipmapPrecisionBits} |]),
	("maxDrawIndexedIndexValue", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDrawIndexedIndexValue} |],
		[| #{poke VkPhysicalDeviceLimits, maxDrawIndexedIndexValue} |]),
	("maxDrawIndirectCount", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxDrawIndirectCount} |],
		[| #{poke VkPhysicalDeviceLimits, maxDrawIndirectCount} |]),
	("maxSamplerLodBias", ''#{type float},
		[| #{peek VkPhysicalDeviceLimits, maxSamplerLodBias} |],
		[| #{poke VkPhysicalDeviceLimits, maxSamplerLodBias} |]),
	("maxSamplerAnisotropy", ''#{type float},
		[| #{peek VkPhysicalDeviceLimits, maxSamplerAnisotropy} |],
		[| #{poke VkPhysicalDeviceLimits, maxSamplerAnisotropy} |]),
	("maxViewports", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxViewports} |],
		[| #{poke VkPhysicalDeviceLimits, maxViewports} |]),
	("maxViewportDimensions", ''ListUint32T,
		[| peekArray 2 . #{ptr VkPhysicalDeviceLimits, maxViewportDimensions}|],
		[| pokeArray . #{ptr VkPhysicalDeviceLimits, maxViewportDimensions} |]),
	("viewportBoundsRange", ''ListFloat,
		[| peekArray 2 . #{ptr VkPhysicalDeviceLimits, viewportBoundsRange}|],
		[| pokeArray . #{ptr VkPhysicalDeviceLimits, viewportBoundsRange} |]),
	("viewportSubPixelBits", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, viewportSubPixelBits} |],
		[| #{poke VkPhysicalDeviceLimits, viewportSubPixelBits} |]),
	("minMemoryMapAlignment", ''#{type size_t},
		[| #{peek VkPhysicalDeviceLimits, minMemoryMapAlignment} |],
		[| #{poke VkPhysicalDeviceLimits, minMemoryMapAlignment} |]),
	("minTexelBufferOffsetAlignment", ''#{type VkDeviceSize},
		[| #{peek VkPhysicalDeviceLimits, minTexelBufferOffsetAlignment} |],
		[| #{poke VkPhysicalDeviceLimits, minTexelBufferOffsetAlignment} |]),
	("minUniformBufferOffsetAlignment", ''#{type VkDeviceSize},
		[| #{peek VkPhysicalDeviceLimits, minUniformBufferOffsetAlignment} |],
		[| #{poke VkPhysicalDeviceLimits, minUniformBufferOffsetAlignment} |]),
	("minStorageBufferOffsetAlignment", ''#{type VkDeviceSize},
		[| #{peek VkPhysicalDeviceLimits, minStorageBufferOffsetAlignment} |],
		[| #{poke VkPhysicalDeviceLimits, minStorageBufferOffsetAlignment} |]),
	("minTexelOffset", ''#{type int32_t},
		[| #{peek VkPhysicalDeviceLimits, minTexelOffset} |],
		[| #{poke VkPhysicalDeviceLimits, minTexelOffset} |]),
	("maxTexelOffset", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTexelOffset} |],
		[| #{poke VkPhysicalDeviceLimits, maxTexelOffset} |]),
	("minTexelGatherOffset", ''#{type int32_t},
		[| #{peek VkPhysicalDeviceLimits, minTexelGatherOffset} |],
		[| #{poke VkPhysicalDeviceLimits, minTexelGatherOffset} |]),
	("maxTexelGatherOffset", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxTexelGatherOffset} |],
		[| #{poke VkPhysicalDeviceLimits, maxTexelGatherOffset} |]),
	("minInterpolationOffset", ''#{type float},
		[| #{peek VkPhysicalDeviceLimits, minInterpolationOffset} |],
		[| #{poke VkPhysicalDeviceLimits, minInterpolationOffset} |]),
	("maxInterpolationOffset", ''#{type float},
		[| #{peek VkPhysicalDeviceLimits, maxInterpolationOffset} |],
		[| #{poke VkPhysicalDeviceLimits, maxInterpolationOffset} |]),
	("subPixelInterpolationOffsetBits", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, subPixelInterpolationOffsetBits} |],
		[| #{poke VkPhysicalDeviceLimits, subPixelInterpolationOffsetBits} |]),
	("maxFramebufferWidth", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxFramebufferWidth} |],
		[| #{poke VkPhysicalDeviceLimits, maxFramebufferWidth} |]),
	("maxFramebufferHeight", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxFramebufferHeight} |],
		[| #{poke VkPhysicalDeviceLimits, maxFramebufferHeight} |]),
	("maxFramebufferLayers", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxFramebufferLayers} |],
		[| #{poke VkPhysicalDeviceLimits, maxFramebufferLayers} |]),
	("framebufferColorSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, framebufferColorSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, framebufferColorSampleCounts} |]),
	("framebufferDepthSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, framebufferDepthSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, framebufferDepthSampleCounts} |]),
	("framebufferStencilSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, framebufferStencilSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, framebufferStencilSampleCounts} |]),
	("framebufferNoAttachmentsSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, framebufferNoAttachmentsSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, framebufferNoAttachmentsSampleCounts} |]),
	("maxColorAttachments", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxColorAttachments} |],
		[| #{poke VkPhysicalDeviceLimits, maxColorAttachments} |]),
	("sampledImageColorSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, sampledImageColorSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, sampledImageColorSampleCounts} |]),
	("sampledImageIntegerSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, sampledImageIntegerSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, sampledImageIntegerSampleCounts} |]),
	("sampledImageDepthSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, sampledImageDepthSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, sampledImageDepthSampleCounts} |]),
	("sampledImageStencilSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, sampledImageStencilSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, sampledImageStencilSampleCounts} |]),
	("storageImageSampleCounts", ''#{type VkSampleCountFlags},
		[| #{peek VkPhysicalDeviceLimits, storageImageSampleCounts} |],
		[| #{poke VkPhysicalDeviceLimits, storageImageSampleCounts} |]),
	("maxSampleMaskWords", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxSampleMaskWords} |],
		[| #{poke VkPhysicalDeviceLimits, maxSampleMaskWords} |]),
	("timestampComputeAndGraphics", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceLimits, timestampComputeAndGraphics} |],
		[| #{poke VkPhysicalDeviceLimits, timestampComputeAndGraphics} |]),
	("timestampPeriod", ''#{type float},
		[| #{peek VkPhysicalDeviceLimits, timestampPeriod} |],
		[| #{poke VkPhysicalDeviceLimits, timestampPeriod} |]),
	("maxClipDistances", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxClipDistances} |],
		[| #{poke VkPhysicalDeviceLimits, maxClipDistances} |]),
	("maxCullDistances", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxCullDistances} |],
		[| #{poke VkPhysicalDeviceLimits, maxCullDistances} |]),
	("maxCombinedClipAndCullDistances", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, maxCombinedClipAndCullDistances} |],
		[| #{poke VkPhysicalDeviceLimits, maxCombinedClipAndCullDistances} |]),
	("discreteQueuePriorities", ''#{type uint32_t},
		[| #{peek VkPhysicalDeviceLimits, discreteQueuePriorities} |],
		[| #{poke VkPhysicalDeviceLimits, discreteQueuePriorities} |]),
	("pointSizeRange", ''ListFloat,
		[| peekArray 2 . #{ptr VkPhysicalDeviceLimits, pointSizeRange}|],
		[| pokeArray . #{ptr VkPhysicalDeviceLimits, pointSizeRange} |]),
	("lineWidthRange", ''ListFloat,
		[| peekArray 2 . #{ptr VkPhysicalDeviceLimits, lineWidthRange}|],
		[| pokeArray . #{ptr VkPhysicalDeviceLimits, lineWidthRange} |]),
	("pointSizeGranularity", ''#{type float},
		[| #{peek VkPhysicalDeviceLimits, pointSizeGranularity} |],
		[| #{poke VkPhysicalDeviceLimits, pointSizeGranularity} |]),
	("lineWidthGranularity", ''#{type float},
		[| #{peek VkPhysicalDeviceLimits, lineWidthGranularity} |],
		[| #{poke VkPhysicalDeviceLimits, lineWidthGranularity} |]),
	("strictLines", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceLimits, strictLines} |],
		[| #{poke VkPhysicalDeviceLimits, strictLines} |]),
	("standardSampleLocations", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceLimits, standardSampleLocations} |],
		[| #{poke VkPhysicalDeviceLimits, standardSampleLocations} |]),
	("optimalBufferCopyOffsetAlignment", ''#{type VkDeviceSize},
		[| #{peek VkPhysicalDeviceLimits, optimalBufferCopyOffsetAlignment} |],
		[| #{poke VkPhysicalDeviceLimits, optimalBufferCopyOffsetAlignment} |]),
	("optimalBufferCopyRowPitchAlignment", ''#{type VkDeviceSize},
		[| #{peek VkPhysicalDeviceLimits, optimalBufferCopyRowPitchAlignment} |],
		[| #{poke VkPhysicalDeviceLimits, optimalBufferCopyRowPitchAlignment} |]),
	("nonCoherentAtomSize", ''#{type VkDeviceSize},
		[| #{peek VkPhysicalDeviceLimits, nonCoherentAtomSize} |],
		[| #{poke VkPhysicalDeviceLimits, nonCoherentAtomSize} |]) ]
	[''Show, ''Storable]

struct "Features" #{size VkPhysicalDeviceFeatures}
		#{alignment VkPhysicalDeviceFeatures} [
	("robustBufferAccess", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, robustBufferAccess} |],
		[| #{poke VkPhysicalDeviceFeatures, robustBufferAccess} |]),
	("fullDrawIndexUint32", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, fullDrawIndexUint32} |],
		[| #{poke VkPhysicalDeviceFeatures, fullDrawIndexUint32} |]),
	("imageCubeArray", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, imageCubeArray} |],
		[| #{poke VkPhysicalDeviceFeatures, imageCubeArray} |]),
	("independentBlend", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, independentBlend} |],
		[| #{poke VkPhysicalDeviceFeatures, independentBlend} |]),
	("geometryShader", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, geometryShader} |],
		[| #{poke VkPhysicalDeviceFeatures, geometryShader} |]),
	("tessellationShader", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, tessellationShader} |],
		[| #{poke VkPhysicalDeviceFeatures, tessellationShader} |]),
	("sampleRateShading", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sampleRateShading} |],
		[| #{poke VkPhysicalDeviceFeatures, sampleRateShading} |]),
	("dualSrcBlend", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, dualSrcBlend} |],
		[| #{poke VkPhysicalDeviceFeatures, dualSrcBlend} |]),
	("logicOp", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, logicOp} |],
		[| #{poke VkPhysicalDeviceFeatures, logicOp} |]),
	("multiDrawIndirect", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, multiDrawIndirect} |],
		[| #{poke VkPhysicalDeviceFeatures, multiDrawIndirect} |]),
	("drawIndirectFirstInstance", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, drawIndirectFirstInstance} |],
		[| #{poke VkPhysicalDeviceFeatures, drawIndirectFirstInstance} |]),
	("depthClamp", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, depthClamp} |],
		[| #{poke VkPhysicalDeviceFeatures, depthClamp} |]),
	("depthBiasClamp", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, depthBiasClamp} |],
		[| #{poke VkPhysicalDeviceFeatures, depthBiasClamp} |]),
	("fillModeNonSolid", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, fillModeNonSolid} |],
		[| #{poke VkPhysicalDeviceFeatures, fillModeNonSolid} |]),
	("depthBounds", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, depthBounds} |],
		[| #{poke VkPhysicalDeviceFeatures, depthBounds} |]),
	("wideLines", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, wideLines} |],
		[| #{poke VkPhysicalDeviceFeatures, wideLines} |]),
	("largePoints", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, largePoints} |],
		[| #{poke VkPhysicalDeviceFeatures, largePoints} |]),
	("alphaToOne", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, alphaToOne} |],
		[| #{poke VkPhysicalDeviceFeatures, alphaToOne} |]),
	("multiViewport", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, multiViewport} |],
		[| #{poke VkPhysicalDeviceFeatures, multiViewport} |]),
	("samplerAnisotropy", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, samplerAnisotropy} |],
		[| #{poke VkPhysicalDeviceFeatures, samplerAnisotropy} |]),
	("textureCompressionETC2", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, textureCompressionETC2} |],
		[| #{poke VkPhysicalDeviceFeatures, textureCompressionETC2} |]),
	("textureCompressionASTC_LDR", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, textureCompressionASTC_LDR} |],
		[| #{poke VkPhysicalDeviceFeatures, textureCompressionASTC_LDR} |]),
	("textureCompressionBC", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, textureCompressionBC} |],
		[| #{poke VkPhysicalDeviceFeatures, textureCompressionBC} |]),
	("occlusionQueryPrecise", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, occlusionQueryPrecise} |],
		[| #{poke VkPhysicalDeviceFeatures, occlusionQueryPrecise} |]),
	("pipelineStatisticsQuery", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, pipelineStatisticsQuery} |],
		[| #{poke VkPhysicalDeviceFeatures, pipelineStatisticsQuery} |]),
	("vertexPipelineStoresAndAtomics", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, vertexPipelineStoresAndAtomics} |],
		[| #{poke VkPhysicalDeviceFeatures, vertexPipelineStoresAndAtomics} |]),
	("fragmentStoresAndAtomics", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, fragmentStoresAndAtomics} |],
		[| #{poke VkPhysicalDeviceFeatures, fragmentStoresAndAtomics} |]),
	("shaderTessellationAndGeometryPointSize", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderTessellationAndGeometryPointSize} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderTessellationAndGeometryPointSize} |]),
	("shaderImageGatherExtended", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderImageGatherExtended} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderImageGatherExtended} |]),
	("shaderStorageImageExtendedFormats", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderStorageImageExtendedFormats} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderStorageImageExtendedFormats} |]),
	("shaderStorageImageMultisample", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderStorageImageMultisample} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderStorageImageMultisample} |]),
	("shaderStorageImageReadWithoutFormat", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderStorageImageReadWithoutFormat} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderStorageImageReadWithoutFormat} |]),
	("shaderStorageImageWriteWithoutFormat", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderStorageImageWriteWithoutFormat} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderStorageImageWriteWithoutFormat} |]),
	("shaderUniformBufferArrayDynamicIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderUniformBufferArrayDynamicIndexing} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderUniformBufferArrayDynamicIndexing} |]),
	("shaderSampledImageArrayDynamicIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderSampledImageArrayDynamicIndexing} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderSampledImageArrayDynamicIndexing} |]),
	("shaderStorageBufferArrayDynamicIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderStorageBufferArrayDynamicIndexing} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderStorageBufferArrayDynamicIndexing} |]),
	("shaderStorageImageArrayDynamicIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderStorageImageArrayDynamicIndexing} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderStorageImageArrayDynamicIndexing} |]),
	("shaderClipDistance", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderClipDistance} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderClipDistance} |]),
	("shaderCullDistance", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderCullDistance} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderCullDistance} |]),
	("shaderFloat64", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderFloat64} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderFloat64} |]),
	("shaderInt64", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderInt64} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderInt64} |]),
	("shaderInt16", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderInt16} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderInt16} |]),
	("shaderResourceResidency", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderResourceResidency} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderResourceResidency} |]),
	("shaderResourceMinLod", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, shaderResourceMinLod} |],
		[| #{poke VkPhysicalDeviceFeatures, shaderResourceMinLod} |]),
	("sparseBinding", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseBinding} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseBinding} |]),
	("sparseResidencyBuffer", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseResidencyBuffer} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseResidencyBuffer} |]),
	("sparseResidencyImage2D", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseResidencyImage2D} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseResidencyImage2D} |]),
	("sparseResidencyImage3D", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseResidencyImage3D} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseResidencyImage3D} |]),
	("sparseResidency2Samples", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseResidency2Samples} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseResidency2Samples} |]),
	("sparseResidency4Samples", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseResidency4Samples} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseResidency4Samples} |]),
	("sparseResidency8Samples", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseResidency8Samples} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseResidency8Samples} |]),
	("sparseResidency16Samples", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseResidency16Samples} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseResidency16Samples} |]),
	("sparseResidencyAliased", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, sparseResidencyAliased} |],
		[| #{poke VkPhysicalDeviceFeatures, sparseResidencyAliased} |]),
	("variableMultisampleRate", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, variableMultisampleRate} |],
		[| #{poke VkPhysicalDeviceFeatures, variableMultisampleRate} |]),
	("inheritedQueries", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceFeatures, inheritedQueries} |],
		[| #{poke VkPhysicalDeviceFeatures, inheritedQueries} |]) ]
	[''Show, ''Storable]

struct "DescriptorIndexingFeatures" #{size VkPhysicalDeviceDescriptorIndexingFeatures}
		#{alignment VkPhysicalDeviceDescriptorIndexingFeatures} [
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> #{poke VkPhysicalDeviceDescriptorIndexingFeatures, sType} p
			(#{const VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES} ::
				#{type VkStructureType}) |]),
	("pNext", ''PtrVoid,
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, pNext} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, pNext} |]),
	("shaderInputAttachmentArrayDynamicIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayDynamicIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayDynamicIndexing} |]),
	("shaderUniformTexelBufferArrayDynamicIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayDynamicIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayDynamicIndexing} |]),
	("shaderStorageTexelBufferArrayDynamicIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayDynamicIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayDynamicIndexing} |]),
	("shaderUniformBufferArrayNonUniformIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformBufferArrayNonUniformIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformBufferArrayNonUniformIndexing} |]),
	("shaderSampledImageArrayNonUniformIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderSampledImageArrayNonUniformIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderSampledImageArrayNonUniformIndexing} |]),
	("shaderStorageBufferArrayNonUniformIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageBufferArrayNonUniformIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageBufferArrayNonUniformIndexing} |]),
	("shaderStorageImageArrayNonUniformIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageImageArrayNonUniformIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageImageArrayNonUniformIndexing} |]),
	("shaderInputAttachmentArrayNonUniformIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayNonUniformIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderInputAttachmentArrayNonUniformIndexing} |]),
	("shaderUniformTexelBufferArrayNonUniformIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayNonUniformIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderUniformTexelBufferArrayNonUniformIndexing} |]),
	("shaderStorageTexelBufferArrayNonUniformIndexing", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayNonUniformIndexing} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, shaderStorageTexelBufferArrayNonUniformIndexing} |]),
	("descriptorBindingUniformBufferUpdateAfterBind", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformBufferUpdateAfterBind} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformBufferUpdateAfterBind} |]),
	("descriptorBindingSampledImageUpdateAfterBind", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingSampledImageUpdateAfterBind} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingSampledImageUpdateAfterBind} |]),
	("descriptorBindingStorageImageUpdateAfterBind", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageImageUpdateAfterBind} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageImageUpdateAfterBind} |]),
	("descriptorBindingStorageBufferUpdateAfterBind", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageBufferUpdateAfterBind} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageBufferUpdateAfterBind} |]),
	("descriptorBindingUniformTexelBufferUpdateAfterBind", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformTexelBufferUpdateAfterBind} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUniformTexelBufferUpdateAfterBind} |]),
	("descriptorBindingStorageTexelBufferUpdateAfterBind", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageTexelBufferUpdateAfterBind} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingStorageTexelBufferUpdateAfterBind} |]),
	("descriptorBindingUpdateUnusedWhilePending", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUpdateUnusedWhilePending} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingUpdateUnusedWhilePending} |]),
	("descriptorBindingPartiallyBound", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingPartiallyBound} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingPartiallyBound} |]),
	("descriptorBindingVariableDescriptorCount", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingVariableDescriptorCount} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, descriptorBindingVariableDescriptorCount} |]),
	("runtimeDescriptorArray", ''#{type VkBool32},
		[| #{peek VkPhysicalDeviceDescriptorIndexingFeatures, runtimeDescriptorArray} |],
		[| #{poke VkPhysicalDeviceDescriptorIndexingFeatures, runtimeDescriptorArray} |]) ]
	[''Show, ''Storable]

type PtrFeatures = Ptr Features