uint32_tmslVersion;/**< The version of the Metal Shading Language available on this device. The format of the integer is MMmmpp, with two decimal digts each for Major, minor, and patch version values (eg. MSL 1.2 would appear as 010200). */
VkBool32indirectDrawing;/**< If true, draw calls support parameters held in a GPU buffer. */
VkBool32baseVertexInstanceDrawing;/**< If true, draw calls support specifiying the base vertex and instance. */
uint32_tdynamicMTLBufferSize;/**< If greater than zero, dynamic MTLBuffers for setting vertex, fragment, and compute bytes are supported, and their content must be below this value. */
VkBool32shaderSpecialization;/**< If true, shader specialization (aka Metal function constants) is supported. */
VkBool32ioSurfaces;/**< If true, VkImages can be underlaid by IOSurfaces via the vkUseIOSurfaceMVK() function, to support inter-process image transfers. */
VkBool32texelBuffers;/**< If true, texel buffers are supported, allowing the contents of a buffer to be interpreted as an image via a VkBufferView. */
VkBool32layeredRendering;/**< If true, layered rendering to multiple cube or texture array layers is supported. */
VkBool32presentModeImmediate;/**< If true, immediate surface present mode (VK_PRESENT_MODE_IMMEDIATE_KHR), allowing a swapchain image to be presented immediately, without waiting for the vertical sync period of the display, is supported. */
VkBool32stencilViews;/**< If true, stencil aspect views are supported through the MTLPixelFormatX24_Stencil8 and MTLPixelFormatX32_Stencil8 formats. */
VkBool32multisampleArrayTextures;/**< If true, MTLTextureType2DMultisampleArray is supported. */
VkBool32samplerClampToBorder;/**< If true, the border color set when creating a sampler will be respected. */
uint32_tmaxTextureDimension;/**< The maximum size of each texture dimension (width, height, or depth). */
uint32_tmaxPerStageBufferCount;/**< The total number of per-stage Metal buffers available for shader uniform content and attributes. */
uint32_tmaxPerStageTextureCount;/**< The total number of per-stage Metal textures available for shader uniform content. */
uint32_tmaxPerStageSamplerCount;/**< The total number of per-stage Metal samplers available for shader uniform content. */
VkDeviceSizemaxMTLBufferSize;/**< The max size of a MTLBuffer (in bytes). */
VkDeviceSizemtlBufferAlignment;/**< The alignment used when allocating memory for MTLBuffers. Must be PoT. */
VkDeviceSizemaxQueryBufferSize;/**< The maximum size of an occlusion query buffer (in bytes). */
VkDeviceSizemtlCopyBufferAlignment;/**< The alignment required during buffer copy operations (in bytes). */
VkSampleCountFlagssupportedSampleCounts;/**< A bitmask identifying the sample counts supported by the device. */
uint32_tminSwapchainImageCount;/**< The minimum number of swapchain images that can be supported by a surface. */
uint32_tmaxSwapchainImageCount;/**< The maximum number of swapchain images that can be supported by a surface. */
VkBool32combinedStoreResolveAction;/**< If true, the device supports VK_ATTACHMENT_STORE_OP_STORE with a simultaneous resolve attachment. */
VkBool32arrayOfTextures;/**< If true, arrays of textures is supported. */
VkBool32arrayOfSamplers;/**< If true, arrays of texture samplers is supported. */
MTLLanguageVersionmslVersionEnum;/**< The version of the Metal Shading Language available on this device, as a Metal enumeration. */
VkBool32depthSampleCompare;/**< If true, depth texture samplers support the comparison of the pixel value against a reference value. */
VkBool32events;/**< If true, Metal synchronization events (MTLEvent) are supported. */
VkBool32memoryBarriers;/**< If true, full memory barriers within Metal render passes are supported. */
VkBool32multisampleLayeredRendering;/**< If true, layered rendering to multiple multi-sampled cube or texture array layers is supported. */
VkBool32stencilFeedback;/**< If true, fragment shaders that write to [[stencil]] outputs are supported. */
VkBool32textureBuffers;/**< If true, textures of type MTLTextureTypeBuffer are supported. */
VkBool32postDepthCoverage;/**< If true, coverage masks in fragment shaders post-depth-test are supported. */
VkBool32fences;/**< If true, Metal synchronization fences (MTLFence) are supported. */
VkBool32rasterOrderGroups;/**< If true, Raster order groups in fragment shaders are supported. */
VkBool32native3DCompressedTextures;/**< If true, 3D compressed images are supported natively, without manual decompression. */
VkBool32nativeTextureSwizzle;/**< If true, component swizzle is supported natively, without manual swizzling in shaders. */
VkBool32placementHeaps;/**< If true, MTLHeap objects support placement of resources. */
VkDeviceSizepushConstantSizeAlignment;/**< The alignment used internally when allocating memory for push constants. Must be PoT. */
uint32_tmaxTextureLayers;/**< The maximum number of layers in an array texture. */
uint32_tmaxSubgroupSize;/**< The maximum number of threads in a SIMD-group. */
VkDeviceSizevertexStrideAlignment;/**< The alignment used for the stride of vertex attribute bindings. */
VkBool32indirectTessellationDrawing;/**< If true, tessellation draw calls support parameters held in a GPU buffer. */
VkBool32nonUniformThreadgroups;/**< If true, the device supports arbitrary-sized grids in compute workloads. */
VkBool32renderWithoutAttachments;/**< If true, we don't have to create a dummy attachment for a render pass if there isn't one. */
VkBool32deferredStoreActions;/**< If true, render pass store actions can be specified after the render encoder is created. */
VkBool32sharedLinearTextures;/**< If true, linear textures and texture buffers can be created from buffers in Shared storage. */
VkBool32depthResolve;/**< If true, resolving depth textures with filters other than Sample0 is supported. */
VkBool32stencilResolve;/**< If true, resolving stencil textures with filters other than Sample0 is supported. */
uint32_tmaxPerStageDynamicMTLBufferCount;/**< The maximum number of inline buffers that can be set on a command buffer. */
uint32_tmaxPerStageStorageTextureCount;/**< The total number of per-stage Metal textures with read-write access available for writing to from a shader. */
VkBool32astcHDRTextures;/**< If true, ASTC HDR pixel formats are supported. */
VkBool32renderLinearTextures;/**< If true, linear textures are renderable. */
VkBool32pullModelInterpolation;/**< If true, explicit interpolation functions are supported. */
VkBool32samplerMirrorClampToEdge;/**< If true, the mirrored clamp to edge address mode is supported in samplers. */
VkBool32quadPermute;/**< If true, quadgroup permutation functions (vote, ballot, shuffle) are supported in shaders. */
VkBool32simdPermute;/**< If true, SIMD-group permutation functions (vote, ballot, shuffle) are supported in shaders. */
VkBool32simdReduction;/**< If true, SIMD-group reduction functions (arithmetic) are supported in shaders. */
uint32_tminSubgroupSize;/**< The minimum number of threads in a SIMD-group. */
VkBool32textureBarriers;/**< If true, texture barriers are supported within Metal render passes. */
VkBool32tileBasedDeferredRendering;/**< If true, this device uses tile-based deferred rendering. */
VkBool32argumentBuffers;/**< If true, Metal argument buffers are supported. */
VkBool32descriptorSetArgumentBuffers;/**< If true, a Metal argument buffer can be assigned to a descriptor set, and used on any pipeline and pipeline stage. If false, a different Metal argument buffer must be used for each pipeline-stage/descriptor-set combination. */
MVKFloatRoundingclearColorFloatRounding;/**< Identifies the type of rounding Metal uses for MTLClearColor float to integer conversions. */
MVKCounterSamplingFlagscounterSamplingPoints;/**< Identifies the points where pipeline GPU counter sampling may occur. */
VkBool32programmableSamplePositions;/**< If true, programmable MSAA sample positions are supported. */
VkBool32shaderBarycentricCoordinates;/**< If true, fragment shader barycentric coordinates are supported. */
MTLArgumentBuffersTierargumentBuffersTier;/**< The argument buffer tier available on this device, as a Metal enumeration. */
VkBool32needsSampleDrefLodArrayWorkaround;/**< If true, sampling from arrayed depth images with explicit LoD is broken and needs a workaround. */
VkDeviceSizehostMemoryPageSize;/**< The size of a page of host memory on this platform. */
MVKPerformanceTrackerretrieveMTLCommandBuffer;/** Retrieve a MTLCommandBuffer from a MTLQueue, in milliseconds. */
MVKPerformanceTrackercommandBufferEncoding;/** Encode a single VkCommandBuffer to a MTLCommandBuffer (excludes MTLCommandBuffer encoding from configured immediate prefilling), in milliseconds. */
MVKPerformanceTrackersubmitCommandBuffers;/** Submit and encode all VkCommandBuffers in a vkQueueSubmit() operation to MTLCommandBuffers (including both prefilled and deferred encoding), in milliseconds. */
MVKPerformanceTrackermtlCommandBufferExecution;/** Execute a MTLCommandBuffer on the GPU, from commit to completion callback, in milliseconds. */
MVKPerformanceTrackerretrieveCAMetalDrawable;/** Retrieve next CAMetalDrawable from a CAMetalLayer, in milliseconds. */
MVKPerformanceTrackerpresentSwapchains;/** Present the swapchains in a vkQueuePresentKHR() on the GPU, from commit to presentation callback, in milliseconds. */
MVKPerformanceTrackerframeInterval;/** Frame presentation interval (1000/FPS), in milliseconds. */