module Vulkan
    class VkPhysicalDeviceLimits < FFI::Struct
        layout maxImageDimension1D:                             :uint32_t,
               maxImageDimension2D:                             :uint32_t,
               maxImageDimension3D:                             :uint32_t,
               maxImageDimensionCube:                           :uint32_t,
               maxImageArrayLayers:                             :uint32_t,
               maxTexelBufferElements:                          :uint32_t,
               maxUniformBufferRange:                           :uint32_t,
               maxStorageBufferRange:                           :uint32_t,
               maxPushConstantsSize:                            :uint32_t,
               maxMemoryAllocationCount:                        :uint32_t,
               maxSamplerAllocationCount:                       :uint32_t,
               bufferImageGranularity:                          :VkDeviceSize,
               sparseAddressSpaceSize:                          :VkDeviceSize,
               maxBoundDescriptorSets:                          :uint32_t,
               maxPerStageDescriptorSamplers:                   :uint32_t,
               maxPerStageDescriptorUniformBuffers:             :uint32_t,
               maxPerStageDescriptorStorageBuffers:             :uint32_t,
               maxPerStageDescriptorSampledImages:              :uint32_t,
               maxPerStageDescriptorStorageImages:              :uint32_t,
               maxPerStageDescriptorInputAttachments:           :uint32_t,
               maxPerStageResources:                            :uint32_t,
               maxDescriptorSetSamplers:                        :uint32_t,
               maxDescriptorSetUniformBuffers:                  :uint32_t,
               maxDescriptorSetUniformBuffersDynamic:           :uint32_t,
               maxDescriptorSetStorageBuffers:                  :uint32_t,
               maxDescriptorSetStorageBuffersDynamic:           :uint32_t,
               maxDescriptorSetSampledImages:                   :uint32_t,
               maxDescriptorSetStorageImages:                   :uint32_t,
               maxDescriptorSetInputAttachments:                :uint32_t,
               maxVertexInputAttributes:                        :uint32_t,
               maxVertexInputBindings:                          :uint32_t,
               maxVertexInputAttributeOffset:                   :uint32_t,
               maxVertexInputBindingStride:                     :uint32_t,
               maxVertexOutputComponents:                       :uint32_t,
               maxTessellationGenerationLevel:                  :uint32_t,
               maxTessellationPatchSize:                        :uint32_t,
               maxTessellationControlPerVertexInputComponents:  :uint32_t,
               maxTessellationControlPerVertexOutputComponents: :uint32_t,
               maxTessellationControlPerPatchOutputComponents:  :uint32_t,
               maxTessellationControlTotalOutputComponents:     :uint32_t,
               maxTessellationEvaluationInputComponents:        :uint32_t,
               maxTessellationEvaluationOutputComponents:       :uint32_t,
               maxGeometryShaderInvocations:                    :uint32_t,
               maxGeometryInputComponents:                      :uint32_t,
               maxGeometryOutputComponents:                     :uint32_t,
               maxGeometryOutputVertices:                       :uint32_t,
               maxGeometryTotalOutputComponents:                :uint32_t,
               maxFragmentInputComponents:                      :uint32_t,
               maxFragmentOutputAttachments:                    :uint32_t,
               maxFragmentDualSrcAttachments:                   :uint32_t,
               maxFragmentCombinedOutputResources:              :uint32_t,
               maxComputeSharedMemorySize:                      :uint32_t,
               maxComputeWorkGroupCount:                        [:uint32_t, 3],
               maxComputeWorkGroupInvocations:                  :uint32_t,
               maxComputeWorkGroupSize:                         [:uint32_t, 3],
               subPixelPrecisionBits:                           :uint32_t,
               subTexelPrecisionBits:                           :uint32_t,
               mipmapPrecisionBits:                             :uint32_t,
               maxDrawIndexedIndexValue:                        :uint32_t,
               maxDrawIndirectCount:                            :uint32_t,
               maxSamplerLodBias:                               :float,
               maxSamplerAnisotropy:                            :float,
               maxViewports:                                    :uint32_t,
               maxViewportDimensions:                           [:uint32_t, 2],
               viewportBoundsRange:                             [:float, 2],
               viewportSubPixelBits:                            :uint32_t,
               minMemoryMapAlignment:                           :size_t,
               minTexelBufferOffsetAlignment:                   :VkDeviceSize,
               minUniformBufferOffsetAlignment:                 :VkDeviceSize,
               minStorageBufferOffsetAlignment:                 :VkDeviceSize,
               minTexelOffset:                                  :int32_t,
               maxTexelOffset:                                  :uint32_t,
               minTexelGatherOffset:                            :int32_t,
               maxTexelGatherOffset:                            :uint32_t,
               minInterpolationOffset:                          :float,
               maxInterpolationOffset:                          :float,
               subPixelInterpolationOffsetBits:                 :uint32_t,
               maxFramebufferWidth:                             :uint32_t,
               maxFramebufferHeight:                            :uint32_t,
               maxFramebufferLayers:                            :uint32_t,
               framebufferColorSampleCounts:                    :VkSampleCountFlags,
               framebufferDepthSampleCounts:                    :VkSampleCountFlags,
               framebufferStencilSampleCounts:                  :VkSampleCountFlags,
               framebufferNoAttachmentsSampleCounts:            :VkSampleCountFlags,
               maxColorAttachments:                             :uint32_t,
               sampledImageColorSampleCounts:                   :VkSampleCountFlags,
               sampledImageIntegerSampleCounts:                 :VkSampleCountFlags,
               sampledImageDepthSampleCounts:                   :VkSampleCountFlags,
               sampledImageStencilSampleCounts:                 :VkSampleCountFlags,
               storageImageSampleCounts:                        :VkSampleCountFlags,
               maxSampleMaskWords:                              :uint32_t,
               timestampComputeAndGraphics:                     :VkBool32,
               timestampPeriod:                                 :float,
               maxClipDistances:                                :uint32_t,
               maxCullDistances:                                :uint32_t,
               maxCombinedClipAndCullDistances:                 :uint32_t,
               discreteQueuePriorities:                         :uint32_t,
               pointSizeRange:                                  [:float, 2],
               lineWidthRange:                                  [:float, 2],
               pointSizeGranularity:                            :float,
               lineWidthGranularity:                            :float,
               strictLines:                                     :VkBool32,
               standardSampleLocations:                         :VkBool32,
               optimalBufferCopyOffsetAlignment:                :VkDeviceSize,
               optimalBufferCopyRowPitchAlignment:              :VkDeviceSize,
               nonCoherentAtomSize:                             :VkDeviceSize
    end
end