vk/0.210.0: Rework device features and limits

This commit is contained in:
Jason Ekstrand 2015-12-02 16:58:54 -08:00
parent 74c4c4acb6
commit d689745303
2 changed files with 105 additions and 79 deletions

View file

@ -1123,29 +1123,31 @@ typedef struct VkPhysicalDeviceFeatures {
VkBool32 geometryShader; VkBool32 geometryShader;
VkBool32 tessellationShader; VkBool32 tessellationShader;
VkBool32 sampleRateShading; VkBool32 sampleRateShading;
VkBool32 dualSourceBlend; VkBool32 dualSrcBlend;
VkBool32 logicOp; VkBool32 logicOp;
VkBool32 multiDrawIndirect; VkBool32 multiDrawIndirect;
VkBool32 depthClip; VkBool32 depthClamp;
VkBool32 depthBiasClamp; VkBool32 depthBiasClamp;
VkBool32 fillModeNonSolid; VkBool32 fillModeNonSolid;
VkBool32 depthBounds; VkBool32 depthBounds;
VkBool32 wideLines; VkBool32 wideLines;
VkBool32 largePoints; VkBool32 largePoints;
VkBool32 alphaToOne;
VkBool32 multiViewport;
VkBool32 samplerAnisotropy;
VkBool32 textureCompressionETC2; VkBool32 textureCompressionETC2;
VkBool32 textureCompressionASTC_LDR; VkBool32 textureCompressionASTC_LDR;
VkBool32 textureCompressionBC; VkBool32 textureCompressionBC;
VkBool32 occlusionQueryNonConservative; VkBool32 occlusionQueryPrecise;
VkBool32 pipelineStatisticsQuery; VkBool32 pipelineStatisticsQuery;
VkBool32 vertexSideEffects; VkBool32 vertexPipelineStoresAndAtomics;
VkBool32 tessellationSideEffects; VkBool32 fragmentStoresAndAtomics;
VkBool32 geometrySideEffects; VkBool32 shaderTessellationAndGeometryPointSize;
VkBool32 fragmentSideEffects;
VkBool32 shaderTessellationPointSize;
VkBool32 shaderGeometryPointSize;
VkBool32 shaderImageGatherExtended; VkBool32 shaderImageGatherExtended;
VkBool32 shaderStorageImageExtendedFormats; VkBool32 shaderStorageImageExtendedFormats;
VkBool32 shaderStorageImageMultisample; VkBool32 shaderStorageImageMultisample;
VkBool32 shaderStorageImageReadWithoutFormat;
VkBool32 shaderStorageImageWriteWithoutFormat;
VkBool32 shaderUniformBufferArrayDynamicIndexing; VkBool32 shaderUniformBufferArrayDynamicIndexing;
VkBool32 shaderSampledImageArrayDynamicIndexing; VkBool32 shaderSampledImageArrayDynamicIndexing;
VkBool32 shaderStorageBufferArrayDynamicIndexing; VkBool32 shaderStorageBufferArrayDynamicIndexing;
@ -1156,8 +1158,7 @@ typedef struct VkPhysicalDeviceFeatures {
VkBool32 shaderInt64; VkBool32 shaderInt64;
VkBool32 shaderInt16; VkBool32 shaderInt16;
VkBool32 shaderResourceResidency; VkBool32 shaderResourceResidency;
VkBool32 shaderResourceMinLOD; VkBool32 shaderResourceMinLod;
VkBool32 alphaToOne;
VkBool32 sparseBinding; VkBool32 sparseBinding;
VkBool32 sparseResidencyBuffer; VkBool32 sparseResidencyBuffer;
VkBool32 sparseResidencyImage2D; VkBool32 sparseResidencyImage2D;
@ -1167,6 +1168,7 @@ typedef struct VkPhysicalDeviceFeatures {
VkBool32 sparseResidency8Samples; VkBool32 sparseResidency8Samples;
VkBool32 sparseResidency16Samples; VkBool32 sparseResidency16Samples;
VkBool32 sparseResidencyAliased; VkBool32 sparseResidencyAliased;
VkBool32 variableMultisampleRate;
} VkPhysicalDeviceFeatures; } VkPhysicalDeviceFeatures;
typedef struct VkFormatProperties { typedef struct VkFormatProperties {
@ -1195,21 +1197,22 @@ typedef struct VkPhysicalDeviceLimits {
uint32_t maxImageDimension3D; uint32_t maxImageDimension3D;
uint32_t maxImageDimensionCube; uint32_t maxImageDimensionCube;
uint32_t maxImageArrayLayers; uint32_t maxImageArrayLayers;
VkSampleCountFlags sampleCounts; uint32_t maxTexelBufferElements;
uint32_t maxTexelBufferSize; uint32_t maxUniformBufferRange;
uint32_t maxUniformBufferSize; uint32_t maxStorageBufferRange;
uint32_t maxStorageBufferSize;
uint32_t maxPushConstantsSize; uint32_t maxPushConstantsSize;
uint32_t maxMemoryAllocationCount; uint32_t maxMemoryAllocationCount;
uint32_t maxSamplerAllocationCount;
VkDeviceSize bufferImageGranularity; VkDeviceSize bufferImageGranularity;
VkDeviceSize sparseAddressSpaceSize; VkDeviceSize sparseAddressSpaceSize;
uint32_t maxBoundDescriptorSets; uint32_t maxBoundDescriptorSets;
uint32_t maxDescriptorSets;
uint32_t maxPerStageDescriptorSamplers; uint32_t maxPerStageDescriptorSamplers;
uint32_t maxPerStageDescriptorUniformBuffers; uint32_t maxPerStageDescriptorUniformBuffers;
uint32_t maxPerStageDescriptorStorageBuffers; uint32_t maxPerStageDescriptorStorageBuffers;
uint32_t maxPerStageDescriptorSampledImages; uint32_t maxPerStageDescriptorSampledImages;
uint32_t maxPerStageDescriptorStorageImages; uint32_t maxPerStageDescriptorStorageImages;
uint32_t maxPerStageDescriptorInputAttachments;
uint32_t maxPerStageResources;
uint32_t maxDescriptorSetSamplers; uint32_t maxDescriptorSetSamplers;
uint32_t maxDescriptorSetUniformBuffers; uint32_t maxDescriptorSetUniformBuffers;
uint32_t maxDescriptorSetUniformBuffersDynamic; uint32_t maxDescriptorSetUniformBuffersDynamic;
@ -1217,27 +1220,28 @@ typedef struct VkPhysicalDeviceLimits {
uint32_t maxDescriptorSetStorageBuffersDynamic; uint32_t maxDescriptorSetStorageBuffersDynamic;
uint32_t maxDescriptorSetSampledImages; uint32_t maxDescriptorSetSampledImages;
uint32_t maxDescriptorSetStorageImages; uint32_t maxDescriptorSetStorageImages;
uint32_t maxDescriptorSetInputAttachments;
uint32_t maxVertexInputAttributes; uint32_t maxVertexInputAttributes;
uint32_t maxVertexInputBindings; uint32_t maxVertexInputBindings;
uint32_t maxVertexInputAttributeOffset; uint32_t maxVertexInputAttributeOffset;
uint32_t maxVertexInputBindingStride; uint32_t maxVertexInputBindingStride;
uint32_t maxVertexOutputComponents; uint32_t maxVertexOutputComponents;
uint32_t maxTessGenLevel; uint32_t maxTessellationGenerationLevel;
uint32_t maxTessPatchSize; uint32_t maxTessellationPatchSize;
uint32_t maxTessControlPerVertexInputComponents; uint32_t maxTessellationControlPerVertexInputComponents;
uint32_t maxTessControlPerVertexOutputComponents; uint32_t maxTessellationControlPerVertexOutputComponents;
uint32_t maxTessControlPerPatchOutputComponents; uint32_t maxTessellationControlPerPatchOutputComponents;
uint32_t maxTessControlTotalOutputComponents; uint32_t maxTessellationControlTotalOutputComponents;
uint32_t maxTessEvaluationInputComponents; uint32_t maxTessellationEvaluationInputComponents;
uint32_t maxTessEvaluationOutputComponents; uint32_t maxTessellationEvaluationOutputComponents;
uint32_t maxGeometryShaderInvocations; uint32_t maxGeometryShaderInvocations;
uint32_t maxGeometryInputComponents; uint32_t maxGeometryInputComponents;
uint32_t maxGeometryOutputComponents; uint32_t maxGeometryOutputComponents;
uint32_t maxGeometryOutputVertices; uint32_t maxGeometryOutputVertices;
uint32_t maxGeometryTotalOutputComponents; uint32_t maxGeometryTotalOutputComponents;
uint32_t maxFragmentInputComponents; uint32_t maxFragmentInputComponents;
uint32_t maxFragmentOutputBuffers; uint32_t maxFragmentOutputAttachments;
uint32_t maxFragmentDualSourceBuffers; uint32_t maxFragmentDualSrcAttachments;
uint32_t maxFragmentCombinedOutputResources; uint32_t maxFragmentCombinedOutputResources;
uint32_t maxComputeSharedMemorySize; uint32_t maxComputeSharedMemorySize;
uint32_t maxComputeWorkGroupCount[3]; uint32_t maxComputeWorkGroupCount[3];
@ -1247,21 +1251,20 @@ typedef struct VkPhysicalDeviceLimits {
uint32_t subTexelPrecisionBits; uint32_t subTexelPrecisionBits;
uint32_t mipmapPrecisionBits; uint32_t mipmapPrecisionBits;
uint32_t maxDrawIndexedIndexValue; uint32_t maxDrawIndexedIndexValue;
uint32_t maxDrawIndirectInstanceCount; uint32_t maxDrawIndirectCount;
VkBool32 primitiveRestartForPatches;
float maxSamplerLodBias; float maxSamplerLodBias;
float maxSamplerAnisotropy; float maxSamplerAnisotropy;
uint32_t maxViewports; uint32_t maxViewports;
uint32_t maxViewportDimensions[2]; uint32_t maxViewportDimensions[2];
float viewportBoundsRange[2]; float viewportBoundsRange[2];
uint32_t viewportSubPixelBits; uint32_t viewportSubPixelBits;
uint32_t minMemoryMapAlignment; size_t minMemoryMapAlignment;
uint32_t minTexelBufferOffsetAlignment; VkDeviceSize minTexelBufferOffsetAlignment;
uint32_t minUniformBufferOffsetAlignment; VkDeviceSize minUniformBufferOffsetAlignment;
uint32_t minStorageBufferOffsetAlignment; VkDeviceSize minStorageBufferOffsetAlignment;
uint32_t minTexelOffset; int32_t minTexelOffset;
uint32_t maxTexelOffset; uint32_t maxTexelOffset;
uint32_t minTexelGatherOffset; int32_t minTexelGatherOffset;
uint32_t maxTexelGatherOffset; uint32_t maxTexelGatherOffset;
float minInterpolationOffset; float minInterpolationOffset;
float maxInterpolationOffset; float maxInterpolationOffset;
@ -1269,23 +1272,31 @@ typedef struct VkPhysicalDeviceLimits {
uint32_t maxFramebufferWidth; uint32_t maxFramebufferWidth;
uint32_t maxFramebufferHeight; uint32_t maxFramebufferHeight;
uint32_t maxFramebufferLayers; uint32_t maxFramebufferLayers;
uint32_t maxFramebufferColorSamples; VkSampleCountFlags framebufferColorSampleCounts;
uint32_t maxFramebufferDepthSamples; VkSampleCountFlags framebufferDepthSampleCounts;
uint32_t maxFramebufferStencilSamples; VkSampleCountFlags framebufferStencilSampleCounts;
VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
uint32_t maxColorAttachments; uint32_t maxColorAttachments;
uint32_t maxSampledImageColorSamples; VkSampleCountFlags sampledImageColorSampleCounts;
uint32_t maxSampledImageDepthSamples; VkSampleCountFlags sampledImageIntegerSampleCounts;
uint32_t maxSampledImageIntegerSamples; VkSampleCountFlags sampledImageDepthSampleCounts;
uint32_t maxStorageImageSamples; VkSampleCountFlags sampledImageStencilSampleCounts;
VkSampleCountFlags storageImageSampleCounts;
uint32_t maxSampleMaskWords; uint32_t maxSampleMaskWords;
uint64_t timestampFrequency; float timestampPeriod;
uint32_t maxClipDistances; uint32_t maxClipDistances;
uint32_t maxCullDistances; uint32_t maxCullDistances;
uint32_t maxCombinedClipAndCullDistances; uint32_t maxCombinedClipAndCullDistances;
uint32_t discreteQueuePriorities;
float pointSizeRange[2]; float pointSizeRange[2];
float lineWidthRange[2]; float lineWidthRange[2];
float pointSizeGranularity; float pointSizeGranularity;
float lineWidthGranularity; float lineWidthGranularity;
VkBool32 strictLines;
VkBool32 standardSampleLocations;
VkDeviceSize optimalBufferCopyOffsetAlignment;
VkDeviceSize optimalBufferCopyRowPitchAlignment;
VkDeviceSize nonCoherentAtomSize;
} VkPhysicalDeviceLimits; } VkPhysicalDeviceLimits;
typedef struct VkPhysicalDeviceSparseProperties { typedef struct VkPhysicalDeviceSparseProperties {

View file

@ -324,26 +324,26 @@ void anv_GetPhysicalDeviceFeatures(
.geometryShader = true, .geometryShader = true,
.tessellationShader = false, .tessellationShader = false,
.sampleRateShading = false, .sampleRateShading = false,
.dualSourceBlend = true, .dualSrcBlend = true,
.logicOp = true, .logicOp = true,
.multiDrawIndirect = true, .multiDrawIndirect = true,
.depthClip = false, .depthClamp = false,
.depthBiasClamp = false, .depthBiasClamp = false,
.fillModeNonSolid = true, .fillModeNonSolid = true,
.depthBounds = false, .depthBounds = false,
.wideLines = true, .wideLines = true,
.largePoints = true, .largePoints = true,
.alphaToOne = true,
.multiViewport = true,
.samplerAnisotropy = false, /* FINISHME */
.textureCompressionETC2 = true, .textureCompressionETC2 = true,
.textureCompressionASTC_LDR = true, .textureCompressionASTC_LDR = true,
.textureCompressionBC = true, .textureCompressionBC = true,
.occlusionQueryNonConservative = false, /* FINISHME */ .occlusionQueryPrecise = false, /* FINISHME */
.pipelineStatisticsQuery = true, .pipelineStatisticsQuery = true,
.vertexSideEffects = false, .vertexPipelineStoresAndAtomics = false,
.tessellationSideEffects = false, .fragmentStoresAndAtomics = true,
.geometrySideEffects = false, .shaderTessellationAndGeometryPointSize = true,
.fragmentSideEffects = false,
.shaderTessellationPointSize = false,
.shaderGeometryPointSize = true,
.shaderImageGatherExtended = true, .shaderImageGatherExtended = true,
.shaderStorageImageExtendedFormats = false, .shaderStorageImageExtendedFormats = false,
.shaderStorageImageMultisample = false, .shaderStorageImageMultisample = false,
@ -351,12 +351,15 @@ void anv_GetPhysicalDeviceFeatures(
.shaderSampledImageArrayDynamicIndexing = false, .shaderSampledImageArrayDynamicIndexing = false,
.shaderStorageBufferArrayDynamicIndexing = false, .shaderStorageBufferArrayDynamicIndexing = false,
.shaderStorageImageArrayDynamicIndexing = false, .shaderStorageImageArrayDynamicIndexing = false,
.shaderStorageImageReadWithoutFormat = false,
.shaderStorageImageWriteWithoutFormat = true,
.shaderClipDistance = false, .shaderClipDistance = false,
.shaderCullDistance = false, .shaderCullDistance = false,
.shaderFloat64 = false, .shaderFloat64 = false,
.shaderInt64 = false, .shaderInt64 = false,
.shaderInt16 = false, .shaderInt16 = false,
.alphaToOne = true, .alphaToOne = true,
.variableMultisampleRate = false,
}; };
} }
@ -369,30 +372,34 @@ void anv_GetPhysicalDeviceProperties(
anv_finishme("Get correct values for VkPhysicalDeviceLimits"); anv_finishme("Get correct values for VkPhysicalDeviceLimits");
VkSampleCountFlags sample_counts =
VK_SAMPLE_COUNT_1_BIT |
VK_SAMPLE_COUNT_2_BIT |
VK_SAMPLE_COUNT_4_BIT |
VK_SAMPLE_COUNT_8_BIT;
VkPhysicalDeviceLimits limits = { VkPhysicalDeviceLimits limits = {
.maxImageDimension1D = (1 << 14), .maxImageDimension1D = (1 << 14),
.maxImageDimension2D = (1 << 14), .maxImageDimension2D = (1 << 14),
.maxImageDimension3D = (1 << 10), .maxImageDimension3D = (1 << 10),
.maxImageDimensionCube = (1 << 14), .maxImageDimensionCube = (1 << 14),
.maxImageArrayLayers = (1 << 10), .maxImageArrayLayers = (1 << 10),
.maxTexelBufferElements = (1 << 14),
/* Broadwell supports 1, 2, 4, and 8 samples. */ .maxUniformBufferRange = UINT32_MAX,
.sampleCounts = 4, .maxStorageBufferRange = UINT32_MAX,
.maxTexelBufferSize = (1 << 14),
.maxUniformBufferSize = UINT32_MAX,
.maxStorageBufferSize = UINT32_MAX,
.maxPushConstantsSize = MAX_PUSH_CONSTANTS_SIZE, .maxPushConstantsSize = MAX_PUSH_CONSTANTS_SIZE,
.maxMemoryAllocationCount = UINT32_MAX, .maxMemoryAllocationCount = UINT32_MAX,
.maxSamplerAllocationCount = UINT32_MAX,
.bufferImageGranularity = 64, /* A cache line */ .bufferImageGranularity = 64, /* A cache line */
.sparseAddressSpaceSize = 0, .sparseAddressSpaceSize = 0,
.maxBoundDescriptorSets = MAX_SETS, .maxBoundDescriptorSets = MAX_SETS,
.maxDescriptorSets = UINT32_MAX,
.maxPerStageDescriptorSamplers = 64, .maxPerStageDescriptorSamplers = 64,
.maxPerStageDescriptorUniformBuffers = 64, .maxPerStageDescriptorUniformBuffers = 64,
.maxPerStageDescriptorStorageBuffers = 64, .maxPerStageDescriptorStorageBuffers = 64,
.maxPerStageDescriptorSampledImages = 64, .maxPerStageDescriptorSampledImages = 64,
.maxPerStageDescriptorStorageImages = 64, .maxPerStageDescriptorStorageImages = 64,
.maxPerStageDescriptorInputAttachments = 64,
.maxPerStageResources = 128,
.maxDescriptorSetSamplers = 256, .maxDescriptorSetSamplers = 256,
.maxDescriptorSetUniformBuffers = 256, .maxDescriptorSetUniformBuffers = 256,
.maxDescriptorSetUniformBuffersDynamic = 256, .maxDescriptorSetUniformBuffersDynamic = 256,
@ -400,27 +407,28 @@ void anv_GetPhysicalDeviceProperties(
.maxDescriptorSetStorageBuffersDynamic = 256, .maxDescriptorSetStorageBuffersDynamic = 256,
.maxDescriptorSetSampledImages = 256, .maxDescriptorSetSampledImages = 256,
.maxDescriptorSetStorageImages = 256, .maxDescriptorSetStorageImages = 256,
.maxDescriptorSetInputAttachments = 256,
.maxVertexInputAttributes = 32, .maxVertexInputAttributes = 32,
.maxVertexInputBindings = 32, .maxVertexInputBindings = 32,
.maxVertexInputAttributeOffset = 256, .maxVertexInputAttributeOffset = 256,
.maxVertexInputBindingStride = 256, .maxVertexInputBindingStride = 256,
.maxVertexOutputComponents = 32, .maxVertexOutputComponents = 32,
.maxTessGenLevel = 0, .maxTessellationGenerationLevel = 0,
.maxTessPatchSize = 0, .maxTessellationPatchSize = 0,
.maxTessControlPerVertexInputComponents = 0, .maxTessellationControlPerVertexInputComponents = 0,
.maxTessControlPerVertexOutputComponents = 0, .maxTessellationControlPerVertexOutputComponents = 0,
.maxTessControlPerPatchOutputComponents = 0, .maxTessellationControlPerPatchOutputComponents = 0,
.maxTessControlTotalOutputComponents = 0, .maxTessellationControlTotalOutputComponents = 0,
.maxTessEvaluationInputComponents = 0, .maxTessellationEvaluationInputComponents = 0,
.maxTessEvaluationOutputComponents = 0, .maxTessellationEvaluationOutputComponents = 0,
.maxGeometryShaderInvocations = 6, .maxGeometryShaderInvocations = 6,
.maxGeometryInputComponents = 16, .maxGeometryInputComponents = 16,
.maxGeometryOutputComponents = 16, .maxGeometryOutputComponents = 16,
.maxGeometryOutputVertices = 16, .maxGeometryOutputVertices = 16,
.maxGeometryTotalOutputComponents = 16, .maxGeometryTotalOutputComponents = 16,
.maxFragmentInputComponents = 16, .maxFragmentInputComponents = 16,
.maxFragmentOutputBuffers = 8, .maxFragmentOutputAttachments = 8,
.maxFragmentDualSourceBuffers = 2, .maxFragmentDualSrcAttachments = 2,
.maxFragmentCombinedOutputResources = 8, .maxFragmentCombinedOutputResources = 8,
.maxComputeSharedMemorySize = 1024, .maxComputeSharedMemorySize = 1024,
.maxComputeWorkGroupCount = { .maxComputeWorkGroupCount = {
@ -438,8 +446,7 @@ void anv_GetPhysicalDeviceProperties(
.subTexelPrecisionBits = 4 /* FIXME */, .subTexelPrecisionBits = 4 /* FIXME */,
.mipmapPrecisionBits = 4 /* FIXME */, .mipmapPrecisionBits = 4 /* FIXME */,
.maxDrawIndexedIndexValue = UINT32_MAX, .maxDrawIndexedIndexValue = UINT32_MAX,
.maxDrawIndirectInstanceCount = UINT32_MAX, .maxDrawIndirectCount = UINT32_MAX,
.primitiveRestartForPatches = UINT32_MAX,
.maxSamplerLodBias = 16, .maxSamplerLodBias = 16,
.maxSamplerAnisotropy = 16, .maxSamplerAnisotropy = 16,
.maxViewports = MAX_VIEWPORTS, .maxViewports = MAX_VIEWPORTS,
@ -460,23 +467,31 @@ void anv_GetPhysicalDeviceProperties(
.maxFramebufferWidth = (1 << 14), .maxFramebufferWidth = (1 << 14),
.maxFramebufferHeight = (1 << 14), .maxFramebufferHeight = (1 << 14),
.maxFramebufferLayers = (1 << 10), .maxFramebufferLayers = (1 << 10),
.maxFramebufferColorSamples = 8, .framebufferColorSampleCounts = sample_counts,
.maxFramebufferDepthSamples = 8, .framebufferDepthSampleCounts = sample_counts,
.maxFramebufferStencilSamples = 8, .framebufferStencilSampleCounts = sample_counts,
.framebufferNoAttachmentsSampleCounts = sample_counts,
.maxColorAttachments = MAX_RTS, .maxColorAttachments = MAX_RTS,
.maxSampledImageColorSamples = 8, .sampledImageColorSampleCounts = sample_counts,
.maxSampledImageDepthSamples = 8, .sampledImageIntegerSampleCounts = VK_SAMPLE_COUNT_1_BIT,
.maxSampledImageIntegerSamples = 1, .sampledImageDepthSampleCounts = sample_counts,
.maxStorageImageSamples = 1, .sampledImageStencilSampleCounts = sample_counts,
.storageImageSampleCounts = VK_SAMPLE_COUNT_1_BIT,
.maxSampleMaskWords = 1, .maxSampleMaskWords = 1,
.timestampFrequency = 1000 * 1000 * 1000 / 80, .timestampPeriod = 80.0 / (1000 * 1000 * 1000),
.maxClipDistances = 0 /* FIXME */, .maxClipDistances = 0 /* FIXME */,
.maxCullDistances = 0 /* FIXME */, .maxCullDistances = 0 /* FIXME */,
.maxCombinedClipAndCullDistances = 0 /* FIXME */, .maxCombinedClipAndCullDistances = 0 /* FIXME */,
.discreteQueuePriorities = 1,
.pointSizeRange = { 0.125, 255.875 }, .pointSizeRange = { 0.125, 255.875 },
.lineWidthRange = { 0.0, 7.9921875 }, .lineWidthRange = { 0.0, 7.9921875 },
.pointSizeGranularity = (1.0 / 8.0), .pointSizeGranularity = (1.0 / 8.0),
.lineWidthGranularity = (1.0 / 128.0), .lineWidthGranularity = (1.0 / 128.0),
.strictLines = false, /* FINISHME */
.standardSampleLocations = true, /* FINISHME */
.optimalBufferCopyOffsetAlignment = 128,
.optimalBufferCopyRowPitchAlignment = 128,
.nonCoherentAtomSize = 64,
}; };
*pProperties = (VkPhysicalDeviceProperties) { *pProperties = (VkPhysicalDeviceProperties) {